2014-10-09 72 views
0

我有一个名为students的表,它将从外部源填充。数据以w /组合键输入,然后我想通过uuid_generate_v5来生成UUID。我目前正在通过这样做如何使用postgresql触发器来设置UUID

UPDATE students SET id = uuid_generate_v5(uuid_ns_url(), CONCAT(composite1, composite2)); 

我有兴趣将此行插入到此表中时将其移入触发器。我会如何去做这件事?

+3

创建于students'触发插入或更新前的'。 [文档在这里](http://www.postgresql.org/docs/current/static/sql-createtrigger.html)。 (向下滚动查看示例。)无论您是需要此选项而不是“在插入学生之前”,都依赖于应用程序。 – 2014-10-09 15:33:19

+0

感谢您的链接! – 2014-10-09 15:53:22

回答

7

有点像未经测试:

CREATE OR REPLACE FUNCTION my_trigger() 
RETURNS TRIGGER 
LANGUAGE plpgsql 
AS $$ 
BEGIN 
    NEW.uuid_col := uuid_generate_v5(uuid_ns_url(), CONCAT(NEW.composite1, NEW.composite2)); 
    RETURN NEW; 
END; 
$$; 

CREATE TRIGGER mytable_my_trigger 
BEFORE INSERT ON mytable 
FOR EACH ROW EXECUTE PROCEDURE my_trigger(); 

但实际上,the manual on PL/PgSQL triggersthe CREATE TRIGGER docs应该真正让你有...

+0

函数部分的语法真的让我失望了。感谢你! – 2014-10-09 15:44:20