【发布时间】:2015-11-17 21:16:41
【问题描述】:
我在为 postgresql 中的表 [t_1] 创建插入规则或触发器时遇到问题
表格有四列:c1, c2, c3, c4, id(unique) 当一条新记录尝试插入到表中时,有以下规则:
- 如果 id 不重复,则使用 NEW 记录进行正常插入
- 如果 id 存在:则检查 c1,c2,c3 和 NEW.c1, NEW.c2, NEW.c3;如果 c1 或 c2 或 c3 不为空,则更新记录,不要用新记录覆盖旧记录。
例如
c1(非空),c2(空),c3(非空),c4(空)
+
nC1(非空),nC2(非空),nC3(空),nC4(空)
结果
c1、nC2、c3、c4
- 如果 id 存在:如果新 c4 不为空,则检查旧 c1、c2、c3,如果旧 c1、c2、c3 中的任何一个不为空,则不做任何事情(不要插入或更新)
这是我目前的代码:(仍然没有第三种情况的解决方案)
CREATE RULE "t_1_on_duplicate_ignore" AS ON INSERT TO "t_1"
WHERE EXISTS(SELECT 1 FROM t_1
WHERE (id)=(NEW.id)
DO INSTEAD
(
UPDATE t_1 SET
c1 = CASE
WHEN c1 IS NOT NULL
THEN c1
ELSE NEW.c1
END,
c2 = CASE
WHEN c2 IS NOT NULL
THEN c2
ELSE NEW.c2
END,
c3 = CASE
WHEN c3 IS NOT NULL
THEN c3
ELSE NEW.c3
END
WHERE id = NEW.id;
)
【问题讨论】:
标签: postgresql