如何使用bash shell中的psql命令执行多个查询?

时间:2015-03-02 06:11:53

标签: database postgresql shell

我需要使用psql -c命令从命令行执行postgresql查询。 对于每个psql命令,它会打开一个新的tcp连接以连接到数据库服务器并执行查询,这是大量查询的开销。

目前我可以像这样执行单个查询:

psql -U postgres -h <ip_addr> -c "SELECT * FROM xyz_table;"

当我尝试执行如下的多个查询时,但只执行了最后一个查询。

psql -U postgres -h <ip_addr> -c "SELECT * FROM xyz_table; SELECT * FROM abc_table;"

任何人都可以帮助我并告诉我正确的方法吗?

4 个答案:

答案 0 :(得分:51)

-c只处理一个命令。但是没有它,psql期望命令被传递到标准输入,例如:

psql -U postgres -h <ip_addr> <database_name> << EOF
SELECT * FROM xyz_table;
SELECT * FROM abc_table;
EOF

或者使用echo和管道。

答案 1 :(得分:8)

使用echo和管道将其放在一行:

echo 'SELECT * FROM xyz_table; \n SELECT * FROM abc_table' | psql -U postgres 

答案 2 :(得分:6)

--file参数执行文件的内容

psql -U postgres -h <ip_addr> -f "my_file.psql"

所有输出都将发送到标准输出

http://www.postgresql.org/docs/current/static/app-psql.html

答案 3 :(得分:5)

至少从9.6.2开始,这种方法也适用:

  

psql -c“select now()” - c“select version()” - U postgres -h 127.0.0.1

现在

2017-12-26 20:25:45.874935 + 01 (1排)

版本

在x86_64-pc-linux-gnu上的PostgreSQL 9.6.2,由gcc编译(Ubuntu 5.3.1-14ubuntu2)5.3.1 20160413,64位 (1排)