• 締切済み

PostgreSQLからSQLServerへの移行

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

  • kmch
  • お礼率12% (1/8)

みんなの回答

  • 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へも取り込み可能なのでしょうか。

関連するQ&A

  • SQLServerのデータをPostgreSQLに移行

    SQLServer上にあるデータをPostgreSQLに移行するのによい方法はありますか?データの移行のみでテーブル構造は既にPostgreSQL上で作成(SQLServerのテーブル構造とほぼ同じ)しているので移行しません。 現在CSVで入出力することを考えていますが、これよりもっと簡単にできる方法や、ソフトがあれば教えてください。

  • accessのレコードデータをPostgreSQLに移行したい

    accessのレコードデータをpostgreSQLに移行したいと考えています。 accessのデータをcsvファイルにエクスポートしてからposgresSQLで インポートしようと考えていました。 しかしレコードの中にEnter(改行コード)があるので、csvに変換して しまうとレコードの件数以上に行数ができてしまい、postgresSQLで インポートがうまくできませんでした。 accessのレコードにある改行コードを他の文字に変換するしか posgreSQLに移行する方法はございませんでしょうか? できれば改行コードもそのまま移行したいと考えておりますが 何か良い方法があればご教授頂ければと思います。 よろしくお願いします。

  • SQLserverからPostgreSQLに移行したい

    PHPとSQLserverを使用した環境でデータを作成していましたが、 DBがPostgreSQLに変更になりました。 接続するところまではできましたが、 クエリ作成、結果を出力するところがわかりません。 WEBで検索しましたが、よくわかりませんでした。 どうぞ宜しくお願い致します。 ********************************************************** SQLserverを使用する前提で作成したデータ ********************************************************** $sql = "select * from テーブル名"; $rc = mssql_query($sql,$cont); print("<table>"); while ($array = mssql_fetch_array($rc)) { print("<tr><td>"); print "".$array["氏名"].""; print("</td><td>"); print "".$array["住所"].""; print("</td><td>"); print "".$array["電話番号"].""; print("</td></tr>"); } print("</table>");

    • ベストアンサー
    • PHP
  • SQLServerのデータをCSVファイルに出力したい

    VB6.0(SP5) Windows2000(SP3) SQLServer2000(SP3) で開発しています。 VBで、SQLServerのデータをCSV形式で出力したいのですが、どのようにすればいいか教えてください。 一旦データを取得して、それを1行ずつ書いていく。 というやり方ならイメージできるのですが、もっと簡単というか、処理の早い方法があるのかなと思いまして(SQLServerの機能で何かあるかなとか)、教えて頂きたいのです。 よろしくお願いします。

  • PostgreSQL MySQL CSV入出力

    テーブルのデータを移植したいと思っています PostgreSQL8.4から出力したCSVをMySQL5.5で取り込みたいのですが、COPYコマンドを使用すると以下のようなエラーが出ます ERROR 1262 (01000): Row 1 was truncated; it contained more data than there were input columns PostgreSQLはtext[]型で"{A_1,A_2}"といったデータを出力します MySQLはPostgreSQLの配列に相当する型がないようなのでBlob型で格納しようと思っています おそらくデータ内のカンマが原因なのはわかっているのですが、上手くエクスポート・インポートする方法はありませんでしょうか?

    • ベストアンサー
    • MySQL
  • PostgreSQL6.5.3から8.2.3へラージオブジェクトの移行

    PostgreSQL6.5.3から8.2.3への移行作業を行っています。 ほぼ全てのデータ移行は完了したのですが画像(ラージオブジェクト)の移行ができず困っています。 6.5.3のpg_dumpではラージオブジェクトのエクスポートはサポートされていないと思うのですが、移行ツールのようなものはないでしょうか。 何か良い手段があればご教授下さい。 また、移行したデータにラージオブジェクトのOIDが保存されており、そちらの値も更新する必要があると考えています。 ちなみに6.5.3のdata/base/db名のディレクトリ内に「xinv***」「xinx***」というファイルがあり、これが実体かな、と勝手に予想しています。このデータを用いてうまく移行できないものか、とも考えています。 どうかよろしくお願いします。

  • Outlook2002へのデータ移行方法

    いままでBecky2.0を使ってきましたが、都合でOutlook2002(Expressではない)を使うことになりました。 Beckyからeml形式でエクスポートするとOutlookExpressにインポートできることは確認しました。しかしOutlookはeml形式のインポートはできないようです。 BeckyからOutlookにメールデータを移行する方法はあるのでしょうか? もしくはOutlookExpressのメールをOutlookに移行する方法でも結構です。 ご存知の方教えてください。 なお、アドレス帳はCSV形式でインポートできました。

  • PHPからPythonに移行したい

    PHPからPythonに移行したいのですが バイソンについて全くわからないので 以下のことをさせるにはどうしたらよいのでしょうか? 簡単なサンプルがあると助かります。 OSはWindowsXPとLinuxのCentOS5です。 バージョンは何を使えばよいでしょうか? (1)URLを指定して、yahooなどのHTMLやHTTPを取得。 (2)CSVファイルを読み込んで、加工後、CSV形式で出力。 (3)配列・ハッシュの値を画面上に出力。 (4)PHPのvar_dump()のようなもの、デバッグに便利なもの (5)正規表現でマッチしたグループ()を表示 (6)メールクライアントのように受信する (7)MySQLやPostgreSQLなどデータベースを使う (8)TK?など窓を開いて、写真画像をクリックすると別の画像に切り替わる。 などです。 これらに詳しい書籍をご存知の方もお願いします。

  • データ移行について

    oracle8iからmysql5.0にデータ移行する作業をしています。 まず、oracleからCSVファイルを出力し、mysqlでインポート、という流れです。半角カナ→全角カナ対応もしています。 ただその際、全角漢字が文字化けしてうまくインポートすることができません。 oracle8iからmysql5.0にデータ移行する、という何か分かりやすいツール等、ご存じの方いらっしゃいましたらお願いします。。

  • SQLiteのテーブルデータ移行について

    SQLiteについて質問します。 よろしくお願いします。 [環境] WindowsXP pro sp3 sqlite 3.6.9 [やりたいこと] SQLiteのテーブルのデータを、別のSQLiteのデータベースに移行したい。 ただし、移行の操作はすべてコマンドプロンプト上で実行したい。 [現状] 移行したいテーブルのデータをCSV形式でアウトプット出来ています。 [困っていること] 1.移行したいテーブルのデータに改行が入っていると、インポートに失敗してしまう。 >うまくインポートできる例 1,2,"あいうえお",5,6,2011/10/21 >インポートに失敗する例 1,2,"あいう えお",5,6,2011/10/21 2.CSVの文字列データの先頭と最後尾にある「"」も一緒にインポートされてしまう。 1,2,"あいうえお",5,6,2011/10/21 このデータをインポートした場合、 1|2|あいうえお|5|6|2011/10/21 この様にインポートしたいが、 1|2|"あいうえお"|5|6|2011/10/21 この様にインポートされてしまう。