在 psql 脚本中使用变量
Use of a variable in psql script
我想将多个 table 的 PostgreSQL 数据库写入一个 XML 文件。
下面的脚本命令可以完成这项工作(我需要混合大写和小写的架构和 table 名称):
SELECT table_to_xml('"DbSchema"."DbTable"', false, true, '');
但是,每当我想导出另一个模式时,我必须在每一行代码中替换模式的名称(这没什么大不了的,但它并不优雅)。
将整个脚本的架构设置为 "DbSchema" 会很优雅。但是我没能找到正确的语法。以下示例不起作用(错误消息:关系 "DbSchema" 不存在):
\set schema "DbSchema"
SELECT table_to_xml('"DbTable"', false, true, '');
或者,我可以为架构名称设置一个变量。但是下面的代码也给出了一条错误信息:missing FROM-clause entry for tabl "DbSchema":
\set dbschema "DbSchema"
SELECT table_to_xml(:dbschema."DbTable", false, true, '');
我尝试了很多带引号和不带引号的变体,但我没有找到正确的语法。我做错了什么?
尝试这样的事情
SELECT table_to_xml('"' || t.dbschema || '"."DbTable"', false, true, '')
FROM (VALUES ('DbSchema')) AS t (dbschema);
使用 psql 你可以这样做
\set schema "DbSchema"
SELECT table_to_xml(:'schema' || '."DbTable"', false, true, '');
最终的解决方案是:
\set dbschema 'DbSchema'
SELECT table_to_xml('"' || :'dbschema' || '"."DbTable"', false, true, '');
我想将多个 table 的 PostgreSQL 数据库写入一个 XML 文件。
下面的脚本命令可以完成这项工作(我需要混合大写和小写的架构和 table 名称):
SELECT table_to_xml('"DbSchema"."DbTable"', false, true, '');
但是,每当我想导出另一个模式时,我必须在每一行代码中替换模式的名称(这没什么大不了的,但它并不优雅)。
将整个脚本的架构设置为 "DbSchema" 会很优雅。但是我没能找到正确的语法。以下示例不起作用(错误消息:关系 "DbSchema" 不存在):
\set schema "DbSchema"
SELECT table_to_xml('"DbTable"', false, true, '');
或者,我可以为架构名称设置一个变量。但是下面的代码也给出了一条错误信息:missing FROM-clause entry for tabl "DbSchema":
\set dbschema "DbSchema"
SELECT table_to_xml(:dbschema."DbTable", false, true, '');
我尝试了很多带引号和不带引号的变体,但我没有找到正确的语法。我做错了什么?
尝试这样的事情
SELECT table_to_xml('"' || t.dbschema || '"."DbTable"', false, true, '')
FROM (VALUES ('DbSchema')) AS t (dbschema);
使用 psql 你可以这样做
\set schema "DbSchema"
SELECT table_to_xml(:'schema' || '."DbTable"', false, true, '');
最终的解决方案是:
\set dbschema 'DbSchema'
SELECT table_to_xml('"' || :'dbschema' || '"."DbTable"', false, true, '');