如何在插入时将另一个 table 的值插入到另一个值?
How can I insert a value from another table to another on insertion?
我有这个 table 叫做 users
。每当我注册一个用户时,我都会为他生成一个 UUID。生成此 UUID 时,我想在另一个名为 health
的 table 中插入一行,其 UUID 与在用户 table.
上插入的 UUID 相同
我想这样做,但我做不到:
CREATE OR REPLACE FUNCTION test()
RETURNS trigger AS
'
BEGIN
INSERT INTO health(uuid) VALUES (users.uuid);
RETURN NEW;
END;
' LANGUAGE plpgsql;
CREATE TRIGGER test_trigger
AFTER INSERT
ON users
FOR EACH ROW
EXECUTE PROCEDURE test(users.uuid);
我遇到了麻烦,因为没有可以比较健康状况的数据 table,因为该行不存在。语法('
)的微小变化是因为 Spring JPA。
您的印象似乎是您需要在函数调用中传递 UUID。但事实并非如此。特殊记录 NEW
包含新行。在函数体中使用:
CREATE OR REPLACE FUNCTION test()
RETURNS trigger
LANGUAGE plpgsql AS
'
BEGIN
INSERT INTO health(uuid) VALUES (NEW.uuid); -- this!
RETURN NULL; -- irreleant for AFTER trigger
END
';
CREATE TRIGGER test_trigger
AFTER INSERT ON users
FOR EACH ROW EXECUTE FUNCTION test(); -- no parameter!
手册中的基础知识:
对于 Postgres 10 或更早版本,请改用(误导性的)keyword PROCEDURE
(没有区别,新语法更合理):
...
FOR EACH ROW EXECUTE PROCEDURE test(); -- no parameter!
我有这个 table 叫做 users
。每当我注册一个用户时,我都会为他生成一个 UUID。生成此 UUID 时,我想在另一个名为 health
的 table 中插入一行,其 UUID 与在用户 table.
我想这样做,但我做不到:
CREATE OR REPLACE FUNCTION test()
RETURNS trigger AS
'
BEGIN
INSERT INTO health(uuid) VALUES (users.uuid);
RETURN NEW;
END;
' LANGUAGE plpgsql;
CREATE TRIGGER test_trigger
AFTER INSERT
ON users
FOR EACH ROW
EXECUTE PROCEDURE test(users.uuid);
我遇到了麻烦,因为没有可以比较健康状况的数据 table,因为该行不存在。语法('
)的微小变化是因为 Spring JPA。
您的印象似乎是您需要在函数调用中传递 UUID。但事实并非如此。特殊记录 NEW
包含新行。在函数体中使用:
CREATE OR REPLACE FUNCTION test()
RETURNS trigger
LANGUAGE plpgsql AS
'
BEGIN
INSERT INTO health(uuid) VALUES (NEW.uuid); -- this!
RETURN NULL; -- irreleant for AFTER trigger
END
';
CREATE TRIGGER test_trigger
AFTER INSERT ON users
FOR EACH ROW EXECUTE FUNCTION test(); -- no parameter!
手册中的基础知识:
对于 Postgres 10 或更早版本,请改用(误导性的)keyword PROCEDURE
(没有区别,新语法更合理):
...
FOR EACH ROW EXECUTE PROCEDURE test(); -- no parameter!