我写了你所指的答案。正如我已经暗示过的那样:
你也可以使用 aRULE ... INSTEAD ..
来达到这个目的。
RULE
规则可能很棘手。我宁愿尽可能使用触发器。在你尝试这个之前,一定要阅读一下:
CREATE OR REPLACE RULE tbl_ins AS
ON INSERT TO tbl
DO INSTEAD
INSERT INTO tbl2 (col1, col2, ...) -- just do mention columns where ...
VALUES (NEW.col1, NEW.col2, ...) -- ... you want to insert column defaults
RETURNING tbl2.*
这将tbl2
在避免幻行的同时返回值。但是,根据以下文档CREATE RULE
:
在、 或视图的规则中INSERT
,您可以添加一个
发出视图列的子句。如果规则分别由、或命令触发,则此子句将用于计算输出
。当规则由不带 的命令触发时,规则的
子句将被忽略。当前的实现只允许无条件规则包含;UPDATE
DELETE
RETURNING
INSERT RETURNING
UPDATE RETURNING
DELETE RETURNING
RETURNING
RETURNING
INSTEAD
RETURNING
大胆强调我的。
既然你提到sub-tables
了,我认为你需要条件来分发插入...
如果您使用触发器进行操作,您可以使用/FOR EACH ROW
轻松地从序列中获取适当的值。棘手的部分是从触发函数返回这些值。我只能想到写一个临时表。需要一些思考何时创建以及何时删除那个......currval()
lastval()
我可能会重新考虑整个方法并将数据重定向到多个INSERT
语句到实际的目标表......