【问题标题】:PostgreSQL Trigger Function UpdatePostgreSQL 触发函数更新
【发布时间】:2017-08-02 23:53:54
【问题描述】:

我有一个表格,其中 sub 列是 id 列的第一个数字。

    id   |  sub  |
---------+-------+
      21 |   2   |
      32 |   3   |
      43 |   4   |

我想创建一个触发器,当id 更改时更新sub

下面是我想要的结果示例:

    id   |  sub  |
---------+-------+
      21 |   2   |
      22 |   2   |
      43 |   4   |

在第二行中,id 的值已从“32”更改为“22”,因此sub 必须从“3”更改为“2”。

有人可以帮我解决我的问题吗?

【问题讨论】:

    标签: sql database postgresql web


    【解决方案1】:

    这是基于您的示例的示例架构:

    CREATE TABLE t (id serial, sub int);
    INSERT INTO t (sub) values (null);
    INSERT INTO t (sub) values (null);
    INSERT INTO t (sub) values (null);
    

    你会使用这个函数并触发:

    CREATE OR REPLACE FUNCTION setSub() RETURNS TRIGGER AS $$
    BEGIN
        NEW.sub := substring(CAST(NEW.id as CHAR(6)), 1, 1);
        RETURN NEW;
    END;
    $$ LANGUAGE plpgsql;
    
    CREATE TRIGGER setSub
    BEFORE INSERT OR UPDATE ON t
    FOR EACH ROW EXECUTE PROCEDURE setSub();
    

    使用示例:

    test=# SELECT * FROM t;
     id | sub 
    ----+-----
      1 |    
      2 |    
      3 |    
    (3 rows)
    
    test=# UPDATE t SET id = 3000 WHERE id = 1;
    UPDATE 1
    test=# SELECT * FROM t;
      id  | sub 
    ------+-----
        2 |    
        3 |    
     3000 |   3
    (3 rows)
    
    test=# 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多