PostgreSQL触发器函数更新
我有一个表,其中列PostgreSQL触发器函数更新,sql,database,postgresql,web,Sql,Database,Postgresql,Web,我有一个表,其中列sub是列id的第一个数字 id | sub | ---------+-------+ 21 | 2 | 32 | 3 | 43 | 4 | 我想创建一个触发器,当id发生更改时更新sub 下面是我想要的结果示例: id | sub | ---------+-------+ 21 | 2 | 22 | 2 | 43 | 4 |
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=#