如何在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');
(数据库默认是未激活你开始一个新的会话之前。)
相关: