Oracle Database 互換データ型
pg_varchar2 は PostgreSQLにVARCHAR2型を提供する外部モジュール(contribモジュール)です。
VARCHAR2型はOracle Databaseが提供する可変長の文字型です。
VARCHAR2型はPostgreSQLではサポートしていませんが、pg_varchar2を使用することで、PostgreSQL上でもVARCHAR2型が使用できるようになります。
pg_varchar2が提供するVARCHAR2型の仕様は「仕様の差異について」を参照。
No. | 条件内容 |
---|---|
1 | pg_varchar2の利用環境にPostgreSQL9.3.xがインストールされていること |
pg_varchar2を利用するためには以下の手順が必要となります。
pg_varchar2のライブラリをPostgreSQLにインストールします。
インストールにはRPMファイルを利用する方法とSourceファイルをBuildする方法の2通りがあります。
pg_varchar2のRPMファイルを入手したら、以下のコマンドを実行します。
$ sudo rpm -ivh pg_varchar2-1.0.0-1.pg93.el6.x86_64.rpm
準備中... ########################################### [100%]
1:pg_varchar2 ########################################### [100%]
インストール方法は、一般的な PostgreSQL の contrib モジュールと同様です。
pg_varchar2 のアーカイブを contrib ディレクトリの中に展開し、pg_varchar2 ディレクトリへ入ります。そこで、make, make install コマンドを実行し、pg_varchar2のライブラリをインストールします。
$ tar xvfz pg_varchar2-1.0.0.tar.gz
$ cd pg_varchar2-1.0.0
$ make USE_PGXS=1
$ sudo make USE_PGXS=1 install
pg_varchar2をPostgreSQLの外部モジュールに登録します。 外部モジュールの登録には、「CREATE EXTENSION」コマンドを利用します。登録結果は、psqlのメタコマンド「\dx」で確認できます。
$ psql postgres
postgres=# CREATE EXTENSION pg_varchar2;
CREATE EXTENSION
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
-------------+---------+------------+-----------------------------------------------------------------------
pg_varchar2 | 1.0 | public | ORACLE -> PostgreSQL migration support tool. create oracle data type.
PostgreSQLに登録したpg_varchar2をバージョンアップ(ver.1.0.0→ver.1.1.0等)する方法は以下のとおりです。(※現在、ver.1.0.0のみの公開であるため、この操作は実行できません。) バージョンアップの詳細についてはリファレンス「ALTER EXTENSION」を参照して下さい。
postgres=# ALTER EXTENSION pg_varchar2 UPDATE TO '1.1.0';
pg_varchar2をPostgreSQLからアンインストールするためには、以下の手順が必要となります。
まずはPostgreSQLに外部モジュールとして登録されているpg_varchar2の削除を行います。 外部モジュールとしての登録を削除するには、CASCADEオプションを付けた「DROP EXTENSION」コマンドを利用します。 登録を削除した場合、VARCHAR2型が定義されているカラムは全て削除されるので、必要なデータであれば事前にバックアップを行う必要があります。 削除が成功しているかについては、psqlのメタコマンド「\dx」で確認することができます。
$ psql postgres
postgres=# DROP EXTENSION pg_varchar2 CASCADE;
DROP EXTENSION
postgres=# \dx pg_varchar2
List of installed extensions
Name | Version | Schema | Description
------+---------+--------+-------------
(0 rows)
VARCHAR2型を定義したカラムが存在する場合、CASCADEオプションなしでDROP EXTENSIONを実行すると、以下のようなエラーが出力されます。
postgres=# DROP EXTENSION pg_varchar2;
ERROR: cannot drop extension pg_varchar2 because other objects depend on it
DETAIL: table sample column v2 depends on type varchar2
HINT: Use DROP ... CASCADE to drop the dependent objects too.
続いて、PostgreSQLにインストールされているpg_varchar2のライブラリを削除します。
また、本操作を省略することで、ライブラリを削除せずに外部モジュールの利用だけを止めることも可能です。
但し、その場合もVARCHAR2型で定義されたカラムの情報は削除されます。
$ sudo rpm -e pg_varchar2-1.0.0-1.pg93.el6.x86_64
pg_varchar2ディレクトリ配下で以下のコマンドを実行する。
$ sudo make USE_PGXS=1 uninstall
pg_varchar2 が提供するVARCHAR2型の詳細を以下に示します。
PostgreSQL がサポートしている文字型については「文字型」を参照して下さい。
VARCHAR2(n) [ n:1-4000 ]
PostgreSQLで使用可能なVARCHAR2型の書式は上記のとおりです。
VARCHAR2型の型修飾子「n」の値は正の整数(1~4000)が入力可能です。型修飾子に入力した値がVARCHAR2型を定義したカラムの入力上限値(バイト長)となります。
pg_varchar2が提供するVARCHAR2型で使用できない書式を以下に示します。
pg_varchar2が提供するVARCHAR2型はOracle Databaseと完全互換ではありません。 以下の表において、pg_varchar2が提供するVARCHAR2型、Oracle Database10gのVARCHAR2型、 PostgreSQLのVARCHAR型の仕様を示します。 ※色付きのセルは、Oracle Database 10gと仕様が異なるものです。
No. | 項目 | VARCHAR2型(pg_varchar2提供版) | VARCHAR2型Oracle Database 10g | VARCHAR型PostgreSQL 9.3.1 |
---|---|---|---|---|
1 | 型修飾子に入力可能な値 | 1~4000の整数 | 1~4000の整数または、1.0、10.0等の整数と等しい数 | 上限値なし | 2 | 型修飾子の省略可否 | 省略不可 | 省略不可 | 可能(その場合、上限値なしとなる) | 3 | 型修飾子句 | なし | BYTE or CHAR | なし | 4 | 上限値チェックの単位 | バイト長 | バイト長、文字長 | 文字長 | 5 | 利用可能な演算子 | =,<>(!=),<,<=,>,>= | =,<>(!=),<,<=,>,>= | =,<>(!=),<,<=,>,>= | 6 | 上限値を超えた内容が文字列の場合 | エラー | エラー | エラー | 7 | 上限値を超えた内容が空白文字の場合 | エラー | エラー | 上限値以降は切り捨てとなり、エラーにはならない | 8 | キャスト対象(文字型) | 暗黙のキャスト可能 | 暗黙のキャスト可能 | 暗黙のキャスト可能 | 9 | キャスト対象(日付データ型) | 暗黙のキャスト可能 | 暗黙のキャスト可能 | 明示的キャストのみ可能 | 10 | キャスト対象(数値データ型) | 暗黙のキャスト可能 | 暗黙のキャスト可能 | 明示的キャストのみ可能 |
型名 | データ型分類 |
---|---|
text, char, varchar | 文字型 |
smallint, integer, bigint, real, double precision, numeric (decimal) | 数値データ型 ※decimalはnumericと同一である。 |
date, timestamp, interval | 日付データ型 |
上記の表はVARCHAR2型が暗黙のキャスト可能なデータ型を示したものです。
VARCHAR2型は文字型、数値データ型、日付データ型との間で暗黙のキャストができます。
orafceは、Oracle Database上のSQL関数をPostgreSQLに登録できる外部モジュールである。
Oracle 互換関数「orafce」のドキュメントは、下記のリンクを参照してください。
Oracle Database での動作については以下のリンクを参照してください。