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



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

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

当我运行这个程序时,我在i处得到一个语法错误。我需要单独包含这些文件,并且它们是动态生成的,所以我宁愿使用--command运行它,也不必生成文件并在可能的情况下使用--file

关于--command选项的手册:

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

加粗强调mine。

尝试:

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不需要报价,顺便提一下

最新更新