PostgreSQLドキュメントから:
template1の代わりにtemplate0をコピーするもう1つの一般的な理由は、template0をコピーするときに新しいエンコーディングとロケールの設定を指定できるのに対し、template1のコピーは同じ設定を使用する必要があるためです。これは、template1にはエンコーディング固有またはロケール固有のデータが含まれている可能性があるのに対し、template0には含まれていないことがわかっているためです。
template0
のみを使用できます 異なるエンコーディングとロケールで新しいデータベースを作成するには:
CREATE DATABASE newdb
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'zh_CN.UTF-8'
CONNECTION LIMIT = -1
TEMPLATE template0;
これは機能しますが、template1
に加えた変更を意味します 新しく作成されたデータベースには適用されません。
template1
のエンコーディングと照合を変更するには 最初にtemplate1
を削除する必要があります 次に、新しいテンプレートtemplate1
を作成します template0
から 。テンプレートデータベースを削除する方法は、ここで説明されています。次に、新しいデータベースtemplate1
を作成できます 選択したエンコーディング/照合で、datistemplate=true
を設定してテンプレートとしてマークします (例):
update pg_database set datistemplate=true where datname='template1';