繁体   English   中英

PostgreSQL触发功能更新

[英]PostgreSQL Trigger Function Update

我有一个表,其中列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”。

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

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

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=# 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM