如何在插入时将另一个 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!