2017-12-13 4 views
1

Ich versuche, meine aktuelle vorhandene Datenbank postgre Instanz zu importieren, dieAzure PostgreSQL Server Service Sortierungs Fehler erstellen

ich bereits konfigurierte meine azur postgresql-Server-Parameter auf Azure PostgreSQL Server ausgeführt wird Codierung als UTF-8 zu verwenden (I‘ nicht sicher, dass es ohne Neustart ist die Anwendung aber auch wenn ich

nicht Option, um es neu zu starten) ich mit diesem Befehl, um diese Aktion zu tun bin versucht:

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

jedoch einen Fehler etwas wird immer so:

ERROR: could not create locale "en_US.utf8": No error

Ich tauche in dem Prozess und versuchen Sie es mit UTF8 zu laufen (statt UTF8) und anderen Optionen, aber es ist jedes Mal denselben Fehler bekommt.

Ich habe eine Dump-Datei den Inhalt und die Leitung zu überprüfen, die diesen Fehler generiert wird:

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

dies, dass Fehler verursacht. Ich habe versucht, es manuell auf Azure Postgre-Instanz auszuführen, und ich habe denselben Fehler auch.

Durch die Art, wie ich bereits erstellt diese Datenbank aus Konsole, indem Sie diese mit SQL:

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

Auch habe ich versucht, andere Optionen zu erstellen und zu importieren, aber nicht von ihnen arbeiten.

Kann mir jemand helfen?

Antwort

0

beschloß ich, mein Problem mit diesem Befehl:

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 

Die Ausgabe vom Server kommt O. S. Unterschiede. Mein aktueller PostgreSQL-Server verwendet Ubuntu, aber Azure PostgreSQL Server verwendet Windows, so dass die Namen der Spalten ein wenig anders sind.

0

CREATE COLLATION erstellt einen vom Betriebssystem unabhängigen Namen, der verwendet werden kann, um auf OS-Ländereinstellungen (in Abfragen usw.) zu verweisen.

Hier beziehen sich lc_collate = 'en_US.utf8' und lc_ctype = 'en_US.utf8' auf Linux-Betriebssystem-Ländereinstellungen, die unter Windows anders benannt werden, die Azure PostgreSQL verwendet (und sie sind auch auf MacOS anders).

Unter Windows sollte dies funktionieren

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

Und auf MacOS,

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

Aber die meiste Zeit, Sie wollen nicht Ihre eigene Sortierungen mit CREATE COLLATION zu schaffen, kann aber nur Verwenden Sie die vordefinierten Sortierungen in PostgreSQL. Und normalerweise enthält ein mit pg_dump erstellter Dump keine CREATE COLLATION Anweisungen, da Sie selbst keine erstellt haben.

Wenn Sie bei Kollatierungen etwas Spezielles tun, ist es möglich, diese schemaspezifischen Kollatierungen zu entfernen, damit sie nicht in den Speicherauszug aufgenommen werden?

Verwandte Themen