本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 PostgreSQL 資料庫作為 AWS DMS 來源
您可以使用 從一或多個 PostgreSQL 資料庫遷移資料 AWS DMS。使用 PostgreSQL 資料庫作為來源,您可以將資料遷移至另一個 PostgreSQL 資料庫或其他支援的資料庫。
如需 AWS DMS 支援作為來源的 PostgreSQL 版本資訊,請參閱 的來源 AWS DMS。
AWS DMS 支援 PostgreSQL 用於下列類型的資料庫:
-
現場部署資料庫
-
Amazon EC2執行個體上的資料庫
-
Amazon RDS 資料庫執行個體上的資料庫
-
資料庫執行個體上的資料庫以 Amazon Aurora Postgre SQL-Compatible Edition 為基礎
-
資料庫執行個體上的資料庫以 Amazon Aurora Postgre SQL-Compatible Serverless Edition 為基礎
注意
DMS 支援 Amazon Aurora Postgre SQL—Serverless V1 作為僅供完整載入的來源。但是,您可以使用 Amazon Aurora Postgre SQL—Serverless V2 作為全負載、全負載 + CDC和CDC僅限任務的來源。
PostgreSQL 來源版本 |
AWS DMS 要使用的版本 |
---|---|
9.x、10.x、11.x、12.x |
使用任何可用的 AWS DMS 版本。 |
13.x |
使用 3 AWS DMS .4.3 版和更新版本。 |
14.x |
使用 3.4.7 版和更新 AWS DMS 版本。 |
15.x |
使用 3.5.1 版和更新 AWS DMS 版本。 |
16.x |
使用 3.5.3 版和更新 AWS DMS 版本。 |
您可以使用 Secure Socket Layers (SSL) 加密 PostgreSQL 端點與複寫執行個體之間的連線。如需SSL搭配使用 PostgreSQL 端點的詳細資訊,請參閱 使用 SSL 搭配使用 AWS Database Migration Service。
使用 PostgreSQL 作為來源時,作為額外的安全要求,指定的使用者帳戶必須是 PostgreSQL 資料庫中的已註冊使用者。
若要將 PostgreSQL 資料庫設定為 AWS DMS 來源端點,請執行下列動作:
-
建立具有適當許可的 PostgreSQL 使用者,以提供 PostgreSQL 來源資料庫的 AWS DMS 存取權。
注意
-
如果您的 PostgreSQL 來源資料庫是自我管理的,請參閱 在 中使用自我管理 PostgreSQL 資料庫作為來源 AWS DMS 以取得詳細資訊。
-
如果您的 PostgreSQL 來源資料庫是由 Amazon 管理RDS,請參閱 使用 AWS受管 PostgreSQL 資料庫作為DMS來源 以取得詳細資訊。
-
-
建立符合您選擇的 PostgreSQL 資料庫組態的 PostgreSQL 來源端點。
-
建立一個或一組遷移資料表的任務。
若要建立任務,不需要進一步的 full-load-only端點組態。
建立變更資料擷取的任務 (CDC僅限 或全負載和CDC任務) 之前,請參閱 CDC 使用自我管理 PostgreSQL 資料庫作為 AWS DMS 來源啟用或 CDC 使用 使用 啟用 AWS受管 PostgreSQL 資料庫執行個體 AWS DMS。
主題
- 在 中使用自我管理 PostgreSQL 資料庫作為來源 AWS DMS
- 使用 AWS受管 PostgreSQL 資料庫作為DMS來源
- 使用邏輯複寫啟用變更資料擷取 (CDC)
- 使用原生CDC起點設定 PostgreSQL 來源的CDC負載
- 使用 從 PostgreSQL 遷移至 PostgreSQL AWS DMS
- 使用 從 Babelfish for Amazon Aurora PostgreSQL 遷移 AWS DMS
- 從 PostgreSQL 來源資料庫中移除 AWS DMS 成品
- 使用 PostgreSQL 資料庫作為DMS來源時的其他組態設定
- 使用 MapBooleanAsBoolean PostgreSQL 端點設定
- 使用 PostgreSQL 作為DMS來源時的端點設定和額外連線屬性 (ECAs)
- 使用 PostgreSQL 資料庫作為DMS來源的限制
- Postgre 的來源資料類型SQL
在 中使用自我管理 PostgreSQL 資料庫作為來源 AWS DMS
使用自我管理的 PostgreSQL 資料庫作為來源,您可以將資料遷移至另一個 PostgreSQL 資料庫,或 支援的其他目標資料庫之一 AWS DMS。資料庫來源可以是內部部署資料庫或在 Amazon EC2執行個體上執行的自我管理引擎。您可以針對全負載任務和變更資料擷取 (CDC) 任務使用資料庫執行個體。
使用自我管理 PostgreSQL 資料庫做為 AWS DMS 來源的先決條件
從自我管理的 PostgreSQL 來源資料庫遷移資料之前,請執行下列動作:
-
請務必使用 9.4.x 版或更新版本的 PostgreSQL 資料庫。
-
對於滿載加載CDC任務或僅限 CDC任務,請為 PostgreSQL 來源資料庫指定的使用者帳戶授予超級使用者許可。此使用者帳戶需要超級使用者許可,才能存取來源中的複寫特定功能。對於僅完全載入的任務,使用者帳戶需要資料表的SELECT許可才能遷移它們。
-
將 AWS DMS 複寫伺服器的 IP 地址新增至
pg_hba.conf
組態檔案,並啟用複寫和通訊端連線。範例如下。# Replication Instance host all all 12.3.4.56/00 md5 # Allow replication connections from localhost, by a user with the # replication privilege. host replication dms 12.3.4.56/00 md5
Postgre SQL的
pg_hba.conf
組態檔案控制用戶端身分驗證。(HBA 表示主機型身分驗證。) 按照傳統做法,檔案會儲存在資料庫叢集的資料目錄中。 -
如果您要使用 將資料庫設定為邏輯複寫的來源, AWS DMS 請參閱 CDC 使用自我管理 PostgreSQL 資料庫作為 AWS DMS 來源啟用
注意
有些 AWS DMS 交易在DMS引擎再次使用之前會閒置一段時間。透過在 PostgreSQL 9.6 版和更新版本idle_in_transaction_session_timeout
中使用 參數,可能會導致閒置交易逾時和失敗。使用 AWS DMS時不要結束閒置交易。
CDC 使用自我管理 PostgreSQL 資料庫作為 AWS DMS 來源啟用
AWS DMS 支援使用邏輯複寫變更資料擷取 (CDC)。若要啟用自我管理 PostgreSQL 來源資料庫的邏輯複寫,請在postgresql.conf
組態檔案中設定下列參數和值:
-
設定
wal_level = logical
。 -
將
max_replication_slots
設為大於 1 的值。將
max_replication_slots
值設定為您想要執行的任務數量。例如,若要執行 5 項任務,則需要設定至少 5 個插槽。只要任務啟動並保持開啟,插槽立即自動開啟,即使任務不再執行。請務必手動刪除開啟的插槽。請注意,如果DMS已建立 插槽,則任務刪除時DMS會自動捨棄複寫插槽。 -
將
max_wal_senders
設為大於 1 的值。max_wal_senders
參數設定可以同時執行的任務數量。 -
wal_sender_timeout
參數會將失效超過指定毫秒數的複寫連線結束。內部部署 PostgreSQL 資料庫的預設值為 60000 毫秒 (60 秒)。將值設定為 0 (零) 會停用逾時機制,且 是 的有效設定DMS。wal_sender_timeout
將 設定為非零值時,使用 DMS的任務至少CDC需要 10000 毫秒 (10 秒),如果值小於 10000,則 會失敗。保留值少於 5 分鐘,以避免在DMS複寫執行個體的多可用區容錯移轉期間造成延遲。
某些參數是靜態值,您只能在伺服器啟動時進行設定。在伺服器重新啟動之前,會忽略其在組態檔案中 (針對自我管理資料庫) 或資料庫參數群組 (針對 RDS PostgreSQL 資料庫) 中項目的任何變更。如需詳細資訊,請參閱 PostgreSQL 文件
如需啟用 的詳細資訊CDC,請參閱 使用邏輯複寫啟用變更資料擷取 (CDC)。
使用 AWS受管 PostgreSQL 資料庫作為DMS來源
您可以使用 AWS受管 PostgreSQL 資料庫執行個體作為 的來源 AWS DMS。您可以使用 AWS受管 PostgreSQL 來源同時執行全負載任務和變更資料擷取 (CDC) 任務。
使用 AWS受管 PostgreSQL 資料庫做為DMS來源的先決條件
從 AWS受管 PostgreSQL 來源資料庫遷移資料之前,請執行下列動作:
-
我們建議您使用具有 PostgreSQL 資料庫執行個體所需最低許可的 AWS 使用者帳戶,作為 PostgreSQL 來源端點的使用者帳戶 AWS DMS。不建議使用主帳戶。此帳戶必須具有
rds_superuser
角色和rds_replication
角色。授權來管理邏輯槽和利用邏輯槽來串流資料的rds_replication
角色請務必從您使用之帳戶的主要使用者帳戶建立數個物件。如需建立這些物件的相關資訊,請參閱不使用主要使用者帳戶遷移 Amazon RDS for PostgreSQL 資料庫。
-
如果您的來源資料庫位於虛擬私有雲端 (VPC),請選擇提供資料庫所在資料庫執行個體存取權VPC的安全群組。這是複DMS寫執行個體成功連線到來源資料庫執行個體所需的項目。當資料庫和DMS複寫執行個體位於相同的 時VPC,請將適當的安全群組新增至自己的傳入規則。
注意
有些 AWS DMS 交易在DMS引擎再次使用之前會閒置一段時間。透過在 PostgreSQL 9.6 版和更新版本idle_in_transaction_session_timeout
中使用 參數,可能會導致閒置交易逾時和失敗。使用 AWS DMS時不要結束閒置交易。
CDC 使用 使用 啟用 AWS受管 PostgreSQL 資料庫執行個體 AWS DMS
AWS DMS 當資料庫執行個體設定為使用邏輯複寫時, CDC 支援 Amazon RDS PostgreSQL 資料庫。下表摘要說明每個 AWS受管 PostgreSQL 版本的邏輯複寫相容性。
您無法將 RDS PostgreSQL 僅供讀取複本用於 CDC(持續複寫)。
PostgreSQL 版本 |
AWS DMS 全負載支援 |
AWS DMS CDC 支援 |
---|---|---|
Aurora PostgreSQL 2.1 版搭配 PostgreSQL 10.5 相容性 (或更低版本) |
是 |
否 |
Aurora PostgreSQL 2.2 版搭配 PostgreSQL 10.6 相容性 (或更新版本) |
是 |
是 |
RDS for PostgreSQL 搭配 PostgreSQL 10.21 相容性 (或更新版本) |
是 |
是 |
啟用 RDS PostgreSQL 資料庫執行個體的邏輯複寫
-
使用 PostgreSQL 資料庫執行個體 AWS 的主要使用者帳戶作為 PostgreSQL 來源端點的使用者帳戶。主要使用者帳戶具有允許其設定 的必要角色CDC。
如果您使用主要使用者帳戶以外的帳戶,務必從主帳戶為您要使用的帳戶建立數個物件。如需詳細資訊,請參閱不使用主要使用者帳戶遷移 Amazon RDS for PostgreSQL 資料庫。
-
將資料庫
rds.logical_replication
參數群組中的 CLUSTER 參數設定為 1。此靜態參數需要重新啟動資料庫執行個體才會生效。套用此參數時, AWS DMS 會設定wal_level
、max_wal_senders
、max_replication_slots
和max_connections
參數。這些參數變更可能會增加預先寫入日誌 (WAL) 的產生,因此只會在使用邏輯複寫插槽rds.logical_replication
時設定 。 -
wal_sender_timeout
參數會將失效超過指定毫秒數的複寫連線結束。 AWS受管 PostgreSQL 資料庫的預設值為 30000 毫秒 (30 秒)。將值設定為 0 (零) 會停用逾時機制,且 是 的有效設定DMS。wal_sender_timeout
將 設定為非零值時,使用 DMS的任務至少CDC需要 10000 毫秒 (10 秒),如果值介於 0 和 10000 之間,則 會失敗。保留值少於 5 分鐘,以避免在DMS複寫執行個體的多可用區容錯移轉期間造成延遲。 -
請確定資料庫叢集參數群組中的
max_worker_processes
參數值等於或大於max_logical_replication_workers
、autovacuum_max_workers
和max_parallel_workers
的合併值總計。背景工作者程序的數量如果很多,可能會影響小型執行個體上的應用程式工作負載 因此,如果您將max_worker_processes
設為高於預設值,請監控資料庫的效能。 -
將 Aurora PostgreSQL 作為來源與 搭配使用時CDC,請
synchronous_commit
設定為ON
。
不使用主要使用者帳戶遷移 Amazon RDS for PostgreSQL 資料庫
在某些情況下,您可能無法將主要使用者帳戶用於用作來源的 Amazon RDS PostgreSQL 資料庫執行個體。在這些情況下,您可以建立多個物件來擷取資料定義語言 (DDL) 事件。您要在主帳戶以外的帳戶中建立這些物件,然後在主要使用者帳戶中建立觸發。
注意
如果在來源端點上將 CaptureDdls
端點設為 false
,您即不必在來源資料庫中建立以下資料表和觸發程序。
請使用下列程序建立這些物件。
建立物件
-
選擇要建立物件的結構描述。預設結構描述為
public
。確認結構描述存在且可讓
帳戶存取。OtherThanMaster
-
使用主要帳戶以外的使用者帳戶登入 PostgreSQL 資料庫執行個體,此處是
帳戶。OtherThanMaster
-
執行以下命令建立資料表
awsdms_ddl_audit
,以要使用之結構描述名稱取代以下程式碼中的
。objects_schema
CREATE TABLE
objects_schema
.awsdms_ddl_audit ( c_key bigserial primary key, c_time timestamp, -- Informational c_user varchar(64), -- Informational: current_user c_txn varchar(16), -- Informational: current transaction c_tag varchar(24), -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE' c_oid integer, -- For future use - TG_OBJECTID c_name varchar(64), -- For future use - TG_OBJECTNAME c_schema varchar(64), -- For future use - TG_SCHEMANAME. For now - holds current_schema c_ddlqry text -- The DDL query associated with the current DDL event ); -
執行以下命令建立函數
awsdms_intercept_ddl
,以要使用的結構描述名稱取代以下程式碼中的
。objects_schema
CREATE OR REPLACE FUNCTION
objects_schema
.awsdms_intercept_ddl() RETURNS event_trigger LANGUAGE plpgsql SECURITY DEFINER AS $$ declare _qry text; BEGIN if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then SELECT current_query() into _qry; insert intoobjects_schema
.awsdms_ddl_audit values ( default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry ); delete fromobjects_schema
.awsdms_ddl_audit; end if; END; $$; -
登出
帳戶,再以獲指派OtherThanMaster
rds_superuser
角色的帳戶登入。 -
執行以下命令建立事件觸發
awsdms_intercept_ddl
。CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE
objects_schema
.awsdms_intercept_ddl(); -
確定存取這些事件的所有使用者和角色都具有必要的DDL許可。例如:
grant all on public.awsdms_ddl_audit to public; grant all on public.awsdms_ddl_audit_c_key_seq to public;
完成上述程序後,您可以使用
帳戶建立 AWS DMS
來源端點。OtherThanMaster
注意
這些事件由 CREATE TABLE
、ALTER
TABLE
和 DROP TABLE
陳述式觸發。
使用邏輯複寫啟用變更資料擷取 (CDC)
您可以使用 Postgre SQL的原生邏輯複寫功能,在 PostgreSQL 來源的資料庫遷移期間啟用變更資料擷取 (CDC)。您可以搭配自我管理 PostgreSQL 和 Amazon RDS for PostgreSQL SQL 資料庫執行個體使用此功能。此方法可減少停機時間,並協助確保目標資料庫與來源 PostgreSQL 資料庫同步。
AWS DMS 支援具有主索引鍵CDC的 PostgreSQL 資料表。如果資料表沒有主索引鍵,預先寫入日誌 (WAL) 不會在資料庫資料列的影像之前包含 。在此情況下, DMS無法更新資料表。您可以在此使用其他組態設定,並使用資料表複本身分識別作為因應措施。但是,這種方法可能會產生額外的日誌。我們建議您僅在仔細測試之後,才使用資料表複本身分識別作為因應措施。如需詳細資訊,請參閱使用 PostgreSQL 資料庫作為DMS來源時的其他組態設定。
注意
REPLICA IDENTITY FULL 支援邏輯解碼外掛程式,但不支援 pglogical 外掛程式。如需詳細資訊,請參閱 pglogical 文件
對於完全載入CDC和CDC僅限任務, AWS DMS 會使用邏輯複寫插槽來保留複寫WAL日誌,直到日誌解碼為止。重新啟動 (非繼續) 時,會重新建立完全載入和CDC任務或CDC任務的複寫插槽。
注意
對於邏輯解碼, DMS會使用 test_decoding 或 pglogical 外掛程式。如果來源 PostgreSQL 資料庫上有 pglogical 外掛程式, 會使用 pglogical DMS建立複寫插槽,否則會使用 test_decoding 外掛程式。如需 test_decoding 外掛程式的詳細資訊,請參閱 PostgreSQL 文件
如果資料庫參數max_slot_wal_keep_size
設定為非預設值,且複寫槽restart_lsn
的 落後目前LSN超過此大小,則DMS任務會因為移除必要WAL檔案而失敗。
設定 pglogical 外掛程式
作為 PostgreSQL 延伸模組實作,pglogical 外掛程式是選擇性資料複寫的邏輯複寫系統和模型。下表識別支援 pglogical 外掛程式的來源 PostgreSQL 資料庫版本。
PostgreSQL 來源 |
支援 pglogical |
---|---|
自我管理 PostgreSQL 9.4 或更新版本 |
是 |
Amazon RDS PostgreSQL 9.5 或更新版本 |
否 |
Amazon RDS PostgreSQL 9.6 或更新版本 |
是 |
Aurora PostgreSQL 1.x 至 2.5.x |
否 |
Aurora PostgreSQL 2.6.x 或更新版本 |
是 |
Aurora PostgreSQL 3.3.x 或更新版本 |
是 |
在設定 pglogical 以搭配 使用之前 AWS DMS,請先在 PostgreSQL 來源資料庫中啟用變更資料擷取 (CDC) 的邏輯複寫。
-
如需在自我管理 PostgreSQL 來源資料庫CDC上啟用 邏輯複寫的相關資訊,請參閱 CDC 使用自我管理 PostgreSQL 資料庫作為 AWS DMS 來源啟用
-
如需為 AWS受管 Postgre CDC SQL 來源資料庫啟用邏輯複寫的相關資訊,請參閱 CDC 使用 使用 啟用 AWS受管 PostgreSQL 資料庫執行個體 AWS DMS。
在 PostgreSQL 來源資料庫上啟用邏輯複寫後,請使用下列步驟設定 pglogical 以搭配 使用DMS。
使用 Pglogical 外掛程式在 PostgreSQL 來源資料庫上進行邏輯複寫 AWS DMS
-
在來源 PostgreSQL 資料庫上建立 pglogical 延伸模組:
-
設定正確的參數:
-
對於自我管理的 PostgreSQL 資料庫,設定資料庫參數
shared_preload_libraries= 'pglogical'
。 -
對於 Amazon RDS和 Amazon Aurora Postgre SQL-Compatible Edition 資料庫上的 PostgreSQL,請將相同參數群組
shared_preload_libraries
pglogical
中的 RDS 參數設定為 。
-
-
重新啟動 PostgreSQL 來源資料庫。
-
在 PostgreSQL 資料庫中,執行 命令,
create extension pglogical;
-
-
執行下列命令來確認 pglogical 是否安裝成功:
select * FROM pg_catalog.pg_extension
您現在可以建立 AWS DMS 任務,為 PostgreSQL 來源資料庫端點執行變更資料擷取。
注意
如果您未在 PostgreSQL 來源資料庫上啟用 pglogical, 預設 AWS DMS 會使用 test_decoding
外掛程式。當啟用 pglogical 進行邏輯解碼時, 預設 AWS DMS 會使用 pglogical。但是您可以設定額外的連接屬性 (PluginName
) 以改用 test_decoding
外掛程式。
使用原生CDC起點設定 PostgreSQL 來源的CDC負載
若要以 PostgreSQL 作為來源啟用原生CDC起點,請在建立端點時將slotName
額外的連線屬性設定為現有邏輯複寫插槽的名稱。此邏輯複寫插槽會保留從建立端點時開始的持續變更,因此它支援從前一個時間點進行複寫。
PostgreSQL 只會將資料庫變更寫入至從邏輯複寫槽 AWS DMS 成功讀取變更後才捨棄WAL的檔案。使用邏輯複寫插槽可以保護已記錄的變更,使其免於接受複寫引擎使用之前遭到刪除。
不過,依照不同的變更速率和使用比率,保留在邏輯複寫插槽中的變更可能會提高的磁碟使用率。建議您在使用邏輯複寫插槽時,在來源 PostgreSQL 執行個體中設定空間使用量警示。如需設定 slotName
額外連線屬性的相關資訊,請參閱 使用 PostgreSQL 作為DMS來源時的端點設定和額外連線屬性 (ECAs)。
下列程序更詳細說明這個方法。
使用原生CDC起點設定 PostgreSQL 來源端點的CDC負載
-
識別您想要用作為起始點之先前複寫任務 (父項任務) 所使用的邏輯複寫插槽。然後查詢來源資料庫上的
pg_replication_slots
檢視,以確定此插槽沒有任何作用中的連線。如果是這樣,請在繼續之前解決並關閉。對於下列步驟,假設您的邏輯複寫插槽為
abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef
。 -
建立新的來源端點,包括下列額外的連線屬性設定:
slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef;
-
使用主控台或 建立新的 CDC限定任務 AWS CLI AWS DMS API。例如,使用 CLI 可能會執行下列
create-replication-task
命令。aws dms create-replication-task --replication-task-identifier postgresql-slot-name-test --source-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ABCD1EFGHIJK2LMNOPQRST3UV4 --target-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ZYX9WVUTSRQONM8LKJIHGF7ED6 --replication-instance-arn arn:aws:dms:us-west-2:012345678901:rep:AAAAAAAAAAA5BB4CCC3DDDD2EE --migration-type cdc --table-mappings "file://mappings.json" --cdc-start-position "4AF/B00000D0" --replication-task-settings "file://task-pg.json"
在上述命令中,會設定下列選項:
-
source-endpoint-arn
選項會設為您在步驟 2 中建立的新值。 -
replication-instance-arn
選項會設為與步驟 1 的父項任務相同的值。 -
table-mappings
和replication-task-settings
選項會設為與步驟 1 中父項任務相同的值。 -
cdc-start-position
選項會設為起始位置值。若要尋找此起始位置,請查詢來源資料庫上的pg_replication_slots
檢視,或檢視步驟 1 中父項任務的主控台詳細資訊。如需詳細資訊,請參閱決定 CDC 原生起點。
若要在使用 AWS DMS 主控台建立新的CDC僅限 任務時啟用自訂CDC啟動模式,請執行下列動作:
在任務設定區段中,針對CDC來源交易的啟動模式,選擇啟用自訂CDC啟動模式 。
針對來源交易的自訂CDC起點,選擇指定日誌序號 。指定系統變更編號,或選擇指定復原檢查點,然後提供復原檢查點。
當此CDC任務執行時,如果指定的邏輯複寫插槽不存在, 會 AWS DMS 提高錯誤。如果未使用
cdc-start-position
的有效設定建立任務,也會引發錯誤。 -
將原生CDC起點與 pglogical 外掛程式搭配使用,且您想要使用新的複寫插槽時,請在建立CDC任務之前完成下列設定步驟。
使用先前未建立作為其他DMS任務一部分的新複寫插槽
-
如下所示建立複寫插槽:
SELECT * FROM pg_create_logical_replication_slot('
replication_slot_name
', 'pglogical'); -
資料庫建立複寫插槽之後,請取得並記下此插槽的 restart_lsn 和 confirmed_flush_lsn 值:
select * from pg_replication_slots where slot_name like 'replication_slot_name';
請注意,複寫槽後建立之CDC任務的原生CDC開始位置不能比確認的_flush_lsn 值舊。
若要取得有關 restart_lsn 和 confirmed_flush_lsn 的相關資訊,請參閱 pg_replication_slots
-
建立 pglogical 節點。
SELECT pglogical.create_node(node_name := '
node_name
', dsn := 'your_dsn_name
'); -
使用
pglogical.create_replication_set
函數建立兩個複寫集。第一個複寫集會追蹤具有主索引鍵之資料表的更新和刪除。第二個複寫集只會追蹤插入,名稱與第一個複寫集的名稱相同,但新增了前綴 'i'。SELECT pglogical.create_replication_set('
replication_slot_name
', false, true, true, false); SELECT pglogical.create_replication_set('ireplication_slot_name
', true, false, false, true); -
將資料表新增至複寫集。
SELECT pglogical.replication_set_add_table('
replication_slot_name
', 'schemaname.tablename', true); SELECT pglogical.replication_set_add_table('ireplication_slot_name
', 'schemaname.tablename', true); -
建立來源端點時,請設定下列額外的連線屬性 (ECA)。
PluginName=PGLOGICAL;slotName=
slot_name
;
您現在可以使用新的複寫插槽建立具有 PostgreSQL 原生起點CDC的唯一任務。如需 pglogical 外掛程式的詳細資訊,請參閱 pglogical 3.7 文件
使用 從 PostgreSQL 遷移至 PostgreSQL AWS DMS
當您從 PostgreSQL 以外的資料庫引擎遷移至 PostgreSQL 資料庫時, AWS DMS 幾乎總是最適合使用的遷移工具。但是,當您從 PostgreSQL 資料庫遷移至 PostgreSQL 資料庫時,PostgreSQL 工具會更有效率。
使用 PostgreSQL 原生工具遷移資料
建議您pg_dump
在下列條件下使用 PostgreSQL 資料庫遷移工具,例如:
-
您有同質遷移,其中您將從來源 PostgreSQL 資料庫遷移至目標 PostgreSQL 資料庫。
-
您想要遷移整個資料庫。
-
原生工具可讓您以最短的停機時間來遷移資料。
pg_dump 公用程式使用 COPY命令來建立 PostgreSQL 資料庫的結構描述和資料傾印。pg_dump 產生的傾印指令碼會將資料載入相同名稱的資料庫中,並重新建立資料表、索引和外部索引鍵。若要將資料還原至不同名稱的資料庫,請使用 pg_restore
命令和 -d
參數。
如果您要將資料從執行 的 PostgreSQL 來源資料庫遷移EC2至 Amazon RDS for PostgreSQL 目標,您可以使用 pglogical 外掛程式。
如需將 PostgreSQL 資料庫匯入 Amazon RDS for PostgreSQL 或 Amazon Aurora Postgre SQL-Compatible Edition 的詳細資訊,請參閱 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html。
使用 DMS 將資料從 PostgreSQL 遷移至 PostgreSQL
AWS DMS 可以將資料從內部部署的 PostgreSQL 來源資料庫遷移至目標 Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 執行個體。核心或基本 PostgreSQL 資料類型最常成功遷移。
注意
將分割資料表從 PostgreSQL 來源複寫至 PostgreSQL 目標時,您不需要在DMS任務中提及父資料表作為選取條件的一部分。提及父資料表會導致目標上子資料表中的資料重複,而可能會導致 PK 違規。只要在資料表對應選擇條件中選取子資料表,就會自動填入父資料表。
來源資料庫上支援但目標上不支援的資料類型可能無法成功遷移。如果資料類型未知, 會將某些資料類型 AWS DMS 串流為字串。有些資料類型,例如 XML和 JSON,可以成功遷移為小型檔案,但如果是大型文件,則可能會失敗。
執行資料類型遷移時,請注意下列事項:
-
在某些情況下,PostgreSQL NUMERIC(p,s) 資料類型不會指定任何精確度和規模。對於 3.4.2 及更早DMS版本, 預設DMS會使用精確度 28 和 6 的規模 NUMERIC(28,6)。例如,來源的值 0.611111104488373 會在 PostgreSQL 目標上轉換為 0.61111。
-
具有ARRAY資料類型的資料表必須具有主索引鍵。缺少主索引鍵的ARRAY資料類型資料表會在完全載入期間暫停。
下表顯示來源 PostgreSQL 資料類型,以及是否可以成功遷移。
資料類型 | 遷移成功 | 部分遷移 | 不遷移 | 說明 |
---|---|---|---|---|
INTEGER | X | |||
SMALLINT | X | |||
BIGINT | X | |||
NUMERIC/DECIMAL(p,s) | X | 其中 0<p<39,且 0<s | ||
NUMERIC/DECIMAL | X | 其中 p>38 或 p=s=0 | ||
REAL | X | |||
DOUBLE | X | |||
SMALLSERIAL | X | |||
SERIAL | X | |||
BIGSERIAL | X | |||
MONEY | X | |||
CHAR | X | 沒有指定的精確度 | ||
CHAR(n) | X | |||
VARCHAR | X | 沒有指定的精確度 | ||
VARCHAR(n) | X | |||
TEXT | X | |||
BYTEA | X | |||
TIMESTAMP | X | 正無限大值和負無限大值分別截斷為 '9999-12-31 23:59:59' 和 '4713-01-01 00:00:00 BC'。 | ||
TIMESTAMP WITH TIME ZONE | X | |||
DATE | X | |||
TIME | X | |||
TIME WITH TIME ZONE | X | |||
INTERVAL | X | |||
BOOLEAN | X | |||
ENUM | X | |||
CIDR | X | |||
INET | X | |||
MACADDR | X | |||
TSVECTOR | X | |||
TSQUERY | X | |||
XML | X | |||
POINT | X | 張貼GIS空間資料類型 | ||
LINE | X | |||
LSEG | X | |||
BOX | X | |||
PATH | X | |||
POLYGON | X | 張貼GIS空間資料類型 | ||
CIRCLE | X | |||
JSON | X | |||
ARRAY | X | 需要主索引鍵 | ||
COMPOSITE | X | |||
RANGE | X | |||
LINESTRING | X | 張貼GIS空間資料類型 | ||
MULTIPOINT | X | 張貼GIS空間資料類型 | ||
MULTILINESTRING | X | 張貼GIS空間資料類型 | ||
MULTIPOLYGON | X | 張貼GIS空間資料類型 | ||
GEOMETRYCOLLECTION | X | 張貼GIS空間資料類型 |
遷移 PostGIS 空間資料類型
空間資料可識別空間中,物件或位置的幾何圖形資訊。PostgreSQL 物件關聯式資料庫支援 PostGIS 空間資料類型。
在遷移 PostgreSQL 空間資料物件之前,請確定已在全域層級啟用 PostGIS 外掛程式。這樣做可確保 為 PostgreSQL 目標資料庫執行個體 AWS DMS 建立確切的來源空間資料欄。
對於 PostgreSQL 至 PostgreSQL 同質遷移, AWS DMS 支援遷移 PostGIS 幾何和地理 (地理座標) 資料物件類型和子類型,例如下列:
-
POINT
-
LINESTRING
-
POLYGON
-
MULTIPOINT
-
MULTILINESTRING
-
MULTIPOLYGON
-
GEOMETRYCOLLECTION
使用 從 Babelfish for Amazon Aurora PostgreSQL 遷移 AWS DMS
您可以使用 將 Babelfish for Aurora PostgreSQL 來源資料表遷移至任何支援的目標端點 AWS DMS。
當您使用DMS主控台、 API或 CLI命令建立 AWS DMS 來源端點時,您可以將來源設定為 Amazon Aurora Postgre SQL,並將資料庫名稱設定為 babelfish_db
。在端點設定區段中,請確定 DatabaseMode 設定為 Babelfish ,且BabelfishDatabaseName設定為來源 Babelfish T-SQL 資料庫的名稱。不使用 Babelfish TCP 連接埠 1433
,而是使用 Aurora PostgreSQL TCP 連接埠 5432
。
您必須先建立資料表,才能遷移資料,以確保 DMS使用正確的資料類型和資料表中繼資料。如果您在執行遷移之前未在目標上建立資料表, DMS可能會建立具有不正確資料類型和許可的資料表。
將轉換規則新增至遷移任務
當您為 Babelfish 來源建立遷移任務時,您需要包含轉換規則,以確保 DMS使用預先建立的目標資料表。
如果您在定義 Babelfish for PostgreSQL 叢集時設定多資料庫遷移模式,請將重新命名結構描述名稱的轉換規則新增至 T-SQL 結構描述。例如,如果 T-SQL 結構描述名稱為 dbo
,而 Babelfish for PostgreSQL 結構描述名稱為 mydb_dbo
,請使用轉換規則dbo
將結構描述重新命名為 。若要尋找 PostgreSQL 結構描述名稱,請參閱 Amazon Aurora 使用者指南 中的 Babelfish 架構。
如果您使用單一資料庫模式,則不需要使用轉換規則來重新命名資料庫結構描述。PostgreSQL 結構描述名稱具有 one-to-one與 T-SQL 資料庫中結構描述名稱的映射。
下列轉換規則範例示範如何將結構描述名稱從mydb_dbo
背面重新命名為 dbo
:
{ "rules": [ { "rule-type": "transformation", "rule-id": "566251737", "rule-name": "566251737", "rule-target": "schema", "object-locator": { "schema-name": "mydb_dbo" }, "rule-action": "rename", "value": "dbo", "old-value": null }, { "rule-type": "selection", "rule-id": "566111704", "rule-name": "566111704", "object-locator": { "schema-name": "mydb_dbo", "table-name": "%" }, "rule-action": "include", "filters": [] } ] }
搭配 Babelfish 資料表使用 PostgreSQL 來源端點的限制
搭配 Babelfish 資料表使用 PostgreSQL 來源端點時,適用下列限制:
DMS 僅支援從 Babelfish 16.2/15.6 版及更新版本以及 3.5.3 版及更新DMS版本遷移。
DMS 不會將 Babelfish 資料表定義變更複寫至目標端點。此限制的解決方法是先在目標上套用資料表定義變更,然後在 Babelfish 來源上變更資料表定義。
當您使用BYTEA資料類型建立 Babelfish 資料表時, 會在遷移至SQL伺服器作為目標時將其DMS轉換為
varbinary(max)
資料類型。DMS 不支援二進位資料類型的完整LOB模式。請改為使用二進位資料類型的有限LOB模式。
DMS 不支援 Babelfish 作為來源的資料驗證。
對於目標資料表準備模式任務設定,請僅使用不執行或截斷模式。請勿使用刪除目標中的資料表模式。在目標 上使用捨棄資料表時, DMS可能會建立資料類型不正確的資料表。
使用進行中複寫 (CDC 或 全負載 和 CDC) 時,請將
PluginName
額外的連線屬性 (ECA) 設定為TEST_DECODING
。-
DMS 不支援 Babelfish 作為來源的分割資料表複寫 (CDC 或 全負載 和 CDC)。
從 PostgreSQL 來源資料庫中移除 AWS DMS 成品
若要擷取DDL事件, 會在遷移任務開始時,在 PostgreSQL 資料庫中 AWS DMS 建立各種成品。當任務完成後,您可能想要移除這些成品。
若要移除成品,請發出以下陳述式 (依出現順序),其中 {AmazonRDSMigration}
是成品建立所在的結構描述。如要捨棄結構描述,請務必小心謹慎。絕對不要捨棄操作的結構描述,尤其是不公開的。
drop event trigger awsdms_intercept_ddl;
事件觸發不屬於特定的結構描述。
drop function {AmazonRDSMigration}.awsdms_intercept_ddl() drop table {AmazonRDSMigration}.awsdms_ddl_audit drop schema {AmazonRDSMigration}
使用 PostgreSQL 資料庫作為DMS來源時的其他組態設定
從 PostgreSQL 資料庫遷移資料時,您可以透過兩種方式新增其他組態設定:
-
您可以將值新增至額外的連線屬性,以擷取DDL事件並指定在其中建立操作DDL資料庫成品的結構描述。如需詳細資訊,請參閱使用 PostgreSQL 作為DMS來源時的端點設定和額外連線屬性 (ECAs)。
-
您可以覆寫連線字串參數。請選擇下列其中一個選項:
-
指定內部 AWS DMS 參數。因為很少需要這種參數,所以不會在使用者介面公開。
-
為特定資料庫用戶端指定傳遞 (傳遞) 值。在傳遞給資料庫用戶端的連線偵測中 AWS DMS 包含傳遞參數。
-
-
透過在 PostgreSQL 9.4 版和更新版本
REPLICA IDENTITY
中使用資料表層級參數,您可以控制寫入預先寫入日誌的資訊 (WALs)。特別是,它會為 執行此操作WALs,以識別已更新或刪除的資料列。 會REPLICA IDENTITY FULL
記錄資料列中所有資料欄的舊值。REPLICA IDENTITY FULL
仔細為每個資料表使用 ,因為FULL
會產生額外的 數目WALs,而這些數目可能不是必要的。如需詳細資訊,請參閱 ALTER TABLE-REPLICA IDENTITY
使用 MapBooleanAsBoolean PostgreSQL 端點設定
您可以使用 PostgreSQL 端點設定,將布林值對應為布林值,從 PostgreSQL 來源到 Amazon Redshift 目標。根據預設,BOOLEAN類型會遷移為 varchar(5)。您可以指定 MapBooleanAsBoolean
讓 PostgreSQL 將布林類型遷移為布林值,如以下範例所示。
--postgre-sql-settings '{"MapBooleanAsBoolean": true}'
請注意,您必須同時在來源端點和目標端點上設定此設定,該設定才會生效。
由於 MySQL 沒有 BOOLEAN類型,因此將BOOLEAN資料遷移至 My 時,請使用轉換規則,而非此設定SQL。
使用 PostgreSQL 作為DMS來源時的端點設定和額外連線屬性 (ECAs)
您可以使用端點設定和額外的連線屬性 (ECAs) 來設定 PostgreSQL 來源資料庫。當您使用 AWS DMS 主控台或使用 中的create-endpoint
命令搭配 --postgre-sql-settings '{"
JSON語法來建立來源端點時AWS CLI,您可以指定端點設定。EndpointSetting"
: "value"
, ...
}'
下表顯示端點設定ECAs,以及您可以搭配 PostgreSQL 作為來源使用的 。
屬性名稱 | 描述 |
---|---|
|
若要擷取DDL事件, 會在任務啟動時,在 PostgreSQL 資料庫中 AWS DMS 建立各種成品。您稍後可以移除這些成品,如從 PostgreSQL 來源資料庫中移除 AWS DMS 成品中所述。 如果這個值設定為 false,您不必在來源資料庫中建立資料表或觸發程序。 擷取串流DDL的事件。 預設值: 有效值:true/false 範例: |
|
用於控制複寫具有重複日誌序列編號 (LSNs) 的單片交易的方式。當此參數為 時 預設值: 有效值:false/true 範例: |
|
設定建立操作DDL資料庫成品的結構描述。 預設值:公有 有效值:字串 範例: |
|
設定 PostgreSQL 執行個體的用戶端陳述式逾時,以秒為單位。預設值為 60 秒。 範例: |
|
設定為 時 如果任務設定為有限LOB模式,且此選項設定為 true,則任務會失敗,而不是截斷LOB資料。 預設值:false 有效值:布林值 範例: |
|
此額外的連線屬性 (ECA) 會設定游標在全負載操作期間將擷取的列數。視複寫執行個體中的可用資源而定,您可以調整為更高或更低的值。 預設值: 有效值:數值 ECA 範例: |
|
WAL 活動訊號功能模擬虛擬交易,因此閒置邏輯複寫插槽不會保留舊WAL日誌,導致來源上儲存完整情況。此活動訊號讓 預設值: 有效值:true/false 範例: |
|
設定WAL活動訊號頻率 (以分鐘為單位)。 預設值: 有效值:數值 範例: |
|
設定建立活動訊號成品的結構描述。 預設值: 有效值:字串 範例: |
|
依預設, AWS DMS 對應JSONB至 NCLOB。您可以指定 範例: |
|
依預設, AWS DMS 對應VARCHAR至 WSTRING。您可以指定
範例: |
|
此參數會將具有未繫結NUMERIC資料類型的資料欄視為 STRING ,以便成功遷移而不會遺失數值的精確度。僅將此參數用於從 PostgreSQL 來源複寫至 Postgre SQL目標,或具有 PostgreSQL 相容性的資料庫。 預設值: 有效值: 範例: 由於使用此參數會進行從數值到字串再回到數值的轉換,因此可能會導致某些複寫效能降低。3.4.4 版及更新DMS版本支援此參數 注意僅在 在來源 PostgreSQL 端點 請勿 |
|
指定用於建立複寫位置的外掛程式。 有效值: 範例: |
|
為 PostgreSQL 來源執行個體的CDC載入設定先前建立的邏輯複寫槽的名稱。 與 AWS DMS API 如需設定 有效值:字串 範例: |
|
此額外連線屬性 (ECA) 定義了定義為類型的資料欄大小上限, VarChar 而沒有長度上限指定符。預設值為 8000 位元組。最大值為 10485760 位元組。 |
使用 PostgreSQL 資料庫作為DMS來源的限制
使用 PostgreSQL 作為 來源時,適用下列限制 AWS DMS:
-
AWS DMS 不適用於 Amazon RDS for PostgreSQL 10.4 或 Amazon Aurora PostgreSQL 10.4 作為來源或目標。
-
擷取的資料表必須有主索引鍵。如果資料表沒有主索引鍵,請 AWS DMS 忽略DELETE並記錄該資料表UPDATE的操作。作為解決方法,請參閱使用邏輯複寫啟用變更資料擷取 (CDC)。
注意:我們不建議在沒有主金鑰/唯一索引的情況下遷移,否則會套用其他限制,例如「NO」批次套用功能、完整LOB功能、資料驗證,以及無法有效率地複寫至 Redshift 目標。
-
AWS DMS 會忽略嘗試更新主金鑰區段。在這些情況下,目標會將更新識別為一個未更新任何資料列的項目。但是,由於在 PostgreSQL 中更新主金鑰的結果無法預測,因此不會將任何記錄寫入例外資料表。
-
AWS DMS 不支援從時間戳記執行選項開始程序變更。
-
AWS DMS 不會複寫分割區或子分割區操作 (
ADD
、DROP
或 ) 所產生的變更TRUNCATE
。 -
複寫具有相同名稱的多個資料表,其中每個名稱都有不同的案例 (例如,資料表 1TABLE1、 和Table1),可能會導致無法預測的行為。由於此問題, AWS DMS 不支援這種複寫類型。
-
在大多數情況下, AWS DMS 支援資料表CREATE、 ALTER和 DROPDDL陳述式的變更處理。如果資料表保留在內部函數或程序主體區塊或其他巢狀結構中, AWS DMS 則不支援此變更處理。
例如,不擷取以下變更。
CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void LANGUAGE plpgsql AS $$ BEGIN create table attu.distributors1(did serial PRIMARY KEY,name varchar(40) NOT NULL); END; $$;
-
目前,PostgreSQL 來源中的
boolean
資料類型會遷移至SQL具有不一致值的bit
伺服器目標。作為解決方法,預先建立具有資料欄VARCHAR(1)
資料類型的資料表 (或已 AWS DMS建立資料表)。然後讓下游處理將「F」視為 False,將「T」視為 True。 -
AWS DMS 不支援TRUNCATE操作的變更處理。
-
OID LOB 資料類型不會遷移至目標。
AWS DMS 僅支援同質遷移的 PostGIS 資料類型。
-
如果您的來源是內部部署或 Amazon EC2執行個體上的 PostgreSQL 資料庫,請確保在來源端點上安裝 test_decoding 輸出外掛程式。您可以在 PostgreSQL contrib 套件中找到此外掛程式。如需測試解碼外掛程式的詳細資訊,請參閱 PostgreSQL 文件
。 -
AWS DMS 不支援變更處理來設定和取消設定資料欄預設值 (在ALTERTABLE陳述式上使用 ALTERCOLUMNSETDEFAULT子句)。
-
AWS DMS 不支援變更處理以設定資料欄可用性 (在ALTERTABLE陳述式上使用 ALTERCOLUMN【SET|DROP】 NOTNULL子句)。
-
啟用邏輯複寫時,每個交易保留在記憶體中的變更數目上限為 4 MB。之後,變更會溢出到磁碟。結果
ReplicationSlotDiskUsage
會增加,restart_lsn
在交易完成或中止並且回復完成前不會有所進展。由於這個交易很長,回復所需時間可能很久。因此,在啟用邏輯複寫時,請避免長時間執行的交易或許多子交易。相反地,請將交易分解為幾個較小的交易。在 Aurora PostgreSQL 第 13 版及更新版本上,您可以調整
logical_decoding_work_mem
參數,以控制DMS溢出何時將資料變更為磁碟。如需詳細資訊,請參閱在 Aurora 波斯特里溢出文件 SQL。 -
具有ARRAY資料類型的資料表必須具有主索引鍵。缺少主索引鍵的ARRAY資料類型資料表會在完全載入期間暫停。
-
AWS DMS 不支援複寫分割資料表。偵測到分割資料表時,會發生下列情況:
-
端點會報告父資料表和子資料表清單。
-
AWS DMS 會在目標上將資料表建立為具有與所選資料表相同屬性的一般資料表。
-
如果來源資料庫的父資料表和其子資料表具有相同的主索引鍵值,即會產生「重複的金鑰」錯誤。
-
-
若要將 PostgreSQL 來源的分割資料表複寫至 PostgreSQL 目標,請先手動建立目標上的父資料表和子資料表。然後,要另外定義任務,以複寫到那些資料表。在這種情況下,要將任務組態設定為先截斷再載入。
-
PostgreSQL
NUMERIC
資料類型的大小未修正。在傳輸NUMERIC
資料類型但不具有精確度和擴展的資料類型時, 預設DMS會使用NUMERIC(28,6)
(精確度為 28,規模為 6)。例如,來源的值 0.611111104488373 會在 PostgreSQL 目標上轉換為 0.61111。 -
AWS DMS 僅支援 Aurora PostgreSQL Serverless V1 作為完整載入任務的來源。 AWS DMS 支援 Aurora PostgreSQL Serverless V2 作為完整載入、完整載入和 CDC以及CDC僅限 任務的來源。
-
AWS DMS 不支援複寫具有使用 Coalesce 函數建立之唯一索引的資料表。
-
使用 LOB 模式時,來源資料表和對應的目標資料表都必須具有相同的主金鑰。如果其中一個資料表沒有主索引鍵,則 DELETE和 UPDATE 記錄操作的結果將無法預測。
-
使用平行載入功能時,不支援根據分割或子分割進行資料表分段。如需平行載入的詳細資訊,請參閱在選取的資料表、檢視和集合使用平行載入
-
AWS DMS 不支援遞延限制。
-
AWS DMS 3.4.7 版支援 PostgreSQL 14.x 作為具有下列限制的來源:
-
AWS DMS 不支援兩個階段遞交的變更處理。
-
AWS DMS 不支援邏輯複寫來串流長時間進行中的交易。
-
-
AWS DMS 不支援 CDC Amazon RDS Proxy for PostgreSQL 作為來源。
-
使用不包含主索引鍵資料欄的來源篩選條件時,將不會擷取
DELETE
操作。 -
如果您的來源資料庫也是另一個第三方複寫系統的目標,DDL則變更可能不會在 期間遷移CDC。因為這種情況可以防止
awsdms_intercept_ddl
事件觸發程序遭到觸發。若要解決這種情況,請依照下列方式修改來源資料庫上的觸發程序:alter event trigger awsdms_intercept_ddl enable always;
-
AWS DMS 不支援 PostgreSQL CDC的 Amazon RDS Multi-AZ 資料庫叢集做為來源,因為 RDS PostgreSQL Multi-AZ 資料庫叢集不支援邏輯複寫。
Postgre 的來源資料類型SQL
下表顯示使用 時支援的 PostgreSQL 來源資料類型, AWS DMS 以及 AWS DMS 資料類型的預設映射。
如需如何檢視從目標映射的資料類型資訊,請參閱您要使用的目標端點一節。
如需 AWS DMS 資料類型的詳細資訊,請參閱 AWS Database Migration Service 的資料類型。
PostgreSQL 資料類型 |
DMS 資料類型 |
---|---|
INTEGER |
INT4 |
SMALLINT |
INT2 |
BIGINT |
INT8 |
NUMERIC (p,s) |
如果精確度從 0 到 38,則使用 NUMERIC。 如果精確度為 39 或更高,請使用 STRING。 |
DECIMAL(P、S) |
如果精確度從 0 到 38,則使用 NUMERIC。 如果精確度為 39 或更高,請使用 STRING。 |
REAL |
REAL4 |
DOUBLE |
REAL8 |
SMALLSERIAL |
INT2 |
SERIAL |
INT4 |
BIGSERIAL |
INT8 |
MONEY |
NUMERIC(38、4) MONEY 資料類型會在SQL伺服器FLOAT中映射到 。 |
CHAR |
WSTRING (1) |
CHAR(N) |
WSTRING (n) |
VARCHAR(N) |
WSTRING (n) |
TEXT |
NCLOB |
CITEXT |
NCLOB |
BYTEA |
BLOB |
TIMESTAMP |
DATETIME |
TIMESTAMP WITH TIME ZONE |
DATETIME |
DATE |
DATE |
TIME |
TIME |
TIME WITH TIME ZONE |
TIME |
INTERVAL |
STRING (128)—1 YEAR、2 MONTHS、3 DAYS、4 HOURS、5 MINUTES、6 SECONDS |
BOOLEAN |
CHAR (5) false 或 true |
ENUM |
STRING (64) |
CIDR |
STRING (50) |
INET |
STRING (50) |
MACADDR |
STRING (18) |
BIT (n) |
STRING (n) |
BIT VARYING (n) |
STRING (n) |
UUID |
STRING |
TSVECTOR |
CLOB |
TSQUERY |
CLOB |
XML |
CLOB |
POINT |
STRING (255) "(x,y)" |
LINE |
STRING (255) "(x,y,z)" |
LSEG |
STRING (255) "((x1,y1),(x2,y2))" |
BOX |
STRING (255) "((x1,y1),(x2,y2))" |
PATH |
CLOB "((x1,y1),(xn,yn))" |
POLYGON |
CLOB "((x1,y1),(xn,yn))" |
CIRCLE |
STRING (255) "(x,y),r" |
JSON |
NCLOB |
JSONB |
NCLOB |
ARRAY |
NCLOB |
COMPOSITE |
NCLOB |
HSTORE |
NCLOB |
INT4RANGE |
STRING (255) |
INT8RANGE |
STRING (255) |
NUMRANGE |
STRING (255) |
STRRANGE |
STRING (255) |
使用 Postgre 的LOB來源資料類型SQL
PostgreSQL 資料欄大小會影響 PostgreSQL LOB資料類型轉換為 AWS DMS 資料類型。若要使用此欄,請採取以下 AWS DMS 資料類型的下列步驟:
-
BLOB – 在建立任務時將限制LOB大小設定為大小上限 LOB(KB) 值。
-
CLOB – 複寫會將每個字元作為UTF8字元處理。因此,尋找資料欄中最長字元文字的長度,此處顯示為
max_num_chars_text
。使用此長度將限制LOB大小的值指定為 。如果資料包含 4 個位元組的字元,請乘以 2 以指定限制LOB大小的值,以位元組為單位。在此情況下, LOB的大小限制等於max_num_chars_text
乘以 2。 -
NCLOB – 複寫會以雙位元組字元的形式處理每個字元。因此,尋找資料欄 (
max_num_chars_text
) 中最長字元文字的長度,並乘以 2。這樣做會將限制LOB大小的值指定為 。在此情況下, LOB的大小限制等於max_num_chars_text
乘以 2。如果資料包含 4 位元組字元,則再次乘以 2。在此情況下, LOB的大小限制等於max_num_chars_text
乘以 4。