データベース移転できない問題について

このQ&Aのポイント
  • データベースの移転で問題が発生しています。PostgresSQLに詳しい方、ご教示ください。
  • ネットショッピングサイトのサーバ管理をしており、データベースの移転がうまく行かず困っています。
  • 移転元のサーバでpg_dumpコマンドを実行し、ダンプファイルを自分のWindows7のマシンに保存しましたが、文字化けが発生しています。どうすれば正しくデータを移転できるのでしょうか?
回答を見る
  • ベストアンサー

データベースの移転がうまくできません

PostgresSQLに詳しい方、教えてください。 現在、私はネットショッピングサイトのサーバ管理をしており、データベースにPostgresSQLを使ってます。 サーバのハードが老朽化してきたため、今までの自社サーバーをやめ、レンタルサーバをかりてそこへサイト移転することになりました。 PHPやHTMLといったソース類は、容易に移転できたのですが、データベースの移転がうまく行かず困っております。 どなたかご教示ください。 ■環境(移転元) サーバ:自社サーバ OS:Linux version 2.4.20-16.9 Postgresバージョン:psql (PostgreSQL) 7.3.4 ■環境(移転先) レンタルサーバ会社:さくらインターネット サービス名:さくらのVPS(v3) 1G OS:Linux version 2.6.32-279.1.1.el6.x86_64 Postgresバージョン:psql (PostgreSQL) 8.4.13 ■現象 移転元のサーバにて、pg_dump -i コマンドを実施。 生成されたダンプファイルをFFFTPにて自分のWindows7のマシンに保存。 Windows7上のエディター(DreamWeaver)でファイルを開くと文字化けしています。 エディターのエンコードをシフトJIS→EUCに変更するとデータベースに入力されている文字列をきちんと見ることができます(一部文字化けは残るのですが。)ので、ここまでは成功しているように思っています。 このダンプファイルをFileZillaにて移転先のサーバにアップロード。 psqlコマンドでリストア。 あらかじめ、移転先のPostgresには移転元のデータベース名と同じものを作成し、ユーザー名も同じものを作成してあります。 ところが、いざselectコマンドを使いデータを検索してもあるはずのデータが出てきません。 テーブルはきちんと作成されているようなのですが。 どうしたらデータをきちんと移転できるのでしょうか? どなたか、ご教示頂けないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

文字コードがおかしいんじゃないでしょうか。 DreamWeaverじゃなくて、例えばサクラエディタで開いてみたらどうでしょう。そして元のファイルはEUC-JPになっているでしょうからそれをUTF-8で保存します。そしてFileZillaのところからやり直してみるといいでしょう。 とにかく、pg_dumpで出力されたファイルの中身をEUC-JPからUTF-8に変換してからpsqlで取り込むと良さそうかと存じます。

TKM2005
質問者

補足

ありがとうございます! ヒントになりました。 移転元のデータベースをダンプする前に export PGCLIENTENCODING=EUC-JP を行い、ダンプを行ったものを一度Windows7に持ってきて、サクラエディタで開いてみたら、キレイに表示されていました。 それを移設先のサーバに持って行き、移転先でも export PGCLIENTENCODING=EUC-JP を行ってから、psqlコマンドでリストアしました。 このときに表示されるエラーを精査してみたところ、 ERROR: 符号化方式"EUC_JP"文字0xfce2<は"UTF8"と同じではありません CONTEXT: user_infoのCOPY。行番号 412 のようなエラー文が多数出ているのに気づき、Windows7に戻ってサクラエディターで一箇所ずつ修正し、psqlコマンドでリストアしましたところ、きちんと表示されました! 文字コードと禁止文字が混入していたことが原因のようです。 移設元のデータベースにどうやってこの文字が混入したのかは謎ですが移設はうまくいきました。 ありがとうございます。感謝します。

