Contents
ダウンロード&インストール
標準リポジトリで配布されているPostgreSQLはバージョンが古いので、PostgreSQLのパッケージ配布サイト http://yum.postgresql.org/rpmchart.php から最新版をインストールする。
1 2 | # rpm -i http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm # yum -y install postgresql93 postgresql93-contrib postgresql93-devel postgresql93-libs postgresql93-server |
DB初期化、起動
1 2 | # service postgresql-9.3 initdb --encoding=UTF8 --no-locale # service postgresql-9.3 start |
Version 9.4
2014/12/18にPostgreSQL 9.4がリリースされた。
ダウンロード~起動設定は以下の通り。
1 2 3 4 5 | yum -y install http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-1.noarch.rpm yum -y install postgresql94-server postgresql94-contrib service postgresql-9.4 initdb --encoding=UTF-8 --no-locale service postgresql-9.4 start chkconfig postgresql-9.4 on |
…で良いはずなのだが、9.3を消してインストールしたせいなのか「initdb: ロケール名”–no-locale”は無効です。」とログにメッセージが出力されinitdbに失敗する。ちなみに–no-localeの前に–encoding=UTF8と書くとUTF8は無効とか出力されたので、引数が何だろうと上手く渡せていないようだ。
仕方が無いので/var/lib/pgsql/9.4/data配下を消してからpostgresユーザになり直接initdbを実行した。
1 2 | su - postgres /usr/pgsql-9.4/bin/initdb --no-locale --encoding=UTF8 |
その後の「service postgresql-9.4 start」は正常に実行されたので、リブートした後の起動も大丈夫だろう。
/etc/init.d/postgresql-9.4 のシェルをinitdbが正常に動くよう書き換えても良いが、一度しか使わないし、別なマシンに新たにインストールした時はまたシェルを書き換える必要があるので、インストールしているマシンのシェルを書き換えて保存しても意味が無い。上記の通りinitdbはserviceコマンドを使わずにやるのが良いだろう。
パスワード設定
1 2 | # su - postgres $ psql |
1 2 | alter user postgres with password 'パスワード'; \q |
1 | $ exit |
初期設定
postgresql.confの設定
リモートから接続する場合はpostgresql.confを設定する。
1 2 | # cd ~postgres/9.3/data/ # vi postgresql.conf |
#------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - #listen_addresses = 'localhost' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all
外部のサーバからアクセスする(WEBサーバとDBサーバが別になっておりWEBのプログラムからDBアクセスしたり、クライアントのDBツールを使ったりするなど)場合、「#listen_addresses = ‘localhost’」 の#を外しlocalhostを*に変更する。
なお、NICが複数刺してありどれから受け付けるのか指定したい場合は、*ではなくそのNICのIPアドレスを指定する。
pg_hba.confの設定
pg_hba.confにて認証の定義をする。
1 | # vi pg_hba.conf |
# 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
他のサーバから接続する場合は、「host all all 192.168.1.1/24 md5」 等を追加する。
ident:クライアントOSのユーザ名と同じDBのユーザ名を使う
これらOSのユーザ名とDBのユーザ名のマッピングを変更したい場合はpg_ident.confで設定する。
md5:Postgresのパスワード認証を行う。passwordも使えるが暗号化されないのでSSLの暗号化と併せて使用すべきであり、通常は利点がないのでパスワード認証を行うならmd5が妥当だろう。
また、WEBプログラムからDBアクセスするなどといった形が多くログイン認証を使う事は少ないので、デフォルトで設定されているpeer/identはmd5に書き換えて、Postgresの認証を使った方が良いだろう。
サービス登録
1 | # chkconfig postgresql-9.3 on |
備考
ユーザ作成
以下のどちらでもデフォルトでパスワードを暗号化する設定になっている。デフォルトを変更するにはpostgresql.confのpassword_encryptionにonまたはoffを設定する。
コマンドラインでユーザ作成
スーパーユーザのユーザを作成する
1 | # createuser -s [ユーザ名] -P -U postgres |
※パスワードを三回入力するが、最初のパスワード入力は新しいユーザに設定するパスワード、二度目のパスワード入力は確認の為にもう一度入力し、三度目に入力するパスワードは接続ユーザ(この例ではpostgres)のパスワード。
SQLでユーザ作成
スーパーユーザのユーザを作成する
1 | CREATE USER [ユーザ名] WITH PASSWORD 'パスワード' CREATEUSER; |
※CREATEUSERロールを付与する事によりスーパーユーザになる。
パスワード変更
1 | ALTER ROLE [ユーザ名] WITH PASSWORD 'パスワード'; |