For det første er Daniels svar den rigtige, sikre mulighed.
For det specifikke tilfælde med at skifte fra SQL_ASCII til noget andet, kan du snyde og simpelthen stikke i pg_database-kataloget for at omtildele databasekodningen. Dette forudsætter, at du allerede har gemt ikke-ASCII-tegn i den forventede kodning (eller at du simpelthen ikke har brugt nogen ikke-ASCII-tegn).
Så kan du gøre:
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'thedb'
Dette vil ikke ændre sammenstillingen af databasen, bare hvordan de kodede bytes konverteres til tegn (så nu length('£123')
vil returnere 4 i stedet for 5). Hvis databasen bruger 'C'-sortering, bør der ikke ændres på rækkefølgen for ASCII-strenge. Du bliver sandsynligvis nødt til at genopbygge alle indekser, der indeholder ikke-ASCII-tegn.
Caveat emptor. Dumping og genindlæsning giver mulighed for at kontrollere, at dit databaseindhold faktisk er i den kodning, du forventer, og det gør det ikke. Og hvis det viser sig, at du havde nogle forkert kodede data i databasen, bliver det svært at redde. Så hvis du overhovedet kan, dump og geninitialiser.