はじめに
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 ユーザーガイドに記載されています。
仕方ないので、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 アプリケーション用の設定を行いましたが、いかがだったでしょうか。
さらっと書いてみましたが、結構ハマりどころが多いので参考にしてみてください。