データの書き出し
前回に続き、データを書き出します。先ほどのプログラムをリスト2のように変更して実行します。
#!/usr/bin/perl
BEGIN {
$ENV{ORACLE_HOME} = 'C:/Oracle10g/orahome';
$ENV{NLS_LANG} = 'japanese_japan.JA16EUC';
}
use strict;
use Ora2Pg;
my $data = new Ora2Pg (
datasource => 'dbi:Oracle:host= ⇒
localhost;sid=ORA10',
user => 'tsukaeru',
password => 'sql',
schema => 'TSUKAERU',
type => 'DATA',
debug => 1
);
$data->export_data('data.sql');
exit(0); すると、図3のようなファイルが出力されます。同じく、EUCの文字コードに対応したテキストエディタなどで開いてください。

(画像をクリックすると別ウィンドウに拡大表示します)
このデータをPostgreSQLに投入するには、psqlコマンドを使って次のように実行します。
% psql tsukaeru data.sql
コマンドが成功すれば、データ移行は完了です。
Ora2Pgの注意点
テーブル名や列名が日本語の場合には、エクスポートが失敗する場合があります。 NLS_LANG環境変数を正しく設定しても失敗する場合は、RENAME文やALTER TABLE文を使って、あらかじめテーブル名や列名を英語名に変えておくとよいでしょう。データをエクスポートした後に、日本語の名前に戻せばOKです。
Ora2Pgは、スキーマの出力時にはテーブルの制約関係をPostgreSQL用に変換してくれますが、データの出力時にはその制約を満たす順序 ではINSERT文を作成してくれません。そのため、制約がある場合には、必要に応じて投入前にINSERT文の順番を入れ替えてください。もしくは制約 を外して投入し、後から付けてもよいでしょう。
また表3にありますように、Ora2PgはOracleのRAWデータ型やBLOBデータ型などを、すべてPostgreSQLのTEXT型に移行 します。これをPostgreSQLのbytea型に移行したいときは、JDBCなどでリスト3のようなプログラムを作成するとよいでしょう。

(画像をクリックすると別ウィンドウに拡大表示します)