Postgresql

使用可變表名在postgreSQL中準備查詢?

  • November 19, 2020

我正在嘗試創建INSERT INTO一個名稱在變數中的表myTable

在 MySQL 中,我會這樣做:

SET @SQL = CONCAT('INSERT INTO ',myschema'.'mytable,' SELECT action_name, user, ...');
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

我檢查了 postgreSQL 文件以獲取準備好的語句,但找不到任何類似的範例。

我可以將查詢組合成一個字元串:

sql_query := 'INSERT INTO ' || mySchema || '.' || myTable || ' SELECT action_name, user, ';

但是我該如何執行呢?

要在 PostgreSQL 中編寫過程程式碼和使用變數,最常見的方法是在函式或塊 中使用plpgsql語言。文件中的Executing Dynamic Commands包含您需要的所有詳細資訊。DO

請注意,動態 SQL 語句不需要像 MySQL 範例中那樣的 PREPARE。可以執行直接包含 SQL 查詢的動態字元串,並且在大多數情況下就是這樣做的。

Postgres 的初學者可能會感到困惑的是,它有兩種不同的 EXECUTE 形式:

  • EXECUTE command-string [ INTO [STRICT] target ] [ USING expression [, ... ]在 plpgsql 程式碼塊中是一條plpgsql 指令
  • EXECUTE name [ ( parameter [, ...] ) ]是一個SQL 查詢,其中name是先前用 聲明的預準備語句的名稱PREPARE

引用自:https://dba.stackexchange.com/questions/231471