2017-12-13 9 views
1

を作成して、私はAzureのPostgreSQLサーバAzureのPostgreSQLのサーバーサービスの照合順序は、エラー

上で実行されているインスタンスをpostgreするために私の現在の既存のデータベースをインポートしようとしている私はすでに私の紺碧のPostgreSQLサーバのパラメータをUTF8としてエンコーディングを使用するように構成された(私は」私は、このコマンドを使用してこのアクションをやろうとしている

)それは、再起動せずに適用だとよく分からないが、私はそれを再起動するオプションを持っていない場合でも:

sudo -u postgres pg_dump --encoding="UTF-8" --no-owner DBNAME | psql --host=xxx.postgres.database.azure.com --port=5432 [email protected] --dbname=DBNAME 

しかし、それはエラー何かを取得していますこのように:

私はプロセスで潜り込んで、UTF8(UTF-8の代わりに)と他のオプションを使用して実行しようとしますが、毎回同じエラーが発生します。

私は内容を確認するために、ダンプファイルを作成し、このエラーを生成している行がある:

CREATE COLLATION "en_US.utf8" (lc_collate = 'en_US.utf8', lc_ctype = 'en_US.utf8'); 

これは、そのエラーの原因となっています。 Azure postgreのインスタンスで手動で実行しようとしましたが、同じエラーもあります。ところで

は、私はすでに、このSQLを使用して、コンソールからそのデータベースを作成しました:

create database "DBNAME" with owner=xxx encoding='UTF-8' template template0; 

はまた、私は、作成およびインポートが、それらの非動作するように他のオプションを試してみました。

誰かが私を助けることができますか?

答えて

0

私は、このコマンドを使用して私の問題を解決:

sudo -u postgres pg_dump -Fp —no-owner DBNAME |sed “/COLLATE/s/en_US.utf8/English_United States.1252/ig”|sed "/CREATE COLLATION/s/en_US.utf8/English_United States.1252/ig"|psql --host=aaa.postgres.database.azure.com --port=5432 [email protected] --dbname=DBNAME 

を問題は、サーバーから来ているO.S.違い。私の現在のPostgreSQLサーバはUbuntuを使用していますが、Azure PostgreSQLサーバはウィンドウを使用しているため、照合名は少し異なります。

0

CREATE COLLATIONは、(クエリなどで)OSロケールを参照するために使用できるオペレーティングシステムの独立した名前を作成します。

ここでlc_collate = 'en_US.utf8'lc_ctype = 'en_US.utf8'は、Linuxオペレーティングシステムのロケールを指します。これらのロケールは、Azure PostgreSQLが使用する(MacOSでも異なります)Windows上では異なる名前が付けられています。

Windowsでは、これは動作するはず

CREATE COLLATION "en_US.utf8" (lc_collate = 'English_United States', lc_ctype = 'English_United States'); 

そして、MacOSの上

CREATE COLLATION "en_US.utf8" (lc_collate = 'en_US', lc_ctype = 'en_US'); 

しかし、ほとんどの時間、あなたはCREATE COLLATIONを使用して独自の照合順序を作成する必要はありませんが、ちょうどすることができますPostgreSQLにあらかじめ組み込まれている照合を使用してください。通常、自分で作成していないので、pg_dumpで作成されたダンプにはCREATE COLLATION文は含まれません。

照合で特別なことをしていない限り、それらのスキーマ固有の照合を削除することができるので、それらはダンプに含まれませんか?

関連する問題