使用触发器将postgres SQL插入语句拆分为2个表

时间:2016-12-26 23:12:43

标签: sql postgresql triggers sql-insert

是否可以使用postgres触发器将INSERT语句拆分为2个表?因此,如果您执行insert into testtable (col1, col2) values (val1a, val1b), (val2a, val2b),可以使用触发器将其翻译为类似

的内容
insert into testtable (col1) values (val1a), (val1b)
insert into anothertable (col2) values (val2a), (val2b)

基本上,testtable可能没有col2,即使col2上应该存在testtable原始SQL INSERT吗?

如何使用触发器实现这一目标?

1 个答案:

答案 0 :(得分:2)

您可以VIEW使用触发器或规则来重定向INSERT

或者您可以在具有数据修改CTE的单个SQL语句中执行此操作。

WITH input(col1, col2) AS (
   VALUES
     (text 'val1a', text 'val1b')  --  explicit type cast in first row
   , ('val2a', 'val2b')
   )
, ins1 AS (
   INSERT INTO testtable (col1)
   SELECT col1 FROM input
   )
INSERT INTO anothertable (col2)
SELECT col2 FROM input;

通常情况下,还会存储输入行以某种方式的'val1a'和'val1b'之间的连接。
您可能希望使用RETURNING子句从第一个表中获取序列PK并将其存储在第二个表中。

相关: