我已经在mysql
和laravel中做了数据库触发器,它工作正常,但是当我移动到postgresql
时,我得到错误:
SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "BEGIN"
(我是新使用postgresql btw)
下面是我在迁移中编写的代码:
DB::unprepared('CREATE TRIGGER histories_insert AFTER INSERT ON packets FOR EACH ROW
BEGIN
IF new.status = "pending" THEN
insert into `histories` (`packet_id`, `message`, `created_at`, `updated_at`) VALUES (new.id, "Barang berhasil di buat", now(), now());
END IF;
END');
我真的很困惑。希望有人能帮助我:)
3条答案
按热度按时间7cjasjjr1#
mysql和postgre中的语法和结构是不同的,在postgre中,我们必须首先编写触发器函数(过程),然后在触发器的主体中调用它
所以之后
应该有一个
然后调用触发函数
查看有关触发器here的文档
以及触发程序X1 E1 F1 X
注意到
when event
是可选的,并且过程内的字段名称应更改为纯文本,或用双引号括起来(如果与大写字母混合)不要担心文档的版本,postgresql触发器在不同版本之间是一致的,希望这能有所帮助!
owfi6suc2#
你需要把它变成一个程序:
来自文档:
PostgreSQL只允许执行用户定义的函数作为触发操作。标准允许执行许多其他SQL命令,如CREATE TABLE,作为触发操作。通过创建一个执行所需命令的用户定义函数,可以很容易地解决这个限制。
ao218c7q3#
正如Erdi所提到的,MySQL中的语法和结构与www.example.com不同postgres.here,这是您可以为postgres数据库编写迁移的方式: