ポストグレスからオラクルにデータをコピーするには?

ショコラ
ショコラ

ポストグレスからオラクルにデータをコピーするには?

データに改行が含まれていないパターンです。

もっさん先輩
もっさん先輩

手順

  1. pg_dumpコマンド を使って、テーブルの内容を INSERT文 でダンプします。
pg_dump -U postgres -a --column-inserts --table [テーブル名] --table [テーブル名] [データベース名] > pgdump.sql
  1. 日付部分を TO_DATE に置換します。

PHP版

<?php
$fp = fopen('pgdump.sql','r');
while (!feof($fp)) {
  $line = fgets($fp);
  $line = mb_ereg_replace('(\'[\d]{4}-[\d]{2}-[\d]{2} [\d]{2}:[\d]{2}:[\d]{2}\')','TO_DATE(\1,\'YYYY-MM-DD HH24:MI:SS\')',$line);
  $line = mb_convert_kana($line,'k','EUC-JP'); // 全角かなを半角カナに直す
  echo $line,PHP_EOL;
}

sed版

sed -i "s/\('[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}'\)/TO_DATE(\1,'YYYY-MM-DD HH24:MI:SS')/" pgdump.sql
  1. Oracle の場合、SQLに「&」があると入力を求められてしまうので、「SET DEFINE OFF」をファイルの先頭に記述します。
SET DEFINE OFF
  1. sqlplusコマンド で[日付を置換したダンプファイル]を取り込みます。
sqlplus [ユーザー名]/[パスワード]@[接続先] @dump2.sql
  1. コミットします。
commit;

以上

Scroll to Top