Linuxを日常的に使う実験ブログ

CentOS 7にPostgreSQLを導入する

 2018-12-20

 2018-12-20

 CentOS

こんにちは。今回のテーマは「CentOS 7にPostgreSQLを導入する」です。最近はウェブサービスを公開したこともあり、サーバーサイドの設定をする機会が多くありました。MySQLを使うことが多かったのですが、PostgreSQLを導入する機会がありましたので、備忘録としてまとめておきます。 [adsense02] 【目次】 PostgreSQLのインストール 初期設定 PostgreSQLの起動

PostgreSQLのインストール

以下コマンドでインストールします。

$ sudo yum install postgresql postgresql-server

上記コマンドで以下のパッケージがインストールされます。

  1. postgresql-server
  2. postgresql-lib
  3. postgresql

初期設定

初期設定をして/var/lib/postgres/data/ディレクトリ以降にファイルを生成します。この設定ファイルがないとPostgreSQLが起動しません。また、この設定はpostgresユーザーで行うためにパスワードの設定などを行っていきます。

postgresユーザーのパスワード設定

以下コマンドでpostgresユーザーのパスワードを設定します。

$ sudo passwd postgres

初期設定

postgresユーザーとなり初期設定を行います。

$ su postgres $ postgresql-setup initdb

余談ですが、initdbコマンドは使わないのか?と思われたと思いますが、CentOSでyumでインストールするとshellスクリプトで書かれたpostgresql-setupスクリプトがインストールされます。今回はこのスクリプトを用いて設定します。尚、initdbコマンドを用いる場合は以下のコマンドをpostgresユーザーで実行します。

[postgres] $ initdb —locale $LANG -E UTF8 -D ‘/var/lib/postgres/data’

認証方式を変更する場合

インストールした際の初期設定では認証がpeer方式となっておりシステムのユーザーとPostgreSQLのユーザーの一致が認証時に確認されます。postgresユーザー以外はパスワード認証の方が便利なので方式を変更します。peer方式で困らない方は変更する必要ありません。

$ su postgres [postgres] $ vim /var/lib/pgsql/data/pg_hba.conf

以下のように変更します。-記号が削除、+記号が追記を表しています。

# "local" is for Unix domain socket connections only
- local   all             all                     peer
+ local   all             postgres                peer
+ local   all             all                     md5

これでpostgresユーザーのみpeerログイン、その他のユーザーはパスワード認証となります。

localhost以外からもアクセスを受け付けるようにする場合

PostgreSQLは初期設定ではlocalhostからしかアクセスできないようになっています。もし他のホストからのアクセスを可能としたい場合は以下の設定を行います。

$ su postgres [postgres] $ vim /var/lib/pgsql/data/postgresql.conf

以下のように変更します。-記号が削除、+記号が追記を表しています。

- #listen\_addresses = 'localhost'
+ listen\_addresses = '\*'

PostgreSQLの起動

設定が完了したのでPostgreSQLを起動していきましょう。CentOS 7はサービス管理にsystemdを用いているので以下コマンドで起動します。

$ sudo systemctl start postgresql

システム起動時に自動でPostgreSQLを立ち上げたい場合は以下のコマンドも追加しておきます。

$ sudo systemctl enable postgresql

以下のコマンドでPostgreSQLのpostgresデータベースにアクセスできればOKです。(まだROLE作成前なのでpostgresユーザーでログインします。)

$ su postgres [postgres] $ psql postgres

最後に

Postgresqlの導入はDebian系のディストロだとセットアップから起動まで自動で行ってくれるのでAPTコマンドにお任せしてしまうのですが、CentOSの場合は手動でのセットアップも自分で行う必要があります。大した手間ではないですが、MySQLと異なる点も多いため、一度まとめておこうと思いました。この記事が何かのお役に立てば幸いです。 【関連記事】 LinuxにphpMyAdminをインストールする方法 [adsense]