如何在DDL命令中将子查询用作数据库名称?

问题描述:

我想知道是否有可能在PostgreSQL(9.5.1)DDL语句中使用子查询的结果作为数据库名称。如何在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 ... 

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

您需要为动态SQL:

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

使用format()逃避安全,同时在它的数据库名称。

BTW,以取消设置:

ALTER DATABASE your_db RESET x.a_var; 

要查看当前设置:

SELECT current_setting('x.a_var'); 

(数据库默认是未激活你开始一个新的会话之前。)

相关: