從 PostgreSQL 資料庫串流資料

本節包含下列資訊:

  • Datastream 處理從來源 PostgreSQL 資料庫擷取資料的方式
  • Datastream 支援的 PostgreSQL 資料庫版本
  • 概略瞭解如何設定來源 PostgreSQL 資料庫,以便將資料從該資料庫串流至目的地
  • 使用 PostgreSQL 資料庫做為來源的已知限制

行為

來源 PostgreSQL 資料庫依賴邏輯解碼功能。邏輯解碼會公開所有已提交至資料庫的變更,並允許使用輸出外掛程式,以易於使用的格式取用及處理這些變更。Datastream 使用 pgoutput 外掛程式,這是 PostgreSQL 10 以上版本的標準 PostgreSQL 邏輯解碼外掛程式。

  • 您可以選取特定 PostgreSQL 來源的所有結構定義或特定結構定義,以及結構定義中的所有資料表或特定資料表。
  • 所有歷來資料都會複製。
  • 系統會複製所有資料操縱語言 (DML) 變更,例如指定資料庫和資料表中的插入、更新和刪除作業。
  • 系統只會複製已提交的變更。
  • 如果您在資料表上定義 REPLICA IDENTITY,Datastream 會將指定的資料欄視為主鍵。
  • Datastream 會定期將心跳訊息傳送至資料庫,並新增可推進 WAL 檔案的邏輯解碼訊息 (op='m')。Datastream 通常需要這些訊息,才能確保即時性並計算新近程度。如果其他複製設定從同一個資料庫讀取資料,您就必須留意這些訊息,因為這些設定應該能夠讀取並略過這些訊息。

版本

Datastream 支援 PostgreSQL 10 以上版本。

Datastream 支援下列類型的 PostgreSQL 資料庫:

  • 自行託管的 PostgreSQL
  • PostgreSQL 適用的 Cloud SQL
  • AlloyDB for PostgreSQL
  • AlloyDB Omni
  • PostgreSQL 適用的 Amazon RDS
  • Amazon Aurora PostgreSQL

已知限制

使用 Datastream 時,如果 PostgreSQL 資料庫是來源,則有下列已知限制:

  • 串流最多只能有 10,000 個資料表。
  • 如果資料表超過 5 億列,必須符合下列條件才能回填:
    1. 資料表具有唯一的 B 樹狀結構索引。
    2. 索引不包含下列類型的資料欄:DOUBLEFLOATMONEYREALJSONJSONBBYTEATXIDXML複合資料類型幾何資料類型
    3. 索引的任何資料欄都不得為可為空值。
    4. 索引的所有資料欄都依遞增順序排列,或索引的所有資料欄都依遞減順序排列。
    5. 串流中會包含索引的所有資料欄。
  • 沒有主鍵的資料表必須有 REPLICA IDENTITY。否則,系統只會將 INSERT 事件複製到目的地。
  • 如果資料表有主鍵,REPLICA IDENTITY 就不能設為 FULLNOTHING。必須設為 DEFAULT
  • PostgreSQL 不支援唯讀備用資源中的邏輯解碼,因此 Datastream 無法從唯讀備用資源執行個體複製資料。
  • 系統無法自動偵測來源結構定義的所有變更,因此可能會發生資料損毀。下列結構定義變更可能會導致資料損毀,或無法處理下游事件:
    • 捨棄資料欄。
    • 在表格中間新增資料欄。
    • 變更資料欄的資料類型。
    • 重新排序資料欄。
    • 捨棄資料表 (如果之後會重新建立資料表並新增資料,這項操作就相當實用)。
  • Datastream 不支援 geometric 資料類型的資料欄。
  • Datastream 不支援 range 資料類型的資料欄。
  • Datastream 不支援下列陣列:不支援的資料類型陣列、使用者定義資料類型陣列 (包括 ENUM) 或 DATETIMESTAMPTIMESTAMP WITH TIME ZONE 資料類型陣列。系統會忽略這類資料欄。
  • 如果資料列在資料表副本身分識別的資料欄中包含 TOAST 值,Datastream 就不支援複製這些資料列的 UPDATE 事件。這類事件會遭到捨棄。
  • Datastream 不支援複製包含 JSONJSONB 值的資料列,且這些值含有超過 2950 個巢狀物件。含有這類 JSONJSONB 值的事件不會複製到目的地資料庫。
  • Datastream 不支援複製在 NUMERIC (precision, scale) 資料欄中包含 NaN 值的資料列。這類資料欄中的值會替換為 NULL 值。
  • Datastream 不支援複製 hstore 資料類型的資料欄。這類資料欄中的值會替換為 NULL 值。
  • Datastream 不支援從 SQL_ASCII 編碼的來源資料庫複製非 ASCII 記錄。這類記錄會遭到捨棄。
  • Datastream 不支援複製定義了資料列層級安全防護機制 (RLS) 政策的資料表。如要瞭解如何規避這項限制,請參閱「PostgreSQL 來源行為和限制」。
  • Datastream 不會擷取對產生的資料欄所做的變更。
  • 在資料庫上執行 PostgreSQL 主要版本升級時,Datastream 可能會停止運作或無法擷取任何新事件。建議您先捨棄複寫時段,再升級資料庫,然後重新建立複寫時段。如果串流失敗,請指定新的複製運算單元名稱來復原串流,並視需要執行回填作業,確保資料一致性。

後續步驟