人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Mysqlからエクスポートしたデータを、Postgresにインポートすることは可能でしょうか。
現在、phpMyadmin で、SQL、csv、XML形式でデータをダウンロードしてあります。Postgresのほうは、サーバーにphpPgadminをインストール後にログインできませんでしたので、コマンドでリストアするしかないかと思います。
phpMyadmin でエクスポートしたデータだと都合が悪い場合は、ダンプするコマンドも教えていただければうれしいです。

用語をいろいろ書きましたが、知識はまったくの素人です。コマンドを使うソフトもほとんどさわったことがありません。
よろしく宜しくお願い致します。

●質問者: masato-7
●カテゴリ:コンピュータ インターネット
✍キーワード:CSV MySQL phpMyAdmin phpPgAdmin SQL
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● skipsstep
●27ポイント

たんなるテキストデータなので、様式のちがいをsedで書き換えれば可能です。

◎質問者からの返答

ありがとうございます。案外簡単にできるのでしょうか。

すみません、sedで書き換えるにはどうすればいいのでしょうか?

形式は、SQLがいいのでしょうか?

まったくの素人同然ですので、具体的に教えていただけると、ありがたいです。

宜しくお願い致します。


2 ● chuken_kenkou
●27ポイント

PostgreSQLのCOPY文で、csvファイルとデータベース間のインポート/エクスポートを行えます。

まずは、使用例が記載されたサイト

PostgreSQL 入門第2回:PostgreSQL 有効活用術


こちらは、マニュアルの掲載箇所です。

http://www.postgresql.jp/document/pg820doc/html/sql-copy.html

※ここ数日間、マニュアルを公開している日本PostgreSQLユーザ会のサーバ移行トラブルで接続できませんでしたが、現在は復旧しています。

◎質問者からの返答

ご丁寧にご回答いただき、ありがとうございます。

申し訳ございません。質問の文章の説明が足りませんでした。

状況を説明いたしますと、2つのサーバにそれぞれ別のデータベースが存在していたのですが、そのうち片方のサーバ(移行元)の契約を止めて、1つのサーバ(移行先:さくらインターネットのレンタルサーバ)上で管理することになったので、次のURLを参考に移行元のphpMyAdminからデータベースをエクスポートしました。

http://www.koikikukan.com/archives/2006/06/12/

そして、それを移行先のサーバにphpPgAdminを設置してインポートしようと考えていたのですが、"ログインに失敗しました" というエラーメッセージが表示され、ログインができません。

仕方がないので、phpPgAdminでのインポートをあきらめ、コマンドラインで試みましたが、次のエラーメッセージが大量に出力されてしまいます。

# psql -U userinfo userinfo < userinfo.sql

ERROR: syntax error at or near "`" at character 13

LINE 1: INSERT INTO `user_list_30` (`user_id`, `state_id`, `city_id`...

`(バッククォート)が良くないのかと思い、"(ダブルクォート)に置換して試してみましたが、今度は別のエラーが出て失敗してしまいました。

以下はその一部です。

NOTICE: table "user_list_38" does not exist, skipping

DROP TABLE

ERROR: syntax error at or near "serial" at character 56

LINE 2: "user_id" int NOT NULL serial,

^

ERROR: relation "hosp_list_38" does not exist

WARNING: nonstandard use of escape in a string literal at character 448

HINT: Use the escape string syntax for escapes, e.g., E'\r\n'.

何か良い解決策をご存知でしたら、ご教授いただけないでしょうか?

宜しくお願い致します。


3 ● chuken_kenkou
●26ポイント

#2への返答は、「SQL」での移行をしようとした時ですよね?

PostgreSQLとMySQLには、それぞれ独自仕様の部分があります。


ERROR: syntax error at or near "`" at character 13

LINE 1: INSERT INTO `user_list_30` (`user_id`, `state_id`, `city_id`...

`(バッククォート)が良くないのかと思い、"(ダブルクォート)に置換して試してみました

これは、適切な対処です。

標準SQLや主要なRDBMSでは、表や列の名前に予約語と同じキーワードを使用したり、特殊記号を使う場合、「"」(二重引用符)を使いますが、MySQLでは「`」(バッククォート)を使うという独自仕様になっています。


NOTICE: table "user_list_38" does not exist, skipping

DROP TABLE

これは、移行先に表を未定義であるのに、DROP TABLEしようとしたということで、問題ありません。


ERROR: syntax error at or near "serial" at character 56

LINE 2: "user_id" int NOT NULL serial,

「serial」はPostgreSQLの独自機能ですが、phpMyAdminでMySQLからエクスポート(SQLを生成)後、ご自身で「auto_increment」から修正したのでしょうか?

もしそうであれば、この前後のSQLの構文に問題があるのではないでしょうか?

primary keyにしてますよね?

なお、PostgreSQLのバージョンにより、確か仕様変更(「serialなら自動的にprimary keyと仮定されたのが、明示指定が必要になった(?)」とかだったかな)があったと思います。


ERROR: relation "hosp_list_38" does not exist

これも移行先で未定義なのに、削除や変更をしようとしたからですね。

ただ、WARNINGでなくERRORなので、MySQLとPostgreSQLでの非互換の部分でのエラーの可能性が高いかも知れません。

(実際のSQLを見ないと、判断はできません)


MySQLとPostgreSQLは、それぞれバージョンは何でしょう。

また、OSは何を使っているのでしょう?

また、文字コードは、何なのでしょうか?


まず、SQLレベルでの移行の場合、上述のように、特にDDL(表定義やインデクス定義など)で独自機能が多いです。そのため、何箇所か手作業による変更が必要になります。

#2でも回答したCSV形式のファイルでの移行は、どうでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