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

0pizxfdo  于 2023-03-17  发布在  PostgreSQL
关注(0)|答案(5)|浏览(164)

我需要使用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;"

谁能帮帮我,告诉我做这件事的正确方法?

f0brbegy

f0brbegy1#

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

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

或者使用echo和管道。

ghhkc1vu

ghhkc1vu2#

至少从9.6.2开始,该方法也起作用:
psql -c“立即选择()”-c“选择版本()”-U postgres -127.0.0.1

现在

2017年12月26日20:25:45.874935+01(一行)

版本

基于x86_64-pc-linux-gnu的PostgreSQL 9.6.2,由gcc编译(Ubuntu 5.3.1- 14 ubuntu 2)5.3.1 20160413,64位(1行)

relj7zay

relj7zay3#

使用echo和管道将其安装在一条直线上:

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

cpjpxq1n4#

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

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

所有输出将发送到标准输出
http://www.postgresql.org/docs/current/static/app-psql.html

iih3973s

iih3973s5#

“clean”解决方案是传递多个-c选项:

$ psql ... -c 'select 1 as a' -c "select 'foo' as b"
 a
---
 1
(1 row)

  b
-----
 foo
(1 row)

显著获益:你可以这样使用反斜线命令,例如\x
(@leo-y在评论中指出了这一点)

相关问题