(2011.5.29) ページを分離、加筆。
PostgreSQLサーバの初期設定について。
(2011.5.29)
PostgreSQLのサーバプログラム (postmasterデーモン) は、独立した複数のデータベースを同時に管理できます。一つのディレクトリ以下に、実体としてのデータが保存されます。サーバが管理する, データベースの集まりを「データベースクラスタ」といいます。
postmasterデーモンを動かすためのUNIXユーザを作ります。通常, "postgres" という名前にします。
Linuxディストリビューション提供のバイナリパッケージを使う場合、"postgres" ユーザは、あらかじめ登録されています。自分で何かする必要はありません。
また、データベースの保存先は、特に変更しない限り、/var/lib/pgsql/data になっています。
ソースコードから自分でインストールした場合は、rootになって、次のようにします。例えば、/var/lib/postgres/data をデータベースの中身の保存 (格納) 先にしてみます。
# mkdir /var/lib/postgres # mkdir /var/lib/postgres/data # /usr/sbin/useradd postgres -d /var/lib/postgres # chown -R postgres /var/lib/postgres
ディレクトリの所有者をpostgres UNIXユーザにします。
(2011.5.29)
一つのデータベースをどうこうするのでなく、サーバをまっさらにするのがinitdbコマンドです。実行するのは、PostgreSQL の非互換なバージョンアップのときなどだけ、です。
Fedora Linuxでは、ヘルパスクリプトが用意されているので、rootユーザで、次のようにします。
# /etc/rc.d/init.d/postgresql initdb
(2011.12 ここから)
Fedora 16 Linux では SysVスタイルのinit script が廃止され、ほぼ systemd に移行しました。/etc/rc.d/init.d/postgresql スクリプトの代わりに postgresql-setup コマンドを使います。
initdb は次のようにします。
# postgresql-setup initdb
(2011.12 ここまで)
ソースコードからインストールした場合などは、initdb コマンドを使います。postgresユーザになって、例えば、次のようにします。
# su - postgres $ export PGDATA=/var/lib/postgres/data $ /usr/local/pgsql/bin/initdb --encoding=EUC-JP --no-locale
initdbコマンドは、環境変数PGDATAで指定されたディレクトリをデータベースクラスタとして初期化する。さらに, initdbコマンドは、内部で、initdbコマンドを実行したUNIXユーザ (postgres) をデータベーススーパーユーザとして登録する。
データベースの文字コードは、日本語EUC(EUC-JP)にしておきます。localeサポートは害が大きいので、切っておきます。 -- (2007.2) 今ならUTF-8にすべき。
データベースクラスタの初期化に成功すると、次のようなメッセージが表示されます。
Success. You can now start the database server using: /usr/local/pgsql/bin/postmaster -D /var/lib/postgres/data or /usr/local/pgsql/bin/pg_ctl -D /var/lib/postgres/data -l logfile start
サーバの設定は, /var/lib/pgsql/data/postgresql.conf
ファイルを編集します。例えば、bindするIPアドレスを変更する場合は、listen_addresses を '*' に変更する, など。
Fedora 15 Linux (PostgreSQL 9.0) のpostgresql.confの初期設定は、次のようになっています。
# - Connection Settings - #listen_addresses = 'localhost' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost', '*' = all # (change requires restart) #port = 5432 # (change requires restart) max_connections = 100 # (change requires restart)
初期設定では、TCP/IP経由は有効になってないので、port = のコメントアウトを外してやります。
(2014.3)
Fedora 20では, ポート番号については, postgresql.conf
ではなく, systemd の設定ファイルである /usr/lib/systemd/system/postgresql.service ファイルで設定します。
次のようになっている箇所を修正します。
# Port number for server to listen on Environment=PGPORT=5432 # Location of database directory Environment=PGDATA=/var/lib/pgsql/data
(2014.3 ここまで)
pgAdmin IIIのようなGUIの管理ツールを使う場合, TCP/IP経由で, postgresユーザでデータベースサーバに接続できなければなりません。
"pg_hba.conf" 設定ファイルが次のようになっている前提, すなわちpostgresユーザがパスワードなしで接続できる状態で, コマンドラインからパスワードを変更します。
(pg_hba.confファイルについては PostgreSQLでの認証の設定 を参照。)
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 ident
あらかじめ, systemctl コマンドで postgresql サーバを開始しておく必要があります。
いったんrootになってから, さらにpostgres UNIXユーザになります。
$ su # su postgres $ psql template1 psql (9.2.2) "help" でヘルプを表示します. template1=# ALTER USER postgres WITH PASSWORD 'パスワード'; ALTER ROLE template1=# \q
(2014.3)
対話形式でも, パスワードを変更できます。
template1=# \password Enter new password: パスワードを入力 Enter it again: 同じパスワードを再度入力
(2014.3 ここまで)