Postgresql插入规则/触发器

时间:2015-11-17 21:16:41

标签: postgresql

我在postgresql

中为表[t_1]创建插入规则或触发器时遇到问题

该表有四列:c1,c2,c3,c4,id(唯一) 当新记录尝试插入表中时,有以下规则:

  1. 如果不重复ID,则使用新记录正常插入
  2. 如果id存在:则检查c1,c2,c3和NEW.c1,NEW.c2,NEW.c3;如果c1或c2或c3不为null,则执行更新记录,不要用新记录覆盖旧记录。
  3. 例如

    c1(非空),c2(null),c3(非空),c4(null)

    +

    nC1(非空),nC2(非空),nC3(null),nC4(null)

    结果

    c1,nC2,c3,c4

    1. 如果id存在:如果新的c4不为null,则检查旧的c1,c2,c3,如果旧的c1,c2,c3中的任何一个不为null则不要(不要插入或更新)
    2. 这是我目前的代码:(仍然没有第三个条件的解决方案)

        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;
      )
      

2 个答案:

答案 0 :(得分:0)

大家好,我想我用以下命令解决了这个问题(至少对我有用):

<loadFromRemoteSources enabled="true" />

有更好的解决方案吗?

答案 1 :(得分:0)