Dalla documentazione di PostgreSQL:
Un altro motivo comune per copiare template0 invece di template1 è che è possibile specificare nuove impostazioni di codifica e locale durante la copia di template0, mentre una copia di template1 deve utilizzare le stesse impostazioni che utilizza. Questo perché template1 potrebbe contenere dati specifici della codifica o della locale, mentre è noto che template0 non lo contiene.
Puoi utilizzare solo template0
per creare un nuovo database con codifica e locale differenti:
CREATE DATABASE newdb
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'zh_CN.UTF-8'
CONNECTION LIMIT = -1
TEMPLATE template0;
Funzionerà, tuttavia significa che tutte le modifiche apportate a template1
non verrà applicato al database appena creato.
Per modificare la codifica e le regole di confronto di template1
devi prima eliminare template1
e quindi crea un nuovo modello template1
da template0
. Come eliminare il database dei modelli è descritto qui. Quindi puoi creare un nuovo database template1
con la codifica/collazione scelta e contrassegnarlo come modello impostando datistemplate=true
(esempio):
update pg_database set datistemplate=true where datname='template1';