【问题标题】: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=#