代码之家  ›  专栏  ›  技术社区  ›  Chris

在psql脚本中使用变量

  •  0
  • Chris  · 技术社区  · 7 年前

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

    下面的脚本命令完成了这项工作(我需要混合使用大写和小写的模式名和表名):

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

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

    将整个脚本的模式设置为“DbSchema”会很好。但我还没有找到正确的语法。以下示例无效(错误消息:关系“DbSchema”不存在):

    \set schema "DbSchema"
    
    SELECT table_to_xml('"DbTable"', false, true, '');
    

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

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

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   khoroshevj    7 年前

    试试这样的

    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, '');
    
        2
  •  0
  •   Chris    7 年前

    最终解决方案是:

    \set dbschema 'DbSchema'
    
    SELECT table_to_xml('"' || :'dbschema' || '"."DbTable"', false, true, '');