使用postgres psql命令中的文件include设置search_path

时间:2018-11-01 13:10:03

标签: sql postgresql psql

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

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

运行此命令时,在\i处出现语法错误。我需要分别包含文件,并且它们是动态生成的,所以我宁愿使用--command运行它,也不必生成文件并在可能的情况下使用--file

1 个答案:

答案 0 :(得分:1)

The manual about the --command option:

  

command 必须是可以由以下命令完全解析的命令字符串   服务器(即,它不包含特定于psql的功能)或单个   反斜杠命令。因此,您不能混合使用SQL和psql元命令   在-c选项中。为此,您可以使用重复的-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'

或使用此处文档

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

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