2016-04-03 66 views
1

我想知道是否有可能在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 ... 

什麼是使用子的正確方法查詢(如果可能)?

回答

1

您需要爲動態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'); 

(數據庫默認是未激活你開始一個新的會話之前。)

相關:

相關問題