PostgreSQLをインストールした後、「postgresql95-setup initdb」コマンドによりデータベースクラスタを作成しました。(詳細は「PostgreSQLの起動・停止」を参照してください。)
データベースクラスタを作成したことで、template0、template1、postgresというデータベースが自動的に作成されます。
template0とtemplate1は文字通り、テンプレートとして機能するデータベースになります。例えば、ユーザーがデータベースを新規作成しようとすると、template1がテンプレートとして使用され、新規作成したデータベースはtemplate1の内容を引き継ぐことになります。
この仕組みにより、新規でデータベースを何個も作成する際に、共通の内容(例えば、テーブルや関数)を定義しておけば、それらの定義を引き継いで新しいデータベースが作成できるというわけです。
template0は、データベースクラスタ作成直後はtemplate1とまったく同じものとなります。template0は書き込みができないため、常に初期状態が保たれます。そのため、template1に対していろいろ手を加えていけば良い訳です。
また、template1の内容を引き継がせたくないデータベースを作成したいケースが出てきた場合は、template0を基にして新規作成すれば良いです。
postgresはデフォルトの接続先データベースとなります。そのため、データベースを指定しない場合は、「postgres」データベースに対して、テーブルなどを作成することになります。
ただし、「postgres」データベースは前述のとおりデフォルトのログイン先のデータベースとして使用されるものなので、ここにユーザーが使用するデータを格納することは推奨されません。
ユーザーの作成
早速、サンプルデータベースを作成してみましょう。
その前に新規でユーザーを作成してみます。初期状態では管理ユーザーである「postgres」ユーザーしか存在しません。これでは、セキュリティの観点で望ましくありません。そこでここでは新しく「posuser」という一般ユーザーを作成します。
まず、OSの「postgres」ユーザーにスイッチします。
# su - postgres -bash-4.2$
ユーザーを作成するには「createuser」コマンドを使用します。
-bash-4.2$ createuser posuser
続いて、今作成したユーザーを所有者として新規データベースを作成します。データベースを作成するには「createdb」コマンドを使用します。
-bash-4.2$ createdb -O posuser testdb
「-O」オプションでデータベースの所有者として「posuser」を指定しています。
最後に、データベースが正しく作成されたかどうかを確認してみましょう。確認するには「psql -l」コマンドを使用します。
-bash-4.2$ 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
testdb | posuser | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
(4 行)
最終行に「testdb」データベースが確認できます。
データベースへのログイン
では、今作成したデータベースへログインしてみましょう。データベースへのログインは「psql」コマンドの引数にデータベース名を指定することで行えます。
-bash-4.2$ psql testdb psql (9.5.2) "help" でヘルプを表示します. testdb=#
ログインに成功するとプロンプトが「testdb=#」となります。
ログアウトは「\q」もしくはCtrl+dで行えます。