この記事は『 Delphi Advent Calendar 2019』の16日目のエントリとなります。
###はじめに
PostgreSQL12用の外部接続用(オンプレ接続)の環境構築を行います。
サーバーOSは、CentOS7(64bit)、PostgreSQLは最新の12(64bit)を yumでインストール します。
(残念ながら、Linux用GUIインストーラーは10でリリースがストップされたようで、Windows版インストーラーも32bitは、10で同様に、ストップされています。
https://www.enterprisedb.com/ja/downloads/postgres-postgresql-downloads
なので、12用の 32bit dll は pgAdmin4から取得します、
また 12用の 64bit dll は Windows10にインストールしたPostgreSQL12から取得するようにします、
クライアントはWindows10 + Delphi10.2で実行しました。
ローカルプライベートアドレス は、192.168.24.xxx で書き進めます、使用されるアドレスが異なる場合(クラウドサービスなどで試す場合、エンドポイントとなります)は、ご自身で構築できるアドレスクラスで読み替えてお試しいただければと思います。
#作業手順
###サーバー側
(1) CentOS7をローカル機にインストールします
(CUIベースのインストールでもオッケーですが、ローカル機の場合、gnome GUIでインストールもらうと作業が楽です)
(2) PostgreSQL12のインストール
ここに、 https://www.postgresql.org/download/linux/redhat/
インストール手順が掲載されています確認します、(他のバージョン/プラットフォームの選択も可能です)
1.Select version:(バージョン選択:)
12
2.Select platform:(プラットフォーム選択:)
RedHat Enterprise,CentOS,Scientific or Oracle version 7
3.Select architecture:(アーキテクチャ選択:12はx86_64のみです)
x86_64
4.Install the repository RPM:(RPMのリポジトリをインストール)<この行以下はコマンド入力します>
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
5.Install the client packages:(クライアントパッケージをインストール)
yum install postgresql12
<上のコマンドを1行実行した実際の画面は、こんな感じです>
6.Optionally install the server packages:(サーバーパッケージをインストール)
yum install postgresql12-server
7.Optionally initialize the database and enable automatic start:(データベースを初期化し、自動起動を有効)
/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12
-------- 注) ロケールC を選択したい場合は --------
PGSETUP_INITDB_OPTIONS="-E UTF8 --locale=C" /usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12
---------------- 注) とします ----------------
(3) PostgreSQLのデータベースにアクセスする、バスワードを設定します
su postgres
psql
\l
alter role postgres with password 'dbPasswd123';
create database testdb1;
\q
exit
(これで、ユーザー postgres パスワード dbPasswd123 で testdb1 に接続します)
(ユーザー postgres は、Firebirdの SYSDBA MS SQL Serverの sa のようなスーパーユーザーに当たります)
alter role postgres with password 'dbPasswd123';
が
PostgreSQLのGUIインストールだと、ここの処理に該当します。
(4) PostgreSQLの外部からの接続許可
pg_hba.conf
postgresql.conf の2つファイルをエディタで編集します。
CUI は vi /var/lib/pgsql/12/data/pg_hba.conf となりますが、gnome GUIの場合
は gedit で、Windowsのメモ帳のような編集が可能です。
gedit /var/lib/pgsql/12/data/pg_hba.conf
今回は、192.168.24.0 サブネットマスク 255.255.255.0 で認証をmd5とするため
host all all 192.168.24.0/24 md5
を追記して保存します、
geditの場合は、このままpostgresql.confも追加で編集ができます。
コメントの # を外して
listen_address='*'
port=5432
として保存します。
(5) OSのファイアウォール設定
1. Firewallの設定 5432 port をopenします
firewall-cmd --add-port=5432/tcp --zone=public --permanent
2. Firewall を再起動
firewall-cmd --reload
3. PostgreSQL を再起動
systemctl restart postgresql-12
4.ipアドレスを確認する
ifconfig
これで、このPostgreSQLサーバーに外部から 192.168.24.64 に、ユーザー postgres パスワード dbPasswd123 で接続可能となります。
###ここからクライアント側の手順
注)pgAdmin4とPostgreSQL12(64bit)Windows版をインストールする手順を書きますが、開発用のとは別のマシンで、行ってもらったほうが、わかりやすいかもしれません、実行される場合は、手順を先にご覧になってご自身の環境でよい方法をお試しください。
(6) pgAdmin4をインストールして接続確認とDLLの取得
https://www.pgadmin.org/download/pgadmin-4-windows/
最新をダウンロードしましょう、pgAdmin 4 は .16 などマイナーバージョンが頻繁にアッフデートされます。
pgAdmin 4 のバージョンとPostgreSQLのバージョン番号は合致していません、.15以降がたぶん PostgreSQL12に対応していたと思います。
pgadmin-4をインストールしたら、
C:\Program Files (x86)\pgAdmin 4\v4\runtime に dll があります、
pg_dumpなどを使用する場合は、一緒にコピーします。(v16では、v15に゜あった SSL用?の libeay32.dll / ssleay32.dllが入ってないので。必要な方はv15から取得してください)
libpq.dll は 32bit / 64bit ともに同名ですが、こちらは、32bit です。
確認方法の参考: EXEやDLLが32bitなのか64ビットなのか確認する方法としては、apec というツールを使用できます
pgAdmin4で接続できない場合は、上記のいずれかの設定が間違っている可能性があります、FireDACからも接続は不可となります。
(7) PostgreSQL12をインストールして、64bit版dllを取得
C:\Program Files\PostgreSQL\12\bin から
を取得、pg_dumpなどを使用する場合は、一緒にコピーしてよいでしょう。
PostgreSQL12をインストールマシンからは、ローカル/外部ともに接続は可能になります。
(8) Delphiからの接続
FireDACで接続
取得したDLL を配置して、実行します。
この画面のサンプルコードとDLLは、こちらに置いておきます、
EXEも同梱していますので60MBほどありますが、ご興味のある方は、ダウンロードしてお試しください。
(9) まとめ
PostgreSQL11以降、32bit版のWindowsインストーラーがなくなったので、新しい32bitのDLLの入手方法が不明で、自分の困ったことと、解決方法をまとめてみました。(解決方法としては、もっとスマートな方法も存在するのかもしれません)
今回の内容がPostgreSQLに偏りましたが、環境構築できないと、Delphiからは試すことはできませんので、PostgreSQLの入門を試みる方の実行の参考になれば幸いです。
(12/08時点で、サイトhttps://www.postgresql.org/download/linux/redhat/の手順では、エラーとなりましたので、CentOS7で行いました)
CentOS8用はサイトの手順が少し追加もしくは、変更が必要なようで、
ここにメモしました
PostgreSQLをインストールするのに抵抗のある方は、ポータブル版というのもありますが、現時点ではv10です
PostgeSQLの情報や質問は、slackのpostgresql-jpの beginners から始めることができます。
https://app.slack.com/client/T0AM3AQAH