my opinion is my own

OracleのパーティションテーブルをAurora(PostgreSQL)へSCT変換する場合の注意事項メモ

こちらの記載に関する注意事項メモ。

Oracle から Amazon RDS for PostgreSQL または Amazon Aurora (PostgreSQL) への変換 - AWS Schema Conversion Tool https://docs.aws.amazon.com/ja_jp/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.ToPostgreSQL.html#CHAP_Source.Oracle.ToPostgreSQL.PG10Partitioning

> 以下は、パーティションの PostgreSQL バージョン 10 への変換に関する既知の問題の一部です。

> NULL ではない列のみが列に分割することがでます。

> DEFAULT はパーティション値として使用できる値ではありません。

例えば、こういうレンジ・パーティションのテーブルがあったとして、ORDER_DATEをパーティション・キーとする。

drop table TAB_RANGE_PART;
CREATE TABLE TAB_RANGE_PART (
    ORDER_ID        NUMBER primary key,
    ORDER_DATE      DATE,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,    
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    LOGGING
    PCTFREE    20
    PARTITION BY RANGE (ORDER_DATE) (    
        PARTITION TAB_RANGE_PART01    VALUES LESS THAN ( TO_DATE('20160101','YYYYMMDD')),
        PARTITION TAB_RANGE_PART02    VALUES LESS THAN ( TO_DATE('20170101','YYYYMMDD')),
        PARTITION TAB_RANGE_PART03    VALUES LESS THAN ( TO_DATE('20180101','YYYYMMDD')),
        PARTITION TAB_RANGE_PART04    VALUES LESS THAN ( TO_DATE('20190101','YYYYMMDD')),
        PARTITION TAB_RANGE_PART05    VALUES LESS THAN ( MAXVALUE ))
    ENABLE ROW MOVEMENT;

**上記のDDLでは特にORDER_DATEに制約を設定していない**のでORDER_DATEにNullが入る可能性がある。この場合、SCTで変換した場合、エラーにもならず、パーティション・テーブルとして作成されない模様。下記の制限に該当する。

> NULL ではない列のみが列に分割することがでます。

こうなる。

既存のテーブルのパーティションキーに注意する必要あり。パーティションキーのORDER_DATEにNot Null制約を付与すればこうなる。

drop table TAB_RANGE_PART;
CREATE TABLE TAB_RANGE_PART (
    ORDER_ID        NUMBER primary key,
    ORDER_DATE      DATE NOT NULL,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,    
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    LOGGING
    PCTFREE    20
    PARTITION BY RANGE (ORDER_DATE) (    
        PARTITION TAB_RANGE_PART01    VALUES LESS THAN ( TO_DATE('20160101','YYYYMMDD')),
        PARTITION TAB_RANGE_PART02    VALUES LESS THAN ( TO_DATE('20170101','YYYYMMDD')),
        PARTITION TAB_RANGE_PART03    VALUES LESS THAN ( TO_DATE('20180101','YYYYMMDD')),
        PARTITION TAB_RANGE_PART04    VALUES LESS THAN ( TO_DATE('20190101','YYYYMMDD')),
        PARTITION TAB_RANGE_PART05    VALUES LESS THAN ( MAXVALUE ))
    ENABLE ROW MOVEMENT;
---

関連しているかもしれない記事


#AWS #DMS #SCT