TOP書籍連動> データの書き出し
まるごと PostgreSQL!
PostgreSQLとOracleによるデータベース相互移行マニュアル

第3回:データの移行(2)
著者:奥畑 裕樹(OKUHATA, Hiroki)   2005/10/20
1   2  次のページ
データの書き出し

   前回に続き、データを書き出します。先ほどのプログラムをリスト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データ移行例
(画像をクリックすると別ウィンドウに拡大表示します)

1   2  次のページ

書籍紹介
まるごと PostgreSQL! Vol.1
まるごと PostgreSQL! Vol.1 日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。

発売日:2004/12/08発売
定価:\1,890(本体 \1,800+税)
奥畑 裕樹(OKUHATA, Hiroki)
著者プロフィール
奥畑 裕樹(OKUHATA, Hiroki)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。


INDEX
第3回:データの移行(2)
データの書き出し
  SQL文の移行