WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

PostgreSQLのインストールと基本的な設定

      2012/12/10

PostgreSQLのインストール

# yum -y install postgresql-server

PostgreSQLのインストールと同時に postgres というユーザが作成されます。PostgreSQLの操作は、基本的にこのpostgresユーザで行います。
また、yumでPostgreSQLをインストールすると、 postgresユーザの環境変数も自動的に設定されます。

PostgreSQLの初期設定

データベースの初期化

データベースの初期化処理によって、PostgreSQL の新規データベースクラスタを作成します。

物理的なデータ本体や設定ファイルなど、データベースシステムの全データを保存する領域を、PostgreSQLでは`データベースクラスタ’と呼びます。
データベースクラスタは、データベースシステムの初期化時に指定したディレクトリに作られます。

データベースクラスタとは(このページにある図も大変参考になりました)

新規データベースクラスタを作成するにはinitdbコマンドを実行しますが、実行する前にpostgresユーザに切り替えます。理由は下記の通りです。

initdb は、サーバプロセスの所有者によって実行されなければなりません。initdb によって作成されるファイルやディレクトリにサーバがアクセスする必要があるからです。サーバをroot として実行することはできませんので、root で initdb を実行してはいけません。(実際に行なったとしても拒絶されます。)

データベースクラスタが格納されるディレクトリは、環境変数PGDATAで指定されている場所となりますが、initdb実行時に-Dオプションで指定することも出来ます。

# su - postgres
[postgres] echo $PGDATA
/var/lib/pgsql/data
[postgres] initdb --encoding=UTF8 --no-locale

起動設定

データベースクラスタの作成が完了したらPostgreSQLを起動します。
OS起動時にPostgreSQLも自動起動させる場合はchkconfigで設定しておきます。

# /etc/init.d/postgresql start
# chkconfig postgresql on

ユーザの作成

PostgreSQLのユーザを作成する際は、PostgreSQLのスーパーユーザでログインして createuser コマンドを実行します。
デフォルトではPostgreSQLのスーパーユーザは postgres です。前述したように、postgresは、PostgreSQLをインストールしたときに生成されるユーザです。

# su - postgres
[postgres] createuser
Enter name of role to add: username    ※作成するユーザ名を入力
Shall the new role be a superuser? (y/n) n    ※作成するユーザにスーパーユーザ権限を与えるか
Shall the new role be allowed to create databases? (y/n) y    ※作成するユーザにデータベースを作成する権限を与えるか
Shall the new role be allowed to create more new roles? (y/n) n    ※他に権限を付加するかどうか?よくわからんw
CREATE ROLE

また、どのユーザがスーパーユーザ権限を所持しているかは、psqlという管理ツールにログインして以下のコマンドを入力することで調べることができます。

# su - postgres
[postgres] psql
postgres=# select usename, usesuper from pg_user;
 usename  | usesuper 
----------+----------
 postgres | t
 enduser  | f
(2 rows)
postgres=# \q    ※psql を終了するときは \q を入力してエンターを押します

データベースの作成

データベースを作成するには、データベース作成権限を有しているユーザでログインし、createdbコマンドを実行します。
“CREATE DATABASE”と表示されると成功です。

引数にデータベース名を指定しない場合はログインしているユーザ名でデータベースが作成されます。
また、-oオプションでデータベースの所有者を指定して作成することができます。

$ createdb データベース名
$ createdb データベース名 -o ユーザ名    ※データベースの所有者を指定して作成する
$ createdb    ※ログインしているユーザ名でデータベースを作成

データベースを削除する場合は下記コマンドを実行します。
“DROP DATABASE”と表示されると成功です。

$ dropdb データベース名

 - PostgreSQL , ,