我想将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, '');
我尝试了许多带引号和不带引号的变体,但是我找不到正确的语法。我究竟做错了什么?
尝试这样的事情
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, '');