関連するQ&A

  • Linux上のpostgreSQLデータをWindowsでみたい

    サーバA(OS:Linux Fedora Core 4、データベース:PostgreSQL 8.0 で運用しているシステムがあり、毎日そのデータを下記のdumpコマンドで PostgreSQLの全データをバックアップしています pg_dumpall > postgres.out  サーバAを触るのは怖いので、別のマシンB(Windows-Xp)に postgresql-8.2.6をインストールしました。 このバージョンは、postgresqlとともに、pgAdmin3というGUIの管理 ツールもついていると聞きここに、サーバAからバックアップされている postgres.outをrestoreして pgAdmin3でデータベース・テーブル等をみようとしています (postgres.out)を使ってのリストアの仕方は (1)(postgres.out)をpostgresqlの/binディレクトリの中に入れる (2)psqlのメニューから次のコマンドを打つ psql -d manmg -f postgres.out   (3)pgAdmin3を立ち上げるとサーバAのDBは追加されているようなのですが  テーブルは(0)となって見えません マシンBの方のPostgreSQLについてはインストールしたままでサーバA のpostgresqlの設定等は何もしていません 何か設定する所はあるのでしょうか 上記手順でlinuxから吐出されたバックアップデータをWindowマシンに リストアする方法は間違っていないのでしょうか よろしくお願いします。

  • pg_dumpの文字化け

    PostgreSQLのpg_dumpを用いたバックアップで困っています。 OSはVineLinux 2.2.17-0vl10です。 あるサーバ(PostgreSQL7.0.2)のデータベースtest_db(EUC_JP)に対して、 pg_dump -D -v -i -f test.dump test.db でダンプファイルを作成しました。 COPYでは不確実な場合があるということでINSERT文で出力しました。 (データの日本語の部分が数字に変換されています) それを別のサーバ(PostgreSQL8.2.5)のデータベースtest2_db(EUC_JP)にリストアしました。 psql test2_db < test.dump すると、"(株)"という文字を含む文字列が化けてしまっていました。 同じレコードの他のカラムは大丈夫です。 このような場合の対策がありましたら教えていただきたいと思います。 宜しくお願いします。

  • MYSQLでPCにあるデータベースのリストを得るには?

    こんにちわ, 現在MYSQLの学習をしています。 タイトルにあるようにMYSQLでPCにあるデータベースのリストを得るにはどうすればいいのでしょうか。 PostgreSQLでいう $ psql -l のコマンドの事です。 よろしくおねがいします。

    • ベストアンサー
    • MySQL
  • postgresのリストアでDBを自動作成する方法

    質問させてください。 例えば、以下のコマンドを実行してpostgreSQLでリストアをするとします psql -h localhost -U postgres -d testdb この場合、testdbというDBを作成していないと、エラーになります。 DBまで自動的に作成するコマンドはありませんでしょうか。 psql、pg_restoreの両方でお聞きしたいです。

  • データベースの移行について

    初めまして。 ちょっとパソコンに詳しいからだけで何故か私が社内システムで使用しているデータベースの移行をする事になってしまいあわあわしています。 景気が悪く業者に頼む為の予算もないとの事で私がデータベースの移行をする事になってしまいました。 行いたい事は旧サーバーのデータベースの状態をそのまま新サーバーの移行したいですができますでしょうか? ネットで調べていたら「exp」コマンドと「imp」コマンドがありました。 「exp」コマンドでダンプファイルを作成し、「imp」コマンドでダンプファイルを取り込めばいいのでしょうか。 申し訳ありませんが皆さんの知恵を私にお貸し下さい。 些細な事でも、何でも構いませんので宜しくお願いします。 本当に宜しくお願いします。

  • データベース名postgresは使わない方がいい?

    データベース名postgresは使わない方がいい? PostgreSqlでデータベースを作成する際にデフォルトのデータベースやロールとしてpostgresが存在しますが、セキュリティの事を考えると、これは使用しない方が良いですか? postgres(データベース)とpostgres(ロール、ユーザー)でやって問題ないですか? database1(仮名)とrole1(仮名)でやった方がいいですか? もちろんpostgresユーザーのパスワードはしっかりしたものを設定します。

  • postgresのパスワードの変更?

    PHP+PostgreSQLで開発しているのですが、PostgreSQLのパスワードがわかりません。 まず、PostgreSQLのユーザー(postgres)を作成して、パスワードも設定しinitdbでデータベースを初期化しDBを作っていました。 そしてそのDBを作っていた人が突然夜逃げしてしまったのでpostgresのパスワードがわからなくなってしまい、そこでroot権限でパスワードをpasswdコマンドで変更したのですがDBにpostgresでアクセスできません。 [admin admin]$ su - postgres Password: [postgres pgsql]$ psql -d test Password:←ここでは新たに変更したパスワードを入力しました psql: FATAL 1: Password authentication failed for user "postgres" となります。initdb後にpostgresのパスワードを変更した場合は前に設定されていたパスワードを入力しなければならないのでしょうか? またパスワードを調べる手立てはないでしょうか? List of databases Name | Owner | Encoding -----------+----------+----------- test | postgres | SQL_ASCII template0 | postgres | SQL_ASCII template1 | postgres | SQL_ASCII DBの中はこのようになっています。 宜しくお願いします。

  • データベースリストア時にエラーがー

    RedHatのPostgresql7.2.4で稼動しているデータベースhogehogeを windowsの8.2.4で稼動させようとしています。 最初にpgdumpでデータベースhogehogeを取り出し、それをwindowsからFFFTPで取得、 その後pgADMINIIIでリストアしようとしましたが、 データを選択しても実行ボタンがアクティブにならなかったので、 コマンドラインを使って createdb -U postgres --encoding=EUC_JP hogehoge psql -U postgres -e -f c:\files\hogehoge hogehoge としました。 すると psql:c:/files/hogehoge:181: ERROR: invalid byte sequence for encoding "SJIS": 0xf309 HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". CONTEXT: COPY hogehoge_hage, line 1 というようなエラーがいくつか出てきます。 client_encodingをEUC_JPにしてみましたがやはり同じエラーが 出ました。 元のRedHatでのエンコードはEUC_JPになっています。 どなたか解決法をご存知の方がおられましたらご教授お願いします。

  • FedoraCore3でPostgreSQLを

    yum update postgresql でバージョンアップしたと単に service postgresql start が[失敗]というメッセージしか出さなくなりました 以前は[ok]とでていたので失敗しているようです 実際 su postgres をして psql -l としてもサーバにつながらないと言うメッセージが出てきます どうしたら解決できるでしょうか?

  • pg_dump スキーマ バックアップでエラー

    スキーマ単位でバックアップをしたいと思ってます。 が・・ pg_dumpにてあるスキーマを指定して実行すると「PG_DUMP: no matching tables were found」のエラーが表示されます。 【環境】 PostgreSQL :9.6.0 サーバー :Windows2008 R2 クライアント:Windows7 データベース:postgres ユーザ :postgres -- スーパユーザ スキーマ :SCM -- 注意 大文字 【コマンド】エラー時 パターンA PG_DUMP -h 192.168.xxx.xxx -U postgres -p 5432 -f D:\POSGRESQL_DUMP\SCM_DUMP.DAT -n SCM -Fc postgres 【コマンド】エラー時 パターンB (スキーマに”をつける) PG_DUMP -h 192.168.xxx.xxx -U postgres -p 5432 -f D:\POSGRESQL_DUMP\SCM_DUMP.DAT -n "SCM" -Fc postgres ちなみに -n スイッチを外すと正常に実行されます。 【コマンド】正常時(-n SCMを外す) PG_DUMP -h 192.168.xxx.xxx -U postgres -p 5432 -f D:\POSGRESQL_DUMP\SCM_DUMP.DAT -Fc postgres どうか、お助け下さい。よろしくお願いします。