雖然之前提過很多次 PostgreSQL 的 logical replication,但最近總算是有空實際架設起來測試,發現目前的 logical replication 還在進化的過程,只能算是階段性的產品。
在 PostgreSQL 16 的「31.6. Restrictions」裡面有列出了目前 logical replication 的限制。
第一條其實是最痛的,不支援各種 DDL 操作,所以像是 CREATE TABLE
或是 ALTER TABLE
都不會同步,這牽扯到 DBOps 的動作需要配合,DB schema 的改變會變得很詭異,需要 case by case 處理,甚至 application 端可能也會需要配合。
The database schema and DDL commands are not replicated.
另外一個頭痛的點是 sequence 資料居然不會同步,這個工具常被用到 SERIAL
類的設計 (雖然 SERIAL
被 deprecated 了),這代表當偵測到 master 掛掉時無法直接 failover,除非有另外處理 sequence 的資料:
Sequence data is not replicated.
翻了資料發現官方 wiki 上有「Logical replication of DDLs」,裡面有今年六月的投影片:「Logical Replication of DDLs」,看起來 DDL 的部分有已經 patch 丟出來 (對 PostgreSQL 15 的 patch),但看了 PostgreSQL 16 的 release notes 裡面還沒看到,看起來還要等...
所以 logical replication 看起來還在演進的過程,目前的限制使得 logical replication 還不到能用的成熟度。
可以繼續觀察看看...