• 締切済み

PostgreSQLからSQLServerへの移行

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

みんなの回答

  • ssm3u
  • ベストアンサー率52% (19/36)
回答No.2

既にダンプファイルが渡されており(しかも、それしかない) そのままでは取り込むことができないのであれば・・・ まず、SQLServer に空のデータベースを1つ作成します。 ダンプファイルから手作業で以下2つのファイルを用意します。 1.create table, create index 文だけを残して、   他の構文を全て削除したファイル   (create table だけでも良い) 2.copy文だけを残して、他を全て削除したファイル   そのファイルを加工してcsv等、データファイルを作成する。 まず1を利用して、テーブルを復旧し、 次に2を利用して、テーブルデータを復旧できます。 最後に、元のダンプファイルを見ながらその他必要なものを復旧します。 ちょっと時間が掛かりそうですが・・・

kmch
質問者

お礼

ご回答ありがとうございます。 >既にダンプファイルが渡されており(しかも、それしかない) >そのままでは取り込むことができないのであれば・・・ 一応、ダンプファイルの再作成は可能です。 そのため、copy文ではないダンプを作成しなおす。 もしくはテーブルごとにcsvデータを作成する。 のどちらかになるのかなと考えておりました。 copy文ではないダンプを作成しても、 結局、何らかの作業が発生するようであれば、 csvから取り込んだ方が楽なのかなぁと 漠然と考えておりました。

  • ssm3u
  • ベストアンサー率52% (19/36)
回答No.1

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/app-pgdump.html
kmch
質問者

補足

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