読者です 読者をやめる 読者になる 読者になる

PostgreSQLのテンプレートデータベースについて

PostgreSQL

実際のCREATE DATABASEの動作は、既存のデータベースをコピーすることです。 デフォルトでは、template1という名前の標準のシステムデータベースをコピーします。 したがって、このデータベースは新しく作成するデータベースの元になる"テンプレート"となります。 template1にオブジェクトを追加した場合、追加したオブジェクトはその後に作成されるユーザデータベースにコピーされます。 この振舞いによって、データベース標準オブジェクト群にサイト独自の変更を行うことができます。 例えば、PL/Perl手続き言語をtemplate1にインストールした場合、データベースを作成する時に追加作業を行うことなく、自動的にこの言語をユーザデータベースで使用することができます。

template0という名前の二次的な標準システムデータベースがあります。 このデータベースにはtemplate1の初期内容と同じデータが含まれています。 つまり、使用しているバージョンのPostgreSQLで定義済みの標準オブジェクトのみから構成されています。 template0をデータベースクラスタを初期化した後に変更してはいけません。 CREATE DATABASEをtemplate1ではなくtemplate0をコピーするように実行することで、template1に追加されたサイト独自のものを含まない、"汚れがない"ユーザデータベースを作成することができます。 これは特に、pg_dumpダンプからリストアする時に便利です。 このダンプスクリプトは、後でtemplate1に追加される可能性のあるオブジェクトと衝突しないように、ダンプしたデータベースの内容を正しく再作成するために、汚れのないデータベースにリストアされなければなりません。

http://www.postgresql.jp/document/9.2/html/manage-ag-templatedbs.html

create databaseした後に必ずやることはtemplate1でやっておくとcreateしたdatabaseにも適応されるよ。
template1は誰かによって変更されている可能性があるのでその可能性を排除したい時はtemplate0を明示的にテンプレートに指定してcreate databaseするといいよ。