-
2024-07-20 PostgreSQL
PostgreSQLのインストール方法によってパラメータとUnixドメインソケットのデフォルト値が変わります
PostgreSQL をインストールする際に、パッケージからインストールするか、ソースコードからインストールするかを選択できます。
お手軽さでいいますと yum や dnf、apt などのパッケージ管理システムを利用して PostgreSQL をインストールするのが一番かと思います。
一方、ソースコードから PostgreSQL をインストールする場合には、インストール場所などをコンパイルオプションで指定できる等、柔軟に構築することができます。
PostgreSQL のインストール方法の違いによってパラメータのデフォルト値が変わる
ここでタイトルのとおり、PostgreSQL をパッケージからインストールした場合と、ソースコードからインストールした場合のパラメータのデフォルト値が違うという点についてのお話となります。
例えば、logging_collector パラメータは、ソースコードからインストールした場合には off となりますが、yum でインストールした場合には on がデフォルト値となります。
デフォルト値が変わる理由
これはパッケージの作成時にパッチが当てられているためです。
PostgreSQL 16 のパッチの内容は下記 URL が該当します。
【 PostgreSQL's git repository - postgresql-16-conf.patch - 】
https://git.postgresql.org/gitweb/?p=pgrpms.git;a=blob;f=rpm/redhat/main/non-common/postgresql-16/main/postgresql-16-conf.patch;h=da28ed793232316dd81fdcbbe59a6479b054a364;hb=HEAD
上記の URL で変更が加えられているパラメータについては、公式ドキュメントなどで記載されているデフォルト値と違うため、注意が必要となります。
Unixドメインソケットのパスの違い
また、パラメータとは違いますが、Unixドメインソケットの接続先パスも下記のような相違があります。
※ psql などで接続する際に、PGHOST 環境変数が設定されておらず、-h オプションでも接続先を指定されていなかった場合の接続先となるパスです。
インストール方法 | 接続先のUnixドメインソケットのパス |
---|---|
ソースコード | /tmp |
パッケージ | /run/postgresql |
これは、下記 URL のパッチで変更されています。
【 PostgreSQL's git repository - postgresql-16-var-run-socket.patch - 】
https://git.postgresql.org/gitweb/?p=pgrpms.git;a=blob;f=rpm/redhat/main/non-common/postgresql-16/main/postgresql-16-var-run-socket.patch;h=f2528efaf8f4681754b20283463eff3e14eedd39;hb=HEAD
実際に PostgreSQL が稼働していない状態で psql を実行し、エラーメッセージを出力して、Unix ドメインソケットの接続先パスを確認します。
# ソースコードからインストール
$ /usr/local/pgsql-16.3/bin/psql
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: そのようなファイルやディレクトリはありません
Is the server running locally and accepting connections on that socket?
# パッケージからインストール
$ /usr/bin/psql
psql: エラー: ソケット"/run/postgresql/.s.PGSQL.5432"のサーバーへの接続に失敗しました: そのようなファイルやディレクトリはありません
サーバーはローカルで稼働していてそのソケットで接続を受け付けていますか?
上記のとおり、ソースコードからインストールした場合には /tmp 配下にある .s.PGSQL.5432 に接続しようとしていることを確認できます。
パッケージからインストールした場合には /run/postgresql 配下にある .s.PGSQL.5432 に接続しようとしていることを確認できます。
まとめ
(あまりないとは思いますが)検証環境などで、yum でインストールした PostgreSQL と、ソースコードからインストールした PostgreSQL を同居させてしまいますと、psql で PostgreSQL に接続しようとした際にデータベースクラスタは稼働しているのに接続できない、という状況になる可能性もあります。
そういった場合に、知っているか知っていないかで対応速度にも違いが出ると思いますので、簡単ではありますが、PostgreSQL のインストール方法によって、パラメータなどのデフォルト値が違うということを解説させていただきました。