在psql脚本中使用变量

问题描述 投票:0回答:2

我想将PostgreSQL数据库的多个表写入XML文件。

以下脚本命令执行该作业(我需要混合大写和小写的模式和表名称):

SELECT table_to_xml('"DbSchema"."DbTable"', false, true, '');

但是,每当我想导出另一个模式时,我必须在每一行代码中替换模式的名称(这不是什么大问题,但它并不优雅)。

将整个脚本的模式设置为“DbSchema”会很优雅。但我一直无法找到正确的语法。以下示例不起作用(错误消息:关系“DbSchema”不存在):

\set schema "DbSchema"

SELECT table_to_xml('"DbTable"', false, true, '');

或者,我可以为模式名称设置变量。但是下面的代码也给出了一条错误消息:缺少Tabl“DbSchema”的FROM子句条目:

\set dbschema "DbSchema"

SELECT table_to_xml(:dbschema."DbTable", false, true, '');

我尝试了许多带引号和不带引号的变体,但是我找不到正确的语法。我究竟做错了什么?

xml postgresql psql
2个回答
1
投票

尝试这样的事情

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, '');

0
投票

最终的解决方案是:

\set dbschema 'DbSchema'

SELECT table_to_xml('"' || :'dbschema' || '"."DbTable"', false, true, '');
© www.soinside.com 2019 - 2024. All rights reserved.