あるSEのつぶやき・改

ITやシステム開発などの技術に関する話題を、取り上げたりしています。

CentOS7にPostgreSQL9.6をインストールして.NET Core用の設定をする

はじめに

CentOS7に PostgreSQL をインストールするのなら、CentOS7のサポート対象の 9.2 か最新バージョンの 10.x になるのでしょうが、ちょっと Amazon RDS for PostgreSQL を使いたいと思っていたら、どちらもサポートされていないのですね。

Q: Amazon RDS for PostgreSQL でサポートされているデータベースバージョンはどれですか?

現在、Amazon RDS for PostgreSQL では、PostgreSQL 9.3、9.4、9.5、9.6 がサポートされています。サポート対象のマイナーバージョンについての情報は、Amazon RDS ユーザーガイドに記載されています。

https://aws.amazon.com/jp/rds/postgresql/faqs/

仕方ないので、Amazon RDS がサポートする最新バージョンである PostgreSQL 9.6 の環境を CentOS 7に構築して、.NET Core のデータベースを操作するコンソールアプリケーションが動作するようにします。

PostgreSQL 9.6のインストール

PostgreSQL 9.6 のインストールは、9.6 用のリポジトリをインストールしてから、PostgreSQL をインストールします。

$ sudo yum install -y https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-redhat96-9.6-3.noarch.rpm
$ sudo yum install -y postgresql96-server postgresql96-contrib postgresql96

インストールが完了したらバージョンを確認します。

$ psql --version
psql (PostgreSQL) 9.6.8

データベースを初期化します。

$ sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK

PostgreSQL を起動します。

$ sudo systemctl start postgresql-9.6.service

OS 起動時に自動的に起動するよう設定します。

$ sudo systemctl enable postgresql-9.6.service

PostgreSQLユーザー設定

PostgreSQL にアクセスするためのユーザー設定を行う必要があります。

.NET Core アプリケーションからアクセスするユーザーを postgres ユーザーだとすると、Linux ユーザーとしてのパスワードを設定する必要があります。

$ sudo passwd postgres

次に、データベースユーザーとしてのパスワードを設定します。

$ su - postgres
$ psql
psql (9.6.8)

postgres=# ALTER USER postgres with encrypted password 'password';

この設定を行ってから、次の PostgreSQL の設定を行わないとログインできなくなるかもしれないのでご注意ください。

PostgreSQLの設定

PostgreSQL を .NET Core アプリケーションからアクセス、また PostgreSQL のクライアントツールからアクセスできるよう設定を行います。

rootユーザに切り替え、pg_hba.conf という PostgreSQL の設定ファイルを修正します。これを行わないと、接続文字列を使用して .NET Core でアクセスできません。また、IP アドレスの設定部分(192.168.33.1/32)については、これを行わないとクライアントツールからアクセスができません。IPアドレスはご自身の環境に合わせてください。

$ su -
# cd /var/lib/pgsql/9.6/data
# vi pg_hba.conf

・修正前

# "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

・修正後

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             192.168.33.1/32         md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

pg_hba.confの修正が終わったら、次に postgresql.conf の修正を行います。

# vi postgresql.conf

外部からアクセスできるようにします。

・修正前

#listen_addresses = ''          # what IP address(es) to listen on;

・修正後

listen_addresses = '*'          # what IP address(es) to listen on;

PostgreSQL を再起動して設定を反映します。

# systemctl restart postgresql-9.6.service
# exit

この設定がうまく行われないと、以下のようなエラーが発生して頭を抱えることになります。💦

Npgsql.PostgresException (0x80004005): 28000: Ident authentication failed for user "postgres"

おわりに

PostgreSQL 9.6 をインストールし、 .NET Core アプリケーション用の設定を行いましたが、いかがだったでしょうか。

さらっと書いてみましたが、結構ハマりどころが多いので参考にしてみてください。

参考サイト