gpt4 book ai didi

postgresql - AFTER INSERT PostgreSQL 触发器的意外行为

转载 作者:行者123 更新时间:2023-11-29 13:15:22 24 4
gpt4 key购买 nike

我是 PostgreSQL 的新手,在正确编码 AFTER INSERT 触发器时遇到了问题(而且一直无法找到符合我特定需要的示例)。我有两个表,每个表都包含多个列,其中一个在表之间共享 (sampleid)。当新行插入到 table1 并且这些行中的 sampleid 不是 NULL 时,我希望触发触发器并将插入的 sampleids 复制到 table2。当 table1.sampleid 为 NULL,并且不希望触发器触发时。

我的(简化的)表格如下:

CREATE TABLE table1 (
a_id SERIAL PRIMARY KEY,
species CHAR(4),
sampleid TEXT);

CREATE TABLE table2 (
sampleid TEXT PRIMARY KEY,
replicate INTEGER,
bd DOUBLE PRECISION);

这里是触发函数和触发器:

CREATE OR REPLACE FUNCTION func_sampleid_copy()
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.sampleid IS NOT NULL THEN
INSERT INTO table2 (sampleid)
VALUES(NEW.sampleid);
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;

CREATE TRIGGER trig_sampleid_copy
AFTER INSERT ON table1
FOR EACH ROW
EXECUTE PROCEDURE func_sampleid_copy();

如果我向表 1 中插入两行,其中 sampleid 不为空,而另一行为空

INSERT INTO table1 (species, sampleid) 
VALUES ('RACA', 'XXX100'), ('AMMA', '');

我预计 sampleid 的单个值将被复制到表 2(即 XXX100)。相反,对 table2 的查询 (SELECT * FROM table2) 显示两行,其中 sampleid 不为空,另一行为空)。我需要在触发器/触发器函数中更改什么以确保不会将 sampleid 的空值复制到 table2? @dmfay 提出的相关问题不是特别清楚,我认为它并不是真正的重复问题。

最佳答案

@Abelisto 的评论为我的问题提供了答案。当我将 NULL 值(而不是空字符串)添加到 table1 时,触发器和触发器函数按预期工作。

关于postgresql - AFTER INSERT PostgreSQL 触发器的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49933140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com