是否可以使用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吗?
如何使用触发器实现这一目标?
答案 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并将其存储在第二个表中。
相关: