[英]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.