Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 985
Ramón J Romero y Vigil Avatar asked Jun 24 '26 05:06

Ramón J Romero y Vigil


1 Answers

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.

like image 159
Mike Organek Avatar answered Jun 28 '26 21:06

Mike Organek



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!