Re: [GENERAL] [SQL] bash postgres

2009-03-23 Thread Erik Jones

On Mar 22, 2009, at 9:03 PM, Greenhorn wrote:


Hi,

I'm trying to pass variables on a bash script embedded with psql  
commands.


cat header.txt

to1,from1,subject1
to2,from2,subject2
to3,from3,subject3
to4,from4,subject4

cat b.sh

#!/bin/bash
two=2

psql -h localhost -U postgres -d mobile -c create temp table header (

field_1   textnot null,
field_2   textnot null,
field_3   textnot null

);

\\copy header FROM header.txt CSV

SELECT * FROM header limit $two; 


When I execute b.sh

ERROR:  syntax error at or near \
LINE 10: \copy header FROM header.txt CSV
^

How do I use \c (or any other psql commands beginning with a \) in a
bash script?


For multi-line input to a psql call in a bash (or any decent shell)  
script, I'd use a here document:


#!/bin/bash

#!/bin/bash
two=2

psql -d pagila COPYTEST
create temp table header (

field_1   textnot null,
field_2   textnot null,
field_3   textnot null

);

\copy header FROM header.txt CSV

SELECT * FROM header limit $two;
COPYTEST

$ ./tst.sh
Null display is \N.
Timing is on.
CREATE TABLE
Time: 7.568 ms
Time: 2.374 ms
 field_1 | field_2 | field_3
-+-+--
 to1 | from1   | subject1
 to2 | from2   | subject2
(2 rows)

Time: 1.011 ms

(P.S. Your quotes around $two in your original are not needed, in fact  
they're straight up broken as $two is already inside of a double- 
quoted string).


Erik Jones, Database Administrator
Engine Yard
Support, Scalability, Reliability
866.518.9273 x 260
Location: US/Pacific
IRC: mage2k






--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


Re: [GENERAL] [SQL] bash postgres

2009-03-23 Thread Tom Lane
Erik Jones ejo...@engineyard.com writes:
 On Mar 22, 2009, at 9:03 PM, Greenhorn wrote:
 How do I use \c (or any other psql commands beginning with a \) in a
 bash script?

 For multi-line input to a psql call in a bash (or any decent shell)  
 script, I'd use a here document:

Or echo/cat the script into psql's stdin, if you prefer that type of
notation.  The reason you have to do this is that psql doesn't recognize
backslash commands in a -c string.  There's a school of thought that
doesn't want us to allow multiple commands in a -c string, even.

regards, tom lane

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


Re: [GENERAL] [SQL] bash postgres

2009-03-23 Thread Erik Jones


On Mar 23, 2009, at 7:05 AM, Tom Lane wrote:


Erik Jones ejo...@engineyard.com writes:

On Mar 22, 2009, at 9:03 PM, Greenhorn wrote:
How do I use \c (or any other psql commands beginning with a \)  
in a

bash script?



For multi-line input to a psql call in a bash (or any decent shell)
script, I'd use a here document:


Or echo/cat the script into psql's stdin, if you prefer that type of
notation.  The reason you have to do this is that psql doesn't  
recognize

backslash commands in a -c string.  There's a school of thought that
doesn't want us to allow multiple commands in a -c string, even.


Hmm... Apparently it does recognize them as long as the backslash is  
the first character in the command string:


$ psql -c '\d' postgres
No relations found.
$ psql -c ' \d' postgres
ERROR:  syntax error at or near \
LINE 1:  \d
 ^

Is that expected behavior?

Erik Jones, Database Administrator
Engine Yard
Support, Scalability, Reliability
866.518.9273 x 260
Location: US/Pacific
IRC: mage2k






--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


Re: [GENERAL] [SQL] bash postgres

2009-03-23 Thread Tom Lane
Erik Jones ejo...@engineyard.com writes:
 On Mar 23, 2009, at 7:05 AM, Tom Lane wrote:
 The reason you have to do this is that psql doesn't recognize
 backslash commands in a -c string.  There's a school of thought that
 doesn't want us to allow multiple commands in a -c string, even.

 Hmm... Apparently it does recognize them as long as the backslash is  
 the first character in the command string:

Hmm, maybe I was just misremembering the details.  What's certainly
true is that psql doesn't run a -c string through the same extensive
parsing that data from stdin gets.

regards, tom lane

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general