PostgreSQL | データベース | データベースの作成(CREATE DATABASE)

CREATE DATABASE コマンドを使用して PostgreSQL のデータベースを新しく作成する方法について説明する。

新しいデータベースを作成する

データベースを作成するには CREATE DATABASE コマンドを使用する。形式は次のとおりである。

CREATE DATABASE name
    [ [ WITH ] [ OWNER [=] user_name ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ]
           [ LC_COLLATE [=] lc_collate ]
           [ LC_CTYPE [=] lc_ctype ]
           [ TABLESPACE [=] tablespace_name ]
           [ ALLOW_CONNECTIONS [=] allowconn ]
           [ CONNECTION LIMIT [=] connlimit ]
           [ IS_TEMPLATE [=] istemplate ] ]

複数のオプションが用意されているが、基本となる構文は次のとおりである。

CREATE DATABASE name

データベース名 (name) を指定して新しいデータベースを作成する。明示的に指定しない場合、作成済みのテンプレートデータベース template1 をコピーしてデータベースが作成される。

データベースを作成するには、コマンドを実行するロールがスーパーユーザーであるか、CREATEDB 権限を持っている必要がある。

それでは実際に試してみる。psql で次のように実行する。

C:\Users\kimkc>psql -U postgres
postgres 사용자의 암호:
psql (12.2)
도움말을 보려면 "help"를 입력하십시오.

postgres=# create database devkuma;
CREATE DATABASE
postgres=#

データベースが作成された。

次に、作成されたデータベースを確認してみる。

postgres=# \l
                                      데이터베이스 목록
   이름    |  소유주  | 인코딩 |     Collate      |      Ctype       |      액세스 권한
-----------+----------+--------+------------------+------------------+-----------------------
 devkuma   | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |                        <<<< 新規作成
 postgres  | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 sample    | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 template0 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
 template1 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
(5개 행)


postgres=#

文字セットと照合順序を指定してデータベースを作成する

データベースを作成するとき、データベースで使用する文字セット (ENCODING)、文字列の照合順序 (LC_COLLATE)、文字分類 (LC_CTYPE) は、明示的に指定しない場合はデフォルト値が使用される。ただし、これらの設定は一度データベースを作成すると変更できないため注意が必要である。

明示的に文字セットを指定してデータベースを作成する場合は、次の形式を使用する。

CREATE DATABASE name
  ENCODING encoding
  LC_COLLATE lc_collate
  LC_CTYPE lc_ctype

また、ロケール設定 (LC_COLLATELC_CTYPE) が、デフォルトで使用されるテンプレート template1 のロケール設定と異なる場合は、テンプレートとして template0 を明示的に使用する必要がある。

CREATE DATABASE name
  TEMPLATE template0
  ENCODING encoding
  LC_COLLATE lc_collate
  LC_CTYPE lc_ctype

それでは実際に試してみる。今回は文字セットに UTF8、文字列の照合順序と文字分類に Korean_Korea.949 を設定してデータベースを作成する。

postgres=# create database devkuma2
postgres-#   template template0
postgres-#   encoding UTF8
postgres-#   lc_collate 'Korean_Korea.949'
postgres-#   lc_ctype 'Korean_Korea.949';
CREATE DATABASE
postgres=#	

文字セット、文字列の照合順序、文字分類を指定して新しいデータベースを作成した。

次に、作成されたデータベースを一覧表示してみる。

postgres=# \l
                                      데이터베이스 목록
   이름    |  소유주  | 인코딩 |     Collate      |      Ctype       |      액세스 권한
-----------+----------+--------+------------------+------------------+-----------------------
 devkuma   | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 devkuma2  | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |                        <<< 新規作成
 postgres  | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 sample    | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 template0 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
 template1 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
(6개 행)


postgres=#

作成した devkuma2 データベースが存在し、文字セット、文字列の照合順序、文字分類が指定されていることを確認できる。

ここまで、CREATE DATABASE コマンドを使用してデータベースを作成する方法について説明した。