Reputation: 17973
I have a set of linux applications that are being composed together via pipes
some_application | awk '{print "INSERT INTO my_table VALUES (\x27" $2 "\x27," $3 ")"'
The output of which will be a series of SQL INSERT
commands:
INSERT INTO my_table VALUES ('foo',42)
INSERT INTO my_table VALUES ('bar',43)
How can these multiple commands be piped into psql
?
There is a similar question which answers how to execute a single command using the -c
parameter for psql. But that answer is not ideal for my scenario because it requires establishing a new connection for each command; I would prefer to setup a single connection and then pipe all commands through that one session.
Thank you in advance for your consideration and response.
Upvotes: 8
Views: 8373
Reputation: 12494
You can pipe it into psql
directly, but you need semicolon terminators for each line.
some_application | awk '{print "INSERT INTO my_table (\'" $2 "\'," $3 ");"' | psql <your connection switches>
You can test your connection parms by doing something innocuous like so:
echo "select count(*) from pg_tables;" | psql <your parms>
You will see the result of the query if the connection information is correct.
Upvotes: 8