PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie ändert man die Zeichenkodierung einer Postgres-Datenbank?

Zunächst einmal ist Daniels Antwort die richtige und sichere Option.

Für den speziellen Fall des Wechsels von SQL_ASCII zu etwas anderem können Sie schummeln und einfach den pg_database-Katalog anstoßen, um die Datenbankcodierung neu zuzuweisen. Dies setzt voraus, dass Sie bereits Nicht-ASCII-Zeichen in der erwarteten Codierung gespeichert haben (oder dass Sie einfach keine Nicht-ASCII-Zeichen verwendet haben).

Dann können Sie Folgendes tun:

update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'thedb'

Dies ändert nichts an der Sortierung der Datenbank, sondern daran, wie die codierten Bytes in Zeichen umgewandelt werden (also jetzt length('£123')). gibt 4 statt 5 zurück). Wenn die Datenbank die 'C'-Sortierung verwendet, sollte es keine Änderung an der Reihenfolge für ASCII-Strings geben. Wahrscheinlich müssen Sie jedoch alle Indizes neu erstellen, die Nicht-ASCII-Zeichen enthalten.

Vorbehalt emptor. Dumping und Reloading bietet eine Möglichkeit, zu überprüfen, ob der Inhalt Ihrer Datenbank tatsächlich in der erwarteten Codierung vorliegt, und dies ist nicht der Fall. Und wenn sich herausstellt, dass Sie einige falsch codierte Daten in der Datenbank haben, wird die Rettung schwierig. Also, wenn möglich, dumpen und neu initialisieren.