Help us understand the problem. What is going on with this article?

Delphi / FireDAC から PostgreSQL12に接続

この記事は『 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
edb_download.png
なので、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/
 インストール手順が掲載されています確認します、(他のバージョン/プラットフォームの選択も可能です)
redhat.png
 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

<上のコマンドを1行実行した実際の画面は、こんな感じです>
Screenshot from 2019-12-09 13-00-34.png

 5.Install the client packages:(クライアントパッケージをインストール)

yum install postgresql12

<上のコマンドを1行実行した実際の画面は、こんな感じです>
yum_pg12.png
 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

<上のコマンド実行した実際の画面は、こんな感じです>
Screenshot from 2019-12-15 12-04-54.png

-------- 注) ロケール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

<上のコマンド実行した実際の画面は、こんな感じです>
Screenshot from 2019-12-15 12-13-40.png

 (これで、ユーザー postgres パスワード dbPasswd123 で testdb1 に接続します)
 (ユーザー postgres は、Firebirdの SYSDBA MS SQL Serverの sa のようなスーパーユーザーに当たります)

alter role postgres with password 'dbPasswd123';

PostgreSQLのGUIインストールだと、ここの処理に該当します。
08_pass2.png

(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 

pg_hbaconf1.png
今回は、192.168.24.0 サブネットマスク 255.255.255.0 で認証をmd5とするため
host all all 192.168.24.0/24 md5 
を追記して保存します、

pg_hbaconf2.png
geditの場合は、このままpostgresql.confも追加で編集ができます。
pg_hbaconf3.png
コメントの # を外して
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

ifconfig.png

 これで、このPostgreSQLサーバーに外部から 192.168.24.64 に、ユーザー postgres パスワード dbPasswd123 で接続可能となります。


ここからクライアント側の手順

注)pgAdmin4とPostgreSQL12(64bit)Windows版をインストールする手順を書きますが、開発用のとは別のマシンで、行ってもらったほうが、わかりやすいかもしれません、実行される場合は、手順を先にご覧になってご自身の環境でよい方法をお試しください。

(6) pgAdmin4をインストールして接続確認とDLLの取得
https://www.pgadmin.org/download/pgadmin-4-windows/
pgadmin4-3.png
最新をダウンロードしましょう、pgAdmin 4 は .16  などマイナーバージョンが頻繁にアッフデートされます。
pgAdmin 4 のバージョンとPostgreSQLのバージョン番号は合致していません、.15以降がたぶん PostgreSQL12に対応していたと思います。
pgadmin-4をインストールしたら、
C:\Program Files (x86)\pgAdmin 4\v4\runtime に dll があります、
pgadmin4-dll_1.png
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 から
20_bin2.png
を取得、pg_dumpなどを使用する場合は、一緒にコピーしてよいでしょう。
PostgreSQL12をインストールマシンからは、ローカル/外部ともに接続は可能になります。
 
(8) Delphiからの接続
 FireDACで接続
 取得したDLL を配置して、実行します。
この画面のサンプルコードとDLLは、こちらに置いておきます、
EXEも同梱していますので60MBほどありますが、ご興味のある方は、ダウンロードしてお試しください。
delphi10.png

(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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした