5.3 データベースの作成

以下を確認します。

  • createdbコマンド/dropdbコマンド
  • CREATE DATABASE文/DROP DATABASE文

データベースの作成と削除

所有者がsatoユーザのデータベースを2種類の方法で作成します。

[postgres@host1 ~]$ createdb -O sato newdb1
[postgres@host1 ~]$ psql newdb1
psql (13.14)
"help"でヘルプを表示します。

newdb1=# SET ROLE sato;
SET
newdb1=> SELECT CURRENT_USER, SESSION_USER;
 current_user | session_user
--------------+--------------
 sato         | postgres
(1 行)

newdb1=> CREATE DATABASE newdb2;
CREATE DATABASE
newdb1=> \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
 newdb1    | sato     | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 newdb2    | sato     | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 ossdb     | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 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
(6 行)

newdb1=> CREATE TABLE test1 (id INT);
CREATE TABLE
newdb1=> \d
           リレーション一覧
 スキーマ | 名前  |  タイプ  | 所有者
----------+-------+----------+--------
 public   | test1 | テーブル | sato
(1 行)

newdb1=> DROP DATABASE newdb2;
DROP DATABASE
newdb1=> DROP DATABASE newdb1; --エラー
ERROR:  現在オープンしているデータベースを削除できません
newdb1=> \q
[postgres@host1 ~]$ dropdb -U postgres -i newdb1
データベース"newdb1"は永久に削除されます。
実行しますか? (y/n)y
[postgres@host1 ~]$

最初にpostgresユーザがcreatedbコマンドでsatoユーザのnewdb1データベースを作成し、次にsatoユーザがCREATE DATABASE文でnewdb2データベースを作成します。psqlの\lコマンドで、2つのデータベースの所有者はsatoユーザであることが確認できます。
次にsatoユーザがnewdb1にtest1表を作成しています。その後、DROP DATABASE文でnewdb2を削除しています。現在newdb1に接続中のため、newdb1は削除できません。psqlを終了すればnewdb1も削除できます。