PostgreSQLとOracleによるデータベース相互移行マニュアル 3

データの移行(2)

データの書き出し   前回に続き、データを書き出します。先ほどのプログラムをリスト2のように変更して実行します。 #!/usr/bin/perl

奥畑 裕樹

2005年10月20日 20:00

データの書き出し

   前回に続き、データを書き出します。先ほどのプログラムをリスト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);

リスト2:export_data.pl


   すると、図3のようなファイルが出力されます。同じく、EUCの文字コードに対応したテキストエディタなどで開いてください。
data.sqlの中身

図3:data.sqlの中身
(画像をクリックすると別ウィンドウに拡大表示します)


   このデータを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のようなプログラムを作成するとよいでしょう。
JDBCによるBLOBデータ移行例

リスト3:JDBCによるBLOBデータ移行例
(画像をクリックすると別ウィンドウに拡大表示します)

 

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る