2012-02-24 11 views
2

私は、リモートpostgresデータベースのdb_dumpをダウンロードできるスクリプトを作成しています。正しいエンコーディングでdb_dumpする方法

問題は、正しいエンコンディングでリモートデータベースを取得しようとしているため、実行できないということです。

リモートデータベースはLATIN1のencondingを持っていると私は、スクリプトを実行したとき、私はそれが私がリモートDBはUTF-8であるかのように、それは、リモート・データベースのエンコーディングを維持したいUTF-8

ノートでダンプ私はローカルのものもutf-8にしたい0

誰かがこれを達成する方法を知っていますか? pg_restoreののドキュメントから

+0

2つのデータベースと1つのデータをコピーするスクリプトがありますか?リモートデータベースにはLATIN1エンコーディングがあります。地元のものは何ですか? CREATE DATABASEでのみエンコードを選択できます。セッションでデータベースを作成しないと、あらかじめ予約されています。 SET client_encodingは、転送中のデータにのみ影響します。 – kupson

答えて

0

-C, --create    Zieldatenbank erzeugen 

これはあなたのダンプからターゲット・データベースを自動作成します。しかし、エンコーディングが常に正しいかどうか、または復元するサーバーに定義されているデフォルトのデータベースエンコーディングのみがわかりません。

+0

-Cは私のための有効なオプションではありません...それは私が持っていないなどのものをテンプレートを生成します... また、上記の解決策は動作しません私は正しいことをSETを持っている理由を手掛かりがありませんエンコードしても動作しません:( – Killercode

1

PostgreSQLデータベースにはエンコードがありますが、データベース/セッションへの接続にもエンコードがあります。 サーバーはオンザフライで必要なデータ変換を行います。

コマンドpg_dumpは既に正しいエンコーディングを使用しています。デフォルトではオリジナルのデータベースですが、-Eオプションで別のものを選択できます。 -Cを使用すると、適切なエンコーディング(プレーンテキスト形式)でCREATE文が追加されます。 pg_dumpは(-E LATIN1 -C)SQLファイルのこの数行で

ルック:

SET client_encoding = 'LATIN1'; 
... 
CREATE DATABASE postgres WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'pl_PL.UTF-8' LC_CTYPE = 'pl_PL.UTF-8'; 

あなたがしなければならないのは、あなたがしたいエンコーディングでデータベースを作成、または含まれるように、-C pg_dumpのオプションを使用することですダンプ・ファイルのCREATEコマンドPostgreSQLのpsql(またはpg_restore)が残りを行います。

関連する問題