ショコラ
ポストグレスからオラクルにデータをコピーするには?
データに改行が含まれていないパターンです。
もっさん先輩
手順
- pg_dumpコマンド を使って、テーブルの内容を INSERT文 でダンプします。
pg_dump -U postgres -a --column-inserts --table [テーブル名] --table [テーブル名] [データベース名] > pgdump.sql
- 日付部分を 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
- Oracle の場合、SQLに「&」があると入力を求められてしまうので、「SET DEFINE OFF」をファイルの先頭に記述します。
SET DEFINE OFF
- sqlplusコマンド で[日付を置換したダンプファイル]を取り込みます。
sqlplus [ユーザー名]/[パスワード]@[接続先] @dump2.sql
- コミットします。
commit;
以上