【问题标题】:How to use a subquery as a database name in a DDL command?如何在 DDL 命令中使用子查询作为数据库名称?
【发布时间】:2016-04-03 23:48:57
【问题描述】:

我想知道是否可以在 PostgreSQL (9.5.1) DDL 语句中使用子查询的结果作为数据库名称。

例如,我想通过以下方式更改当前数据库:

ALTER DATABASE (SELECT current_database()) SET a_var TO 'a_value';

如果我运行这个,就会发生错误:

ERROR:  syntax error at or near "("
LINE 1: ALTER DATABASE (SELECT current_database()) SET ...

使用子查询的正确方法是什么(如果可能)?

【问题讨论】:

    标签: postgresql subquery dynamic-sql identifier


    【解决方案1】:

    为此,您需要动态 SQL:

    DO
    $do$
    BEGIN
    EXECUTE format($f$ALTER DATABASE %I SET x.a_var TO 'a_value'$f$, current_database());
    END
    $do$;
    

    使用format() 安全地转义数据库名称。

    顺便说一句,取消设置:

    ALTER DATABASE your_db RESET x.a_var;
    

    查看当前设置:

    SELECT current_setting('x.a_var');
    

    (在您开始一个新会话之前,DB 默认是不活动的。)

    相关:

    【讨论】:

      猜你喜欢
      • 2012-05-07
      • 2013-04-19
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 2020-02-14
      • 2010-11-15
      相关资源
      最近更新 更多