PostgreSQL/template0とtemplate1の違いについて
の編集
Top
/
PostgreSQL
/
template0とtemplate1の違いについて
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
PostgreSQL/template0とtemplate1の違いについて
#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)
タイムスタンプを変更しない
#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)
テキスト整形のルールを表示する