oracle_fdw用の外部テーブルを作成する際は、Oracleのデータ型に応じて、PostgreSQL側で定義可能なデータ型に制限があります。 oracle_fdwがサポートするデータ型マッピングを以下に示します。
種別 | Oracleのデータ型 | PostgreSQLのデータ型 | 備考 |
---|---|---|---|
数値データ型 | BINARY_FLOAT | real | PostgreSQL、Oracleともに、浮動小数点データ型はIEEE規格754に準拠していますが、実際に扱える上限値や下限値はそれぞれで異なります。oracle_fdwでは、それぞれのドキュメントに書かれている値域の範囲のうち、狭いほうの範囲を超える値はサポートしません。サポートする範囲を超えた値がOracleに格納されている場合は、検索結果が意図しない結果になる場合があります。 |
BINARY_DOUBLE | double precision | ||
NUMBER | smallint | Oracleに格納されている値の範囲が-32,768から+32,767 の整数に限定されている場合は、smallint型にマッピングしてください。小数や範囲外の値がOracleに格納されている場合は、検索実行時にエラーとなります。 | |
integer | Oracleに格納されている値の範囲が-2,147,483,648から+2,147,483,647の整数に限定されている場合は、integer型にマッピングしてください。小数や範囲外の値がOracleに格納されている場合は、検索実行時にエラーとなります。 | ||
bigint | Oracleに格納されている値の範囲が-9,223,372,036,854,775,808から9,223,372,036,854,775,807の整数に限定されている場合は、bigint型にマッピングしてください。小数や範囲外の値がOracleに格納されている場合は、検索実行時にエラーとなります。 | ||
numeric | Oracleに格納されている値の範囲がbigintの値の範囲を超えているか、少数が格納されている場合はnumeric型にマッピングしてください。 PostgreSQL側のnumeric型に指定する精度および位取りは、Oracle側のNUMBER型の精度および位取りと同じ値を指定してください。ただし、PostgreSQLのnumeric型の位取りは0以上を指定する必要があるため、Oracle側のNUMBER型の位取りの定義が負の場合は、PostgreSQL側のnumeric型の位取りには0を指定してください。 | ||
FLOAT | numeric | Oracle側のFLOAT型の2進精度を10進精度に変換した値を、PostgreSQL側のnumeric型の精度に指定してください。2進精度に0.30103を掛けることで10進精度に変換できます。 | |
文字データ型 | CHAR | char | PostgreSQL側のchar型に指定する長さ制限は、Oracle側のCHAR型の長さ制限と同じ値を指定してください。Oracleの長さ制限は、バイト数または文字数で指定できるのに対してPostgreSQLでは文字数でのみ指定できますが、指定方法の相異はSELECT結果には影響しません。 |
NCHAR | char | PostgreSQL側のchar型に指定する長さ制限は、Oracle側のNCHAR型の長さ制限と同じ値を指定してください。 | |
VARCHAR2 | varchar | PostgreSQL側のvarchar型に指定する長さ制限は、Oracle側のVARCHAR2型の長さ制限と同じ値を指定してください。Oracleの長さ制限は、バイト数または文字数で指定できるのに対してPostgreSQLでは文字数でのみ指定できますが、指定方法の相異はSELECT結果には影響しません。 | |
text | |||
NVARCHAR2 | varchar | PostgreSQL側のvarchar型に指定する長さ制限は、Oracle側のNVARCHAR2型の長さ制限と同じ値を指定してください。 | |
text | |||
LONG | varchar | Oracleに格納されている(1G-2)バイトまでの値を扱えます。(1G-2)バイトを超える値を検索した場合は、検索実行時にエラーとなります。また、Oracle側のデータ型がLONG型の場合はLONG型、LONG RAW型の制限を参照してください。 | |
text | |||
CLOB | varchar | ||
text | |||
NCLOB | varchar | ||
text | |||
日付/時刻データ型 | DATE | date | Oracleに格納されている値の時刻部分が0時0分0秒の場合は、PostgreSQL側のdate型にマッピングしてください。時刻部分が0時0分0秒以外の場合は、時刻部分が切り捨てられた値として取得することはできますが、WHERE句の条件にDATE型をマッピングした列を指定した場合、検索結果が意図しない結果となる場合があるため、この場合はtimestamp型にマッピングしてください。 |
timestamp | Oracleに格納されている値の時刻部分が0時0分0秒以外の値を含む場合は、PostgreSQL側ではtimestamp型にマッピングしてください。PostgreSQL側のtimestamp型の精度には0を指定してください。 | ||
TIMESTAMP | timestamp | PostgreSQL側のtimestamp型に指定する精度は、Oracle側のTIMESTAMP型の精度と同じ値を指定してください。Oracle側のTIMESTAMP型の精度が7以上の場合は、PostgreSQL側のtimestamp型の精度に6を指定してください。精度を越えた値は切り捨てられます。Oracle側のTIMESTAMP型の精度が7以上の場合の注意点はPostgreSQLとOracleの仕様の相異を参照してください。 | |
TIMESTAMP WITH TIME ZONE | timestamp with time zone | PostgreSQL側のtimestamp with time zone型に指定する精度は、Oracle側のTIMESTAMP WITH TIME ZONE型の精度と同じ値を指定してください。Oracle側のTIMESTAMP WITH TIME ZONE型の精度が7以上の場合は、PostgreSQL側のtimestamp with time zone型の精度に6を指定してください。精度を越えた値は切り捨てられます。Oracle側のTIMESTAMP WITH TIME ZONE型の精度が7以上の場合の注意点はPostgreSQLとOracleの仕様の相異を参照してください。また、OracleのTIMESTAMP WITH TIME ZONE型はタイムゾーンの情報を持っていますが、SELECT結果にはタイムゾーン情報は含まれず、timezoneに設定されたタイムゾーンに変換されて取得されます。 | |
TIMESTAMP WITH LOCAL TIME ZONE | |||
INTERVAL YEAR TO MONTH | interval | Oracleに格納されている値の範囲が-178,000,000年から178,000,000年のデータを扱えます。PostgreSQLで扱える範囲外の値がOracleに格納されている場合は、検索結果が意図しない結果となる場合があります。 | |
INTERVAL DAY TO SECOND | interval | PostgreSQL側のinterval型に指定する精度は、Oracle側のINTERVAL DAY TO SECOND型の精度と同じ値を指定してください。Oracle側のINTERVAL DAY TO SECOND型の精度が7以上の場合は、PostgreSQL側のinterval型の精度に6を指定してください。精度を越えた値は切り捨てられます。Oracle側のINTERVAL DAY TO SECOND型の精度が7以上の場合の注意点はPostgreSQLとOracleの仕様の相異を参照してください。 | |
バイナリ列データ型 | RAW | bytea | OracleのRAW型は最大サイズを指定する必要がありますが、PostgreSQLのbytea型はサイズ指定は不要です。この相異はSELECT結果には影響しません。 |
LONG RAW | bytea | Oracleに格納されている((1G-2)/2)バイト(536,870,911バイト)までの値を扱えます。((1G-2)/2)バイトを超える値を検索した場合は、検索実行時にエラーとなります。また、LONG型、LONG RAW型の制限を参照してください。 | |
BLOB | Oracleに格納されている(1G-2)バイトまでの値を扱えます。(1G-2)バイトを超える値を検索した場合は、検索実行時にエラーとなります。 | ||
BFILE | |||
ROWIDデータ型 | ROWID | なし | PostgreSQLにROWIDデータ型相当のデータ型がないため、外部テーブルの列として定義できるデータ型がありません。ROWIDデータ型を文字データ型にマッピングすることで、ROWIDデータ型のデータを文字データとして取得することはできますが、WHERE句の条件にROWIDデータ型をマッピングした列を指定した場合、検索結果が意図しない結果となる場合があります。 |
UROWID |