簡體   English   中英

Laravel在觸發器PostgreSQL上的BEGIN附近遷移錯誤

[英]Laravel migrate error near BEGIN on trigger PostgreSQL

我已經在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');

我真的很困惑。 希望可以有人幫幫我 :)

mysql和postgre的語法和結構不同,在Postgres中,我們必須先編寫觸發器函數(過程),然后在觸發器的主體中調用它

所以之后

FORE EACH ROW

應該有一個

when event __type_of_event__

然后我們調用觸發函數

execute procedure __procedure_name__

這里看看有關觸發器的文檔

在這里觸發程序

請注意, when event是可選的時,過程內的字段名稱應更改為純文本,或將其用雙引號引起來(如果它與大寫字母混合)

不用擔心文檔的版本,postgresql觸發器在各個版本之間是一致的,希望對您有所幫助!

您需要使其成為一個過程:

從文檔:

PostgreSQL僅允許為觸發的動作執行用戶定義的函數。 該標准允許執行許多其他SQL命令,例如CREATE TABLE,作為觸發操作。 通過創建執行所需命令的用戶定義函數,不難解決此限制。

DB::unprepared('CREATE TRIGGER histories_insert 
                AFTER INSERT ON packets 
                FOR EACH ROW
                EXECUTE PROCEDURE that_procudure_you_wrote_with_that_content(new)');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM