首页 > 解决方案 > 在 postgres psql 命令中设置包含文件的 search_path

问题描述

如何在 psql 命令中包含多个搜索路径,以便可以使用不同的 search_paths 运行多个文件,但都可以在一个事务中运行?

psql
  --single-transaction
  --command="set search_path = 'a'; \i /sqlfile/a.sql; set search_path = 'b'; \i /sqlfile/b.sql;"

当我运行它时,我在\i. 我需要单独包含这些文件并且它们是动态生成的,所以我宁愿使用 a 运行它,而--command不是生成一个文件并--file尽可能使用它。

标签: sqlpostgresqlpsql

解决方案


关于--command选项的手册:

command必须是服务器完全可解析的命令字符串(即,它不包含特定于 psql 的功能),或者是单个反斜杠命令。因此,您不能 在一个-c选项中混合使用 SQL 和 psql 元命令。为此,您可以使用重复-c的选项或将字符串通过管道传输到 psql [...]

大胆强调我的。

尝试:

psql --single-transaction -c 'set search_path = a' -c '\i /sqlfile/a.sql' -c 'set search_path = b' -c '\i /sqlfile/b.sql'

或使用here-document

psql --single-transaction <<EOF
set search_path = a;
\i /sqlfile/a.sql
set search_path = b;
\i /sqlfile/b.sql
EOF

search_path不需要引号,顺便说一句。


推荐阅读