Search code examples
postgresqlpipecommand-line-interfacesql-insertpsql

Pipe multiple SQL commands to psql CLI


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.


Solution

  • 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.