Windows10 Proの端末に仮想サーバー(CentOS7)を立てて、Postgres10をインストールし、Windows側のMicrosoft AccessとODBC接続でリンクテーブルができる検証環境を作ることがあったのですが、初見のことばかりでしたので、備忘として書き残しておきます。
#筆者のスペック
CentOS 「はじめまして。Unixさんのご親戚なんですね…。まぁ、お奇麗なUIで…。」
PostgreSQL 「はじめまして。フリーでSQLサーバーをされているなんて、ご立派なんですねぇ…。」
ODBC 「生きとったんか!ワレ!!10何年ぶりかのぅ…。元気してたか?」
#設定作業
各設定については、以下の記事を主に参照しました。
- Hyper-Vの仮想マシン新規作成手順
- Hyper-Vの仮想マシンにCentOS7をインストール
- CentOSへのPostgreSQLのインストールと初期設定
- PostgreSQL 10 を CentOS 7 に yum インストールする手順
CentOS/Postgresの記事は少なくないのですが、バージョンによってディレクトリ構成が異なったり、コマンドが使用できなくなっていたりで、情報を見つけても即時に使えないこともあって、そのあたりが不便でした。
また、Hyper-Vはリモートデスクトップのようにホスト⇔ゲストでクリップボード貼り付けやファイル交換ができないため、CentOSを起動した後の作業はTeraTermで行いました。(PostgreSQLの設定文書を修正するときは、CentOSのメモ帳で行うほうが快適でしたので、Hyper-V経由で作業しました。)
#ODBC接続
環境構築後にODBC接続をしましたが、接続はできませんでした。
ODBCのエラーログを見ても、接続が切られました…と英語で書いているだけで役に立たなくて困っていたのですが、Windowsでポートが開いているか確認するの記事から、PowerShellのTest-NetConnectionコマンドを利用して、CentOSのポート状況を確認して、PostgreSQLで使用しているポートが閉じた状態であることを確認。CentOS側の問題で接続できないことが切り分けできて、ポートの開放を行いました。
ポートを解除した後も、IPアドレスが正しくない、ident認証が行われていない…などのエラーが続き、そのたびに原因を調査したのですが…。結論から言えば、PostgreSQLの設定文書(postgresql.conf/pg_hba.conf)をカスタマイズしていなかったことが原因でした。接続ができるようになってから見返すと、CentOS7にPostgreSQLを構築する方法 の設定どおりにしておけば、大丈夫なはずです。
私の場合は、pg_hba.confで赤枠の部分(ident)を修正することに気付かないで時間がかかりました。
ident認証をするためにはIdentサーバーを設置しておかないといけないですが、検証環境に設置していません。そのため、認証サーバーを必要としない md5 に変更したら、接続できるようになりました。
#リンクテーブルが作成できない! (うっかりミス)
ODBC接続が完了して、やっとリンクテーブルを作成できる…と思ったら、リンクテーブルに何も表示されません。
そうです。createdbでデータベースを作っただけで、テーブルもデータも作成していなかったからです。PostgreSQLにデータを作成したら、普通にリンクテーブルが作成できるようになりました。