hello foo bar Saba note | CentOS7にPostgreSQLをインストール&セッティング

CentOS7にPostgreSQLをインストール&セッティング

2018.10.26 (金)

Postgresqlの最新をインストールします。
基本はここから最新を探してくる。
PostgreSQL RPM Building Project – Repository Packages

リポジトリの登録

CentOS 7 – x86_64をインストールします。

# yum -y install https://yum.postgresql.org/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm

インストール

# yum -y install postgresql11-server postgresql11-devel postgresql11-contrib

バージョン確認

# psql --version
psql (PostgreSQL) 11.1

データベースの初期化

# /usr/pgsql-11/bin/postgresql-11-setup initdb

データベースの起動

# systemctl start postgresql-11.service

それぞれの起動コマンドはこれ。

# systemctl start postgresql-11.service ← 起動
# systemctl status postgresql-11.service ← ステータス確認
# systemctl restart postgresql-11.service ← 再起動
# systemctl stop postgresql-11.service ← 停止

自動起動の設定

自動起動

root@host # systemctl enable postgresql-11.service

確認

root@host # systemctl is-enabled postgresql-11.service
enabled

自動起動解除の場合

root@host # systemctl disable postgresql-11.service

ログインのテスト

root@host # su - postgres
postgres@host $ psql
psql (9.2.24, サーバー 11.0)
注意: psql バージョン 9.2, サーバーバージョン 11.0.
         psql の機能の中で、動作しないものがあるかもしれません。
"help" でヘルプを表示します.

postgres=#

抜けるときは\qです。

初期設定

まずは開発環境想定で接続できる最低限の条件を整えてゆきます。

  • /var/lib/pgsql/11/data/postgresql.conf
  • /var/lib/pgsql/11/data/pg_hba.conf

postgresql.confの設定

# cd /var/lib/pgsql/11/data/
# cp -p postgresql.conf postgresql.conf.org
# vi postgresql.conf

設定箇所はlistenするネットワークとportの設定です。

[59行目あたり]
#listen_addresses = 'localhost'  # what IP address(es) to listen on;
↓
listen_addresses = '*'          # what IP address(es) to listen on;

すべてのホストがlistenできるようにしておきます。localhostのみの設定しか想定していない場合はそのままでも大丈夫です。

[63行目あたり]
#port = 5432      # (change requires restart)
↓ コメント外す
port = 5432       # (change requires restart)

これだけでだいたいOK。

pg_hba.confの設定

# cd /var/lib/pgsql/11/data/
# cp -p pg_hba.conf pg_hba.conf.org
# vi pg_hba.conf

やたらとコメントがたくさんあるのですが、必要な項目は以下のみ。
全部削除ちゃって3行だけにしちゃう方がいいかもです。

# PostgreSQL Client Authentication Configuration File
# ===================================================
local all all              trust
host  all all 127.0.0.1/32 trust
host  all all ::1/128      trust

ここまででpostgresqlを再起動すればOKです。

# systemctl restart postgresql-11.service

また、PostgresqlがMySQLと決定的に違うのがユーザーの管理方法です。こんな感じだろと思ってやっていたらほとんど駄目でした。しっかりマニュアル読んだほうが吉。

パスワード認証でログイン

正直peerとかtrustとかidentとか、ほんとやめて!って感じなのでパスワードに認証にします。LinuxOSのユーザーとかと結びつけたら駄目。ほんと管理が大変。そもそもOSにログインされた時点でセキュリティー的にアウトなわけですから。
まずスーパーユーザーのpostgresにパスワードを設定します。デフォルトの設定がpostgresというOSのユーザーからコマンドが実行できるようになっているので、suしてからpsqlコマンドを実行します。

postgres@host $ psql -U postgres -c "ALTER ROLE postgres WITH PASSWORD 'foobar'"
ALTER ROLE

ALTER ROLEが出たら成功です。
次にpg_hba.confの設定の変更します。

# PostgreSQL Client Authentication Configuration File
# ===================================================
local all all              md5
host  all all 127.0.0.1/32 md5
host  all all ::1/128      md5

md5にするとパスワード認証になります。postgresの再起動します。
今度はrootとかOSの適当なユーザーでパスワード認証でログインできるようになります。

root@host # psql -U postgres -h 127.0.0.1
ユーザ postgres のパスワード:

今度はパスワードプロンプトが出てくるので設定したパスワードを入力してログインします。
以降はMySQLみたいな扱いでいろいろできるようになります。これやっておかないとadminerとかの設定も面倒くさいです。(私のような弱小エンジニアには。)
ちなみにPostgresはデータベースがないユーザーはログインできません。(スーパーユーザー以外)

PHPの設定

postgresqlのphpモジュールをインストールします。

# yum -y install --enablerepo=remi-php72 php-pgsql

一応確認しておきます。

# php -m | grep pdo_pgsql
pdo_pgsql

これでApacheの再起動をしておけばOKかと思います。たぶん。

PHPのpdoから接続

PHPからなのでとりあえずユーザーはApacheにしておく。

<?php

$dsn = 'pgsql:dbname=sample_db host=localhost port=5432';
$user = 'postgres';
$pass = 'foobar';

try {
  $pdo = new PDO($dsn, $user, $pass);
  echo "PostgresSQL connect OK!\n";
} catch (PDOException $e) {
  $connect = false;
  exit('Database connection failure ' .$e->getMessage());
}

echo "That's all! \n";

これで接続できればとりあえずOK。
pdo経由なので、その他のフレームワークも大丈夫だと思われます。
““


CentOS7にPostgreSQLを導入&初期設定をおこなう
CentOS7にPostgreSQLを構築する方法
CentOS7.3にPostgreSQL9.6.3をインストールしてみた
PostgreSQLへの接続