PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come modificare la codifica della raccolta del database dei modelli

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';