Re: How to query by column names - Mailing list pgsql-sql

From Jeff Frost
Subject Re: How to query by column names
Date
Msg-id Pine.LNX.4.64.0701222115190.5992@discord.home.frostconsultingllc.com
Whole thread Raw
In response to How to query by column names  (Richard Ray <rray@mstc.state.ms.us>)
Responses Re: How to query by column names  (John Summerfield <postgres@herakles.homelinux.org>)
List pgsql-sql
On Tue, 23 Jan 2007, Josh Williams wrote:

> From: Jeff Frost <jeff@frostconsultingllc.com>
>> On Mon, 22 Jan 2007, Richard Ray wrote:
> ...
>
> That's definitely part of it.  I'm assuming the above is an abridged example 
> and the OP is doing something dynamic with the query.  The real trouble is 
> Bash likes to expand the asterisk into a list of every file in the current 
> directory when you try to push the command through a variable.  So it's just 
> a matter of finding a way to escape the * character to keep Bash from 
> globbing, which unfortunately right now is escaping me (no pun intended.)

Oh...you just need to put quotes around the variable like this:

#!/bin/bash
CMD="psql -c 'select * from products;' jefftest"
echo "$CMD" >> my_log
eval "$CMD" | while read x; do echo $x
done

discord:~ $ /tmp/test.sh
productid | name | price
-----------+-----------+-------
1 | Notepad | 1.99
3 | Legal Pad | 2.99
(2 rows)

discord:~ $ cat my_log
psql -c 'select * from products;' jefftest

At any rate, if that's still a problem, you can turn off globbing, do what 
needs doing, then turn on globbing like the following:

#!/bin/bash
#
# Turn off globbing
#
set -o noglob
# ...
# Do your * laden work here
# ...
# Turn on globbing
set +o noglob

>
> Two reasonable workarounds come to mind:
> 1. Turn off Bash's pathname expansion: #!/bin/bash -f
> This will of course disable it script-wide, and thus will break any place you actually are trying to use this
feature,if at all.
 
>
> 2. Don't put an * in the variable.
> If all you're really doing is replacing the table name then only stick that into a variable, say tablename, and
directlyexecute the rest:
 
> psql -d test -c "SELECT * FROM $tablename" | while etc
> Worst case, you'll end up with a messy $leftside and $rightside variable set.
>
> To answer the original question, the field must be hard coded either as a list or that perhaps over-used(?) asterisk.
If you really need to pull and use that from the table definition you'll need two round trips to the server.
 

-- 
Jeff Frost, Owner     <jeff@frostconsultingllc.com>
Frost Consulting, LLC     http://www.frostconsultingllc.com/
Phone: 650-780-7908    FAX: 650-649-1954


pgsql-sql by date:

Previous
From: Jeff Frost
Date:
Subject: Re: How to query by column names
Next
From: "Josh Williams"
Date:
Subject: Re: How to query by column names