Ten eerste is Daniels antwoord de juiste, veilige optie.
Voor het specifieke geval van het veranderen van SQL_ASCII naar iets anders, kun je vals spelen en gewoon de pg_database-catalogus porren om de databasecodering opnieuw toe te wijzen. Dit veronderstelt dat je al niet-ASCII-tekens hebt opgeslagen in de verwachte codering (of dat je gewoon geen niet-ASCII-tekens hebt gebruikt).
Dan kun je het volgende doen:
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'thedb'
Dit verandert niets aan de sortering van de database, alleen hoe de gecodeerde bytes worden omgezet in tekens (dus nu length('£123')
geeft 4 terug in plaats van 5). Als de database gebruikmaakt van 'C'-sortering, zou de volgorde voor ASCII-tekenreeksen niet moeten worden gewijzigd. U zult waarschijnlijk indexen die niet-ASCII-tekens bevatten echter opnieuw moeten opbouwen.
Voorbehoud emptor. Dumpen en opnieuw laden biedt een manier om te controleren of de inhoud van uw database daadwerkelijk de codering heeft die u verwacht, en dit niet. En als blijkt dat je verkeerd gecodeerde gegevens in de database hebt staan, wordt het moeilijk om te redden. Dus als je kunt, dump en initialiseer.