dポイントプレゼントキャンペーン実施中!

PostgreSQLからSQLServerへデータを移行することになったのですが、
どのような方法が効率よいでしょうか?

PostgreSQLへ直接つなぐことができないので、
ダンプをとって、SQLServerにデータを流し込む。
(そもそもこのようなことができるのか・・・?)
CSV形式でデータを出力し、SQLServerの方でインポートする
など方法がいくつかあると思うのですが。

なにぶんPostgreSQLに詳しくないもので、
教えていただけないでしょうか。

A 回答 (2件)

既にダンプファイルが渡されており(しかも、それしかない)


そのままでは取り込むことができないのであれば・・・

まず、SQLServer に空のデータベースを1つ作成します。
ダンプファイルから手作業で以下2つのファイルを用意します。
1.create table, create index 文だけを残して、
  他の構文を全て削除したファイル
  (create table だけでも良い)
2.copy文だけを残して、他を全て削除したファイル
  そのファイルを加工してcsv等、データファイルを作成する。

まず1を利用して、テーブルを復旧し、
次に2を利用して、テーブルデータを復旧できます。
最後に、元のダンプファイルを見ながらその他必要なものを復旧します。

ちょっと時間が掛かりそうですが・・・
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>既にダンプファイルが渡されており(しかも、それしかない)
>そのままでは取り込むことができないのであれば・・・

一応、ダンプファイルの再作成は可能です。
そのため、copy文ではないダンプを作成しなおす。
もしくはテーブルごとにcsvデータを作成する。

のどちらかになるのかなと考えておりました。

copy文ではないダンプを作成しても、
結局、何らかの作業が発生するようであれば、
csvから取り込んだ方が楽なのかなぁと
漠然と考えておりました。

お礼日時:2007/01/19 19:19

PostgreSQLの基本的なダンプは、pg_dump になります。


他のDBへ移行する場合も、私はこれをオススメします。
基本構文:pg_dump dbname > outfile

他、pg_dumpall というのがありますが、
全てのDBをダンプできる反面、ロールやテーブル空間についての情報も
ダンプされますので、他のDBでは意味が無い場合があるからです。

さらにオプションとして -d をつけます。
-d をつけないと COPYコマンドという PostgreSQL固有?のSQLコマンドになり、
他のDBだとデータの復旧ができないことが多いと思います。
-d をつけると Insertコマンドでデータダンプを行いますので、
SQL標準に対応しているDBであればデータ復旧が可能です。

pg_dump -d dbname > outfile

参考URL:http://www.postgresql.jp/document/pg820doc/html/ …

この回答への補足

早速のご回答ありがとうございます。

実はPostgreSQLからダンプされたデータが手元にあり、
(ただし、恐らく「-d」をつけずに実行され、COPYコマンドが記載されているダンプですが・・・)
これをSQLServerにて取り込もうと試みたのですが、
COPYコマンドに到達する以前に他の構文?で
エラーとなってしまいました。
そのため、PostgreSQLのダンプはSQLServerでは取り込むことは
できないのかと思い、質問させていただいた次第です。

PostgreSQLにはあまり詳しくないもので、
漠然とした質問となってしまい恐縮ですが、
SQLServerへも取り込み可能なのでしょうか。

補足日時:2007/01/17 18:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!