我需要使用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;"
任何人都可以帮助我并告诉我正确的方法吗?
答案 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"
所有输出都将发送到标准输出
答案 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排)