Postgresql

在觸發器函式中將 RECORD 插入表中

  • February 7, 2014

我想在觸發器的表中插入一個記錄數據類型變數(新變數)。SQL 會是什麼樣子?

以下嘗試均未成功:

EXECUTE 'INSERT INTO my_table VALUES ' || NEW;
EXECUTE 'INSERT INTO my_table VALUES ' || NEW.*;
EXECUTE 'INSERT INTO my_table SELECT * FROM ' || NEW;

您必須展開記錄。

我還在 中添加了一個列列表,insert並使用了更安全的EXECUTE ... USING形式。

EXECUTE 'INSERT INTO my_table (col1, col2, col3) VALUES (?, ?, ?)' USING NEW.col1, NEW.col2, NEW.col3;

如果這不能解決問題,請更詳細地解釋您的案例。

實際上,您不必手動擴展記錄。只要兩個表之間的numbersequencetypes匹配,您就可以使用這種更簡單的形式:

EXECUTE 'INSERT INTO my_table SELECT ($1).*'
USING NEW;

由於您的表名似乎很穩定,因此您甚至不需要使用EXECUTE. 只是一個簡單的INSERT

INSERT INTO my_table SELECT (NEW).*

複合類型需要括號使語法明確。

問問自己,未來你的應用可能會發生什麼變化:

  • 如果目標表應該與源表保持同步(或者目標和源相同),那麼最好不要顯式列出列。
  • 如果您只想選擇某些列並且不想通過對源表或目標表的可能更新來更改它,最好提供一個列列表。

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