我有一个PostgreSQL之前插入触发器上创建的,基本上重插入子表格。一旦我入记录,我想到中止的请求,以避免重复的数据(不插入父母表),所以我使用return NULL在的触发器。问题是我需要的记录可以返回的,所以我能获得身份证。如果我回NULL,我得到空。

上述问题的讨论在以下链接:PostgreSQL触发不回任何东西

一个答复说,插入父母表(通过不返回null但返回新)和使用之后插入触发删除它从父母表。但我看着1000写每第二,这可能是一个严重的问题,在性能,因为该删除。是否有任何其他方式做到这一点?

确切的说是没有一种方法返回的id插行中没有插入父母表,并删除它。

有帮助吗?

解决方案

我写了 答案你是指.正如我已经暗示过:

你也可以使用 RULE ... 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, 我想你会需要的条件分发的刀片...

currval() / lastval()

如果你经营一个触发器 FOR EACH ROW 你可以很容易地获取适当值序列 currval() / lastval().最棘手的部分要返回的那些价值从一个触发功能。我只能想写的临时表格。需要点思考时来创建和时下降一个...

我可能会 重新考虑整个方法 和重新定向的数据多 INSERT 报表的实际目标表...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top