背景・目的
Oracleでは主キーの更新が仕様的に許されているようです。DMSでOracleを指定したとき、どのような挙動になるか気になったので試してみます。
まとめ
DMS 3.5.4 で検証した結果、ドキュメントに記載されている「数値型主キーのバッチ更新はサポートされない」という制限は確認できず、単一行更新・バッチ更新ともに正常にCDC連携された。
概要
まずは、ドキュメントを確認してみます。下記のように、主キーのバッチ更新についてサポートされていない旨が言及されています。そもそも数値型や文字列型の単一行更新はどうなのか気になりました。そこで検証してみます。
During change data capture (CDC), AWS DMS does not support batch updates to numeric columns defined as a primary key.
AWS DMS does not support certain UPDATE commands. The following example is an unsupported UPDATE command.
UPDATE TEST_TABLE SET KEY=KEY+1;
Here, TEST_TABLE is the table name and KEY is a numeric column defined as a primary key.
実践
DMS 3.5.4 / Oracle 19の組み合わせで検証。他のバージョンでは検証結果が変わる可能性があります
下記の構成で確認します。
| コンポーネント | 環境 |
|---|---|
| Source database | RDS for Oracle 19.0.0.0 |
| DMS | DMS 3.5.4 / dms.t3.medium |
| Target database | Aurora PostgreSQL 16.9 |
下記を検証します。
- エラーや警告が表示されないか
- 単独で更新できるか
- DMS連携できるか
| 検証内容 | DMSの使用 | 結果 |
|---|---|---|
| Oracleで数値型の主キーを更新できるか | - | 更新可 |
| Oracleで文字列型の主キーを更新できるか | - | 更新可 |
| PostgreSQLで数値型の主キーを更新できるか | - | 更新可 |
| PostgreSQLで文字列型の主キーを更新できるか | - | 更新可 |
| Oracleで数値型の主キーを更新したら、DMSでAuroraに連携できるか | Yes | 連携可 |
| Oracleで文字列の主キーを更新したら、DMSでAuroraに連携できるか | Yes | 連携可 |
| Oracleで数値型の主キーをバッチ更新したら、DMSでAuroraに連携できるか | Yes | 連携可 |
事前準備
Oracle側
数値型検証用
1.数値型検証用のテーブル作成します
SQL>
SQL> -- 検証用テーブル: 数値型主キー
CREATE TABLE TEST_PK_NUMERIC (
ID NUMBER(10) PRIMARY KEY,
NAME VARCHAR2(100),
CREATED_AT DATE DEFAULT SYSDATE
);
SQL> 2 3 4 5
表が作成されました。
2.テーブル定義と主キーを確認します
SQL> desc TEST_PK_NUMERIC
名前 NULL? 型
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(10)
NAME VARCHAR2(100)
CREATED_AT DATE
SQL>
SQL> -- TEST_PK_NUMERIC の主キー確認
SELECT cols.column_name, cols.data_type
FROM all_constraints cons
JOIN all_cons_columns cc ON cons.owner = cc.owner AND cons.constraint_name = cc.constraint_name
JOIN all_tab_columns cols ON cc.owner = cols.owner AND cc.table_name = cols.table_name AND cc.column_name = cols.column_name
WHERE cons.constraint_type = 'P' AND cons.owner = 'XXXX' AND cons.table_name = 'TEST_PK_NUMERIC';SQL> 2 3 4 5
COLUMN_NAME DATA_TYPE
-------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------
ID NUMBER
SQL>
3.データ登録します
SQL> INSERT INTO TEST_PK_NUMERIC (ID, NAME) VALUES (1, 'テストデータ1');
INSERT INTO TEST_PK_NUMERIC (ID, NAME) VALUES (2, 'テストデータ2');
INSERT INTO TEST_PK_NUMERIC (ID, NAME) VALUES (3, 'テストデータ3');
COMMIT;
1行が作成されました。
SQL>
1行が作成されました。
SQL>
1行が作成されました。
SQL>
コミットが完了しました。
SQL>
4.データを確認します
SQL> l
1* SELECT * FROM TEST_PK_NUMERIC ORDER BY ID
SQL> /
ID NAME CREATED_
---------- ---------------------------------------------------------------------------------------------------- --------
1 テストデータ1 26-02-07
2 テストデータ2 26-02-07
3 テストデータ3 26-02-07
SQL>
文字列型検証用
1.文字列型検証用のテーブル作成します
SQL>
SQL>
SQL>
SQL> -- 検証用テーブル: 文字列型主キー
CREATE TABLE TEST_PK_VARCHAR (
ID VARCHAR2(20) PRIMARY KEY,
NAME VARCHAR2(100),
CREATED_AT DATE DEFAULT SYSDATE
);
SQL> 2 3 4 5
表が作成されました。
SQL>
SQL>
2.テーブル定義と主キーを確認します
SQL> desc TEST_PK_VARCHAR
名前 NULL? 型
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID NOT NULL VARCHAR2(20)
NAME VARCHAR2(100)
CREATED_AT DATE
SQL>
SQL> SELECT column_name, data_type FROM all_tab_columns WHERE owner = 'XXXX' AND table_name = 'TEST_PK_NUMERIC';
COLUMN_NAME DATA_TYPE
-------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------
ID NUMBER
NAME VARCHAR2
CREATED_AT DATE
SQL>
SQL>
SQL> -- TEST_PK_VARCHAR の主キー確認
SELECT cols.column_name, cols.data_type
FROM all_constraints cons
JOIN all_cons_columns cc ON cons.owner = cc.owner AND cons.constraint_name = cc.constraint_name
JOIN all_tab_columns cols ON cc.owner = cols.owner AND cc.table_name = cols.table_name AND cc.column_name = cols.column_name
WHERE cons.constraint_type = 'P' AND cons.owner = 'XXXX' AND cons.table_name = 'TEST_PK_VARCHAR';SQL> 2 3 4 5
COLUMN_NAME DATA_TYPE
-------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------
ID VARCHAR2
SQL>
3.データ登録します
SQL> -- テストデータ投入: 文字列型
INSERT INTO TEST_PK_VARCHAR (ID, NAME) VALUES ('A001', 'テストデータA');
INSERT INTO TEST_PK_VARCHAR (ID, NAME) VALUES ('A002', 'テストデータB');
INSERT INTO TEST_PK_VARCHAR (ID, NAME) VALUES ('A003', 'テストデータC');
COMMIT;
SQL>
1行が作成されました。
SQL>
1行が作成されました。
SQL>
1行が作成されました。
SQL>
コミットが完了しました。
SQL>
SQL>
4.データを確認します
SQL> SELECT * FROM TEST_PK_VARCHAR ORDER BY ID;
ID NAME CREATED_
-------------------- ---------------------------------------------------------------------------------------------------- --------
A001 テストデータA 26-02-07
A002 テストデータB 26-02-07
A003 テストデータC 26-02-07
SQL>
PostgreSQL側
数値型検証用
1.数値型検証用のテーブルを作成します
=> -- 検証用テーブル: 数値型主キー
CREATE TABLE test_pk_numeric (
id BIGINT PRIMARY KEY,
name VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE
2.テーブル定義と主キーを確認します
=> SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'test_pk_numeric';
column_name | data_type
-------------+-----------------------------
id | bigint
created_at | timestamp without time zone
name | character varying
(3 rows)
=>
=> -- test_pk_numeric
SELECT kcu.column_name, c.data_type
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.columns c ON kcu.table_name = c.table_name AND kcu.column_name = c.column_name
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_name = 'test_pk_numeric';
column_name | data_type
-------------+-----------
id | bigint
(1 row)
=>
3.データ登録します
=> INSERT INTO test_pk_numeric (id, name) VALUES (1, 'テストデータ1');
INSERT INTO test_pk_numeric (id, name) VALUES (2, 'テストデータ2');
INSERT INTO test_pk_numeric (id, name) VALUES (3, 'テストデータ3');
INSERT 0 1
INSERT 0 1
INSERT 0 1
=>
4.データを確認します
=> SELECT * FROM test_pk_numeric ORDER BY id;
id | name | created_at
----+---------------+----------------------------
1 | テストデータ1 | 2026-02-07 03:45:31.112746
2 | テストデータ2 | 2026-02-07 03:45:31.119776
3 | テストデータ3 | 2026-02-07 03:45:31.124288
(3 rows)
=>
文字列型検証用
1.文字列型検証用のテーブルを作成します
=> -- 検証用テーブル: 文字列型主キー
CREATE TABLE test_pk_varchar (
id VARCHAR(20) PRIMARY KEY,
name VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE
=>
2.テーブル定義と主キーを確認します
=> SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'test_pk_varchar';
column_name | data_type
-------------+-----------------------------
created_at | timestamp without time zone
id | character varying
name | character varying
(3 rows)
=>
=> -- test_pk_varchar
SELECT kcu.column_name, c.data_type
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.columns c ON kcu.table_name = c.table_name AND kcu.column_name = c.column_name
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_name = 'test_pk_varchar';
column_name | data_type
-------------+-------------------
id | character varying
(1 row)
=>
3.データ登録します
=> INSERT INTO test_pk_varchar (id, name) VALUES ('A001', 'テストデータA');
INSERT INTO test_pk_varchar (id, name) VALUES ('A002', 'テストデータB');
INSERT INTO test_pk_varchar (id, name) VALUES ('A003', 'テストデータC');
INSERT 0 1
INSERT 0 1
INSERT 0 1
=>
4.データを確認します
=> SELECT * FROM test_pk_varchar ORDER BY id;
id | name | created_at
------+---------------+----------------------------
A001 | テストデータA | 2026-02-07 03:47:14.112257
A002 | テストデータB | 2026-02-07 03:47:14.117366
A003 | テストデータC | 2026-02-07 03:47:14.121746
(3 rows)
=>
検証
データベース単体
Oracleで数値型の主キーを更新できるか
1.事前確認します
SQL> desc TEST_PK_NUMERIC
名前 NULL? 型
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID NOT NULL NUMBER(10)
NAME VARCHAR2(100)
CREATED_AT DATE
SQL>
SQL> SELECT * FROM TEST_PK_NUMERIC ORDER BY ID;
ID NAME CREATED_
---------- ---------------------------------------------------------------------------------------------------- --------
1 テストデータ1 26-02-07
2 テストデータ2 26-02-07
3 テストデータ3 26-02-07
SQL>
2.主キーを更新します
SQL> UPDATE TEST_PK_NUMERIC SET ID = 10 WHERE ID = 1;
1行が更新されました。
SQL> commit;
コミットが完了しました。
3.更新されました
SQL> SELECT * FROM TEST_PK_NUMERIC ORDER BY ID;
ID NAME CREATED_
---------- ---------------------------------------------------------------------------------------------------- --------
2 テストデータ2 26-02-07
3 テストデータ3 26-02-07
10 テストデータ1 26-02-07
SQL>
Oracleで文字列型の主キーを更新できるか
1.事前確認します
SQL> desc TEST_PK_VARCHAR
名前 NULL? 型
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID NOT NULL VARCHAR2(20)
NAME VARCHAR2(100)
CREATED_AT DATE
SQL>
SQL> SELECT * FROM TEST_PK_VARCHAR ORDER BY ID;
ID NAME CREATED_
-------------------- ---------------------------------------------------------------------------------------------------- --------
A001 テストデータA 26-02-07
A002 テストデータB 26-02-07
A003 テストデータC 26-02-07
SQL>
2.主キーを更新します
SQL> UPDATE TEST_PK_VARCHAR SET ID = 'B001' WHERE ID = 'A001';
1行が更新されました。
SQL> commit;
コミットが完了しました。
SQL>
3.更新されました
SQL> SELECT * FROM TEST_PK_VARCHAR ORDER BY ID;
ID NAME CREATED_
-------------------- ---------------------------------------------------------------------------------------------------- --------
A002 テストデータB 26-02-07
A003 テストデータC 26-02-07
B001 テストデータA 26-02-07
SQL>
PostgreSQLで数値型の主キーを更新できるか
1.事前確認します
=> SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'test_pk_numeric';
column_name | data_type
-------------+-----------------------------
id | bigint
created_at | timestamp without time zone
name | character varying
(3 rows)
=>
=> SELECT * FROM test_pk_numeric ORDER BY id;
id | name | created_at
----+---------------+----------------------------
1 | テストデータ1 | 2026-02-07 03:45:31.112746
2 | テストデータ2 | 2026-02-07 03:45:31.119776
3 | テストデータ3 | 2026-02-07 03:45:31.124288
(3 rows)
=>
2.主キーを更新します
=> UPDATE test_pk_numeric SET id = 10 WHERE id = 1;
UPDATE 1
=>
3.更新されました
=> SELECT * FROM test_pk_numeric ORDER BY id;
id | name | created_at
----+---------------+----------------------------
2 | テストデータ2 | 2026-02-07 03:45:31.119776
3 | テストデータ3 | 2026-02-07 03:45:31.124288
10 | テストデータ1 | 2026-02-07 03:45:31.112746
(3 rows)
=>
PostgreSQLで文字列型の主キーを更新できるか
1.事前確認します
=> SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'test_pk_varchar';
column_name | data_type
-------------+-----------------------------
created_at | timestamp without time zone
id | character varying
name | character varying
(3 rows)
=> SELECT * FROM test_pk_varchar ORDER BY id;
id | name | created_at
------+---------------+----------------------------
A001 | テストデータA | 2026-02-07 03:47:14.112257
A002 | テストデータB | 2026-02-07 03:47:14.117366
A003 | テストデータC | 2026-02-07 03:47:14.121746
(3 rows)
=>
2.主キーを更新します
=> UPDATE test_pk_varchar SET id = 'B001' WHERE id = 'A001';
UPDATE 1
=>
3.更新されました
=> SELECT * FROM test_pk_varchar ORDER BY id;
id | name | created_at
------+---------------+----------------------------
A002 | テストデータB | 2026-02-07 03:47:14.117366
A003 | テストデータC | 2026-02-07 03:47:14.121746
B001 | テストデータA | 2026-02-07 03:47:14.112257
(3 rows)
=>
DMS連携
DMSタスクの作成
- DMSタスクでは、スキーマコンバートと、テーブル名とカラム名を小文字(lowercase)にする設定をします
初期ロード
-
DMSタスクを開始します
-
Auroraのテーブルの状態を確認します。絶妙に分かりづらいですが、created_atは変わっています(戻っています)
-- 数値型
=> SELECT * FROM test_pk_numeric ORDER BY id;
id | name | created_at
----+---------------+---------------------
2 | テストデータ2 | 2026-02-07 03:09:22
3 | テストデータ3 | 2026-02-07 03:09:22
10 | テストデータ1 | 2026-02-07 03:09:22
(3 rows)
-- 文字列型
=> SELECT * FROM test_pk_varchar ORDER BY id;
id | name | created_at
------+---------------+---------------------
A002 | テストデータB | 2026-02-07 03:14:39
A003 | テストデータC | 2026-02-07 03:14:39
B001 | テストデータA | 2026-02-07 03:14:39
(3 rows)
=>
Oracleで数値型の主キーを更新したら、DMSでAuroraに連携できるか
Oracle側
1.事前に確認します
SQL> SELECT * FROM TEST_PK_NUMERIC ORDER BY ID;
ID NAME CREATED_
---------- ---------------------------------------------------------------------------------------------------- --------
2 テストデータ2 26-02-07
3 テストデータ3 26-02-07
10 テストデータ1 26-02-07
SQL>
2.更新します
SQL> UPDATE TEST_PK_NUMERIC SET ID = 20 WHERE ID = 2;
COMMIT;
1行が更新されました。
SQL>
コミットが完了しました。
SQL>
3.更新後の確認をします
SQL> SELECT * FROM TEST_PK_NUMERIC ORDER BY ID;
ID NAME CREATED_
---------- ---------------------------------------------------------------------------------------------------- --------
3 テストデータ3 26-02-07
10 テストデータ1 26-02-07
20 テストデータ2 26-02-07
SQL>
PostgreSQL
- 連携されたか確認します
- Updates:1。ソースでキャプチャしたUPDATEの数
- AppliedUpdates:1 ターゲットに実際に適用したUPDATEの数
aws dms describe-table-statistics \
--replication-task-arn "arn:aws:dms:ap-northeast-1:XXXXXX:task:XXXXXX" \
--region ap-northeast-1
{
"TableStatistics": [
{
"SchemaName": "XXXXXXX",
"TableName": "TEST_PK_NUMERIC",
"Inserts": 0,
"Deletes": 0,
"Updates": 1,
"Ddls": 0,
"AppliedInserts": 0,
"AppliedDeletes": 0,
"AppliedUpdates": 1,
"AppliedDdls": 0,
"FullLoadRows": 3,
"FullLoadCondtnlChkFailedRows": 0,
"FullLoadErrorRows": 0,
"FullLoadStartTime": "2026-02-07T13:12:36.936000+09:00",
"FullLoadEndTime": "2026-02-07T13:12:38.201000+09:00",
"FullLoadReloaded": false,
"LastUpdateTime": "2026-02-07T13:23:12.226000+09:00",
"TableState": "Table completed",
"ValidationPendingRecords": 0,
"ValidationFailedRecords": 0,
"ValidationSuspendedRecords": 0,
"ValidationState": "Not enabled",
"ResyncState": "Not enabled",
"ResyncRowsAttempted": 0,
"ResyncRowsSucceeded": 0,
"ResyncRowsFailed": 0,
"ResyncProgress": 0.0
}
]
}
2.データを確認します。サポートしてないと思いきや、更新されています
=> SELECT * FROM test_pk_numeric ORDER BY id;
id | name | created_at
----+---------------+---------------------
3 | テストデータ3 | 2026-02-07 03:09:22
10 | テストデータ1 | 2026-02-07 03:09:22
20 | テストデータ2 | 2026-02-07 03:09:22
(3 rows)
=>
Oracleで文字列の主キーを更新したら、DMSでAuroraに連携できるか
Oracle
- 事前に確認します
SQL> SELECT * FROM TEST_PK_VARCHAR ORDER BY ID;
ID NAME CREATED_
-------------------- ---------------------------------------------------------------------------------------------------- --------
A002 テストデータB 26-02-07
A003 テストデータC 26-02-07
B001 テストデータA 26-02-07
SQL>
2.更新します
SQL> -- 文字型主キーの更新テスト
UPDATE TEST_PK_VARCHAR SET ID = 'A020' WHERE ID = 'A002';
COMMIT;
SQL>
1行が更新されました。
SQL>
コミットが完了しました。
SQL>
3.更新後の確認をします
SQL> SELECT * FROM TEST_PK_VARCHAR ORDER BY ID;
ID NAME CREATED_
-------------------- ---------------------------------------------------------------------------------------------------- --------
A003 テストデータC 26-02-07
A020 テストデータB 26-02-07
B001 テストデータA 26-02-07
SQL>
PostgreSQL
- 連携されたか確認します
- Updates:1。ソースでキャプチャしたUPDATEの数
- AppliedUpdates:1 ターゲットに実際に適用したUPDATEの数
aws dms describe-table-statistics \
--replication-task-arn "arn:aws:dms:ap-northeast-1:XXXXXX:task:XXXXXX" \
--region ap-northeast-1
{
"TableStatistics": [
{
"SchemaName": "XXXXXX",
"TableName": "TEST_PK_VARCHAR",
"Inserts": 0,
"Deletes": 0,
"Updates": 1,
"Ddls": 0,
"AppliedInserts": 0,
"AppliedDeletes": 0,
"AppliedUpdates": 1,
"AppliedDdls": 0,
"FullLoadRows": 3,
"FullLoadCondtnlChkFailedRows": 0,
"FullLoadErrorRows": 0,
"FullLoadStartTime": "2026-02-07T13:12:38.090000+09:00",
"FullLoadEndTime": "2026-02-07T13:12:38.530000+09:00",
"FullLoadReloaded": false,
"LastUpdateTime": "2026-02-07T13:30:12.218000+09:00",
"TableState": "Table completed",
"ValidationPendingRecords": 0,
"ValidationFailedRecords": 0,
"ValidationSuspendedRecords": 0,
"ValidationState": "Not enabled",
"ResyncState": "Not enabled",
"ResyncRowsAttempted": 0,
"ResyncRowsSucceeded": 0,
"ResyncRowsFailed": 0,
"ResyncProgress": 0.0
}
]
}
2.データを確認します。更新されています
=> SELECT * FROM test_pk_varchar ORDER BY id;
id | name | created_at
------+---------------+---------------------
A003 | テストデータC | 2026-02-07 03:14:39
A020 | テストデータB | 2026-02-07 03:14:39
B001 | テストデータA | 2026-02-07 03:14:39
(3 rows)
=>
Oracleで数値型の主キーをバッチ更新したら、DMSでAuroraに連携できるか
Oracle
1.事前に確認します
SQL> SELECT * FROM TEST_PK_NUMERIC ORDER BY ID;
ID NAME CREATED_
---------- ---------------------------------------------------------------------------------------------------- --------
3 テストデータ3 26-02-07
10 テストデータ1 26-02-07
20 テストデータ2 26-02-07
SQL>
2.更新します
SQL> UPDATE TEST_PK_NUMERIC SET ID = ID + 100;
COMMIT;
3行が更新されました。
SQL>
コミットが完了しました。
SQL>
3.更新後の確認をします
SQL> SELECT * FROM TEST_PK_NUMERIC ORDER BY ID;
ID NAME CREATED_
---------- ---------------------------------------------------------------------------------------------------- --------
103 テストデータ3 26-02-07
110 テストデータ1 26-02-07
120 テストデータ2 26-02-07
SQL>
PostgreSQL
- 連携されたか確認します
aws dms describe-table-statistics --replication-task-arn "arn:aws:dms:ap-northeast-1:XXXXX:task:XXXXXXX" --query "TableStatistics[?TableName=='TEST_PK_NUMERIC']" --region ap-northeast-1
[
{
"SchemaName": "XXXXX",
"TableName": "TEST_PK_NUMERIC",
"Inserts": 0,
"Deletes": 0,
"Updates": 4,
"Ddls": 0,
"AppliedInserts": 0,
"AppliedDeletes": 0,
"AppliedUpdates": 4,
"AppliedDdls": 0,
"FullLoadRows": 3,
"FullLoadCondtnlChkFailedRows": 0,
"FullLoadErrorRows": 0,
"FullLoadStartTime": "2026-02-07T13:12:36.936000+09:00",
"FullLoadEndTime": "2026-02-07T13:12:38.201000+09:00",
"FullLoadReloaded": false,
"LastUpdateTime": "2026-02-07T13:52:12.222000+09:00",
"TableState": "Table completed",
"ValidationPendingRecords": 0,
"ValidationFailedRecords": 0,
"ValidationSuspendedRecords": 0,
"ValidationState": "Not enabled",
"ResyncState": "Not enabled",
"ResyncRowsAttempted": 0,
"ResyncRowsSucceeded": 0,
"ResyncRowsFailed": 0,
"ResyncProgress": 0.0
}
]
2.データを確認します。更新されています。ドキュメントの記載とは異なる結果です
=> SELECT * FROM test_pk_numeric ORDER BY id;
id | name | created_at
-----+---------------+---------------------
103 | テストデータ3 | 2026-02-07 03:09:22
110 | テストデータ1 | 2026-02-07 03:09:22
120 | テストデータ2 | 2026-02-07 03:09:22
(3 rows)
=>
考察
DMS 3.5.4 で検証した結果、ドキュメントに記載されている「数値型主キーのバッチ更新はサポートされない」という制限は確認できず、単一行更新・バッチ更新ともに正常にCDC連携された。
ドキュメントの記述が古い、またはDMSのバージョンアップで制限が緩和された可能性あり。本番環境で主キー更新を行う場合は、事前に十分なテストが必要。
参考

