OracleからPostgreSQLに移行する際に確認する必要のある主な観点を以下に示します。
データ型の互換性
OracleとPostgreSQLは、一部のデータ型に互換性のない差異があります。
移行する前にデータ型のマッピングを確認し、データの互換性を確保する必要があります。
移行するデータベース内の他のデータ型についても詳細に検討する必要があります。また、データ型の違いだけでなく、サイズ制限、精度、NULL値の扱いなど、データ型に関連する他の特性も確認する必要があります。移行する前に、OracleからPostgreSQLにデータを移行する際のデータ型のマッピングについて、公式のドキュメントやリソースを参照することをお勧めします。
文字列型:
PostgreSQL: VARCHAR, CHAR, TEXT
OracleのVARCHAR2はPostgreSQLのVARCHARと互換性があります。
OracleのCHARはPostgreSQLのCHARと互換性があります。
OracleのCLOBはPostgreSQLのTEXTと互換性があります。
PostgreSQLとOracleの文字列型の桁数について、注意する必要
PostgreSQLでは、文字列型の桁数は実際に使用されている文字の数(文字の数)を表します。つまり、ストレージ上の実際のバイト数ではなく、文字数そのものを表します。UTF-8エンコーディングがデフォルトで使用されるため、多くの場合、1文字は1バイト以上のストレージを使用します。
Oracleでは、文字列型の桁数はバイト数を表します。デフォルトの文字セット(通常はAL32UTF8)を使用する場合、1文字は1〜4バイトの範囲で構成される場合があります。つまり、桁数は格納に使用されるバイト数をカウントします。
PostgreSQLとOracleでは、NULLと空文字(空文字列)の扱いに違いがあります。
PostgreSQL:
Oracle:
数値型:
PostgreSQL: NUMERIC, INTEGER, FLOAT, DOUBLE PRECISION
OracleのNUMBERはPostgreSQLのNUMERICと互換性があります。
OracleのINTEGERはPostgreSQLのINTEGERと互換性があります。
OracleのFLOATはPostgreSQLのFLOATと互換性があります。
OracleのDOUBLE PRECISIONはPostgreSQLのDOUBLE PRECISIONと互換性があります。
日付および時刻型:
PostgreSQL: DATE, TIMESTAMP
OracleのDATEはPostgreSQLのDATEと互換性があります。
OracleのTIMESTAMPはPostgreSQLのTIMESTAMPと互換性があります。
バイナリ型:
PostgreSQL: BYTEA
OracleのBLOBはPostgreSQLのBYTEAと互換性があります。
ブール型:
PostgreSQL: BOOLEAN
OracleのBOOLEANはPostgreSQLのBOOLEANと互換性がありますが、Oracle Database 12c以前では使用できません。