Postgresql

插入和更新觸發器不會在復製表上觸發

  • November 9, 2021

wal_level = logical我在我的 postgresql.conf 中的兩台伺服器上創建了一個發布和一個訂閱。複製執行正常。我的問題是跟踪複製表中的更改,所以我ve created a function and a trigger on INSERT andUPDATE`。但是,當在我的複製表中進行更改時,我創建的觸發器不會觸發。

我在這裡的另一個問題中發現了類似的問題和解決方案,但是當我這樣做時:

ALTER TABLE <table_name> ENABLE ALWAYS TRIGGER <trigger_name>;

我的複製過程停止工作,我pg_replication_slots.active = f在我的發布伺服器中看到。

我想避免使用 pgAudit、Kafka 和其他類似的解決方案,並儘可能堅持使用 PostgreSQL 工具,因為我是新手,我懷疑我一次可以處理太多新工具。

如果有幫助的話,我可以為您提供兩台伺服器上發出的所有命令。謝謝!

在我的日誌文件中,我看到應該儲存更改的關係不存在:

relation "mtable_history" does not exist at character 13

字元 13 是查詢中的一個位置:

INSERT INTO mtable_history VALUES ...

然而,它確實存在於\dt

問題是出於安全原因,search_path在複製重放期間將 設置為空。因此,您必須使用觸發器函式中的模式來限定對象名稱,例如public.mtable_history.

引用自:https://dba.stackexchange.com/questions/302340