#navi(../)
* PostgreSQLのtemplate0とtemplate1の違いについて [#o5c6637e]
psql -lコマンドでデータベース一覧を見るとtemplate0とtemplate1があります。~
template0とtemplate1は、createdbやcreate databaseをした時のひな形として利用されます。~
この資料は、template0とtemplate1の違いなどについて記述します。

#contents
#htmlinsertpcsp(db-top.html,db-sp.html)

* 関連記事 [#a8c88866]
-[[PostgreSQLのロケール設定の確認方法とロケール設定方法>PostgreSQL/ロケール設定の確認方法とロケール設定方法]]

* 本資料で使用した環境 [#tc0a0709]
- OS~
CentOS6(X86_64)
#br
- PostgreSQL(CentOSのRPMパッケージを使用)~
PostgreSQL 8.4.13 on x86_64-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4), 64-bit

* initdbによりデータベースクラスタを作成すると作成される [#qf3ea0d8]
initdbによりデータベースクラスタを作成すると以下の3つのデータベースが作成されます。
+ postgres
+ template0
+ template1
この3つはPostgreSQLに必要なデータベースなので削除してはいけません。

* template0, template1に接続してみる [#wc419096]
psqlコマンドを使用してtemplate0, template1に接続してみます。
+ psql -lでデータベースの一覧を表示
 -bash-4.1$ psql -l
                                          データベース一覧
    名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
 -----------+----------+------------------+-------------+-------------------+-----------------------
  postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
  template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                            : postgres=CTc/postgres
  template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                            : postgres=CTc/postgres
 (3 行)
#br
+ psqlコマンドでtemplate0に接続してみると接続拒否されます。
 -bash-4.1$ psql template0
 psql: FATAL:  現在データベース"template0"は接続を受け付けません
 -bash-4.1$
#br
+ psqlコマンドでtemplate1には接続が可能です。
 -bash-4.1$ psql template1
 psql (8.4.13)
 "help" でヘルプを表示します.
 
 template1=# \q
 -bash-4.1$

上記の操作によりtemplate0は接続拒否されtemplate1には接続が可能です。

* template1に接続しテーブルを作成し新規にデータベースを作成してみる [#a4a5f353]
+ template1に接続し以下のように操作しt1テーブルを作成しました。
 -bash-4.1$ psql template1
 psql (8.4.13)
 "help" でヘルプを表示します.
 
 template1=# create table t1 (c1 int, c2 int);
 CREATE TABLE
 template1=# \d
           リレーションの一覧
  スキーマ | 名前 |    型    |  所有者
 ----------+------+----------+----------
  public   | t1   | テーブル | postgres
 (1 行)
#br
+ create databaseコマンドでdb1データベースを新規に作成してみると、~
template1のひな形が使用されるため、t1テーブルがすでに作成された状態になります。(複製されます。)~
(template1をひな形として使用したため)
 template1=# create database db1;
 CREATE DATABASE
 template1=# \c db1
 psql (8.4.13)
 データベース "db1" に接続しました。.
 db1=# \d
           リレーションの一覧
  スキーマ | 名前 |    型    |  所有者
 ----------+------+----------+----------
  public   | t1   | テーブル | postgres
 (1 行)
 
 db1=# \d t1
    テーブル "public.t1"
  カラム |   型    | 修飾語
 --------+---------+--------
  c1     | integer |
  c2     | integer |
  
  db1=# \q
#br
+ 端末からcreatedbコマンドで作成しても同様にtemplate1をひな形にするためt1テーブルが既に存在します。
 -bash-4.1$ createdb db2
 -bash-4.1$ psql db2
 psql (8.4.13)
 "help" でヘルプを表示します.
 
 db2=# \d
           リレーションの一覧
  スキーマ | 名前 |    型    |  所有者
 ----------+------+----------+----------
  public   | t1   | テーブル | postgres
 (1 行)
 
 db2=# \q

上記のことより、template1に対してテーブルの作成などをしておくと、create database, createdbしたときに~
template1をひな形としてデータベースが新規作成されるため、template1の状態が引き継がれます。(複製されます。)~

* template0を使ってデータベースを作成する [#y66960e8]
上記ではcreate database, createdbによりデータベースを作成するとtemplate1の状態がひな形として使用されることが確認できました。~
以下、template0を使用してデータベースを作成してみます。
+ createdbコマンドでtemplateを指定してデータベースdb3を作成したときの出力です。~
\dによりテーブルを確認するとテーブルが存在していないことが確認できます。
 -bash-4.1$ createdb --template template0 db3
 -bash-4.1$ psql db3
 psql (8.4.13)
 "help" でヘルプを表示します.
 
 db3=# \d
 リレーションがありません。
 db3=# \q
#br
+ create databaseでtemplate0を指定してデータベースdb4を作成したときの出力です。~
\dによりテーブルを確認するとテーブルが存在していないことが確認できます。
 -bash-4.1$ psql db3
 psql (8.4.13)
 "help" でヘルプを表示します.
 
 db3=# \h create database
 コマンド:     CREATE DATABASE
 説明:         新しいデータベースを作成する
 書式:
 CREATE DATABASE データベース名
     [ [ WITH ] [ OWNER [=] データベースの所有者 ]
            [ TEMPLATE [=] テンプレート名 ]
            [ ENCODING [=] エンコーディング ]
            [ LC_COLLATE [=] 照合順序 ]
            [ LC_CTYPE [=] lc_ctype ]
            [ TABLESPACE [=] テーブルスペース名 ] ]
            [ CONNECTION LIMIT [=] 最大接続数 ] ]
 
 db3=# create database db4 template=template0;
 CREATE DATABASE
 db3=# \c db4
 psql (8.4.13)
 データベース "db4" に接続しました。.
 db4=# \d
 リレーションがありません。
 db4=# \q

以上のことにより、template0を指定するとまっさらなデータベースが作成されることが確認できました。

#htmlinsertpcsp(db-btm.html,db-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS