- 1. 概要
- 2. 状況
- 3. 対策
- 4. 参考サイト
1. 概要
これは、表題を説明するのが、難しいので、以下で。
2. 状況
sudo -u www php /path/artisan cache:clear
すると。
ld-elf.so.1: /usr/local/lib/php/20240924/pdo_pgsql.so: Undefined symbol "PQclosePrepared"
*** Error code 1
というエラーになります。
「Gemini」伍長に相談すると、「PostgreSQL」のバージョンの問題らしい。
このエラーは、PHP の PostgreSQL 拡張モジュール(pdo_pgsql.so)が依存しているクライアントライブラリ(PostgreSQL の libpq)のバージョン不整合、または古いシンボルが参照されてしまっているために発生しています。具体的には、PHP 側が期待している PQclosePrepared という関数が、リンクされている libpq(または古い PostgreSQL クライアントライブラリ)に存在しない状態です。
現在(2026年11月15日)使用している「php84」の最新は、この状態にあり、「PQclosePrepared」という関数は、今の「PostgreSQL」のバージョンの「libpq」には、存在しないとのこと。
3. 対策
使用している「PostgreSQL」のバージョンは「16」だったのですが、「17」以上にしなければならないらしい。
わたしは、「PostgreSQL 18」へアップグレードしました。
「FreeBSD」上で、「PostgreSQL 16」を「PostgreSQL 18」へアップグレードする方法については。
「メンテナンス・トラブルシュート - データベース - PostgreSQL」をご参照ください。
「FreeBSD」では、「PostgreSQL」のバージョンアップ後。
cd /usr/ports/databases/php84-pdo_pgsql
make clean
make NO_DIALOG=yes
make reinstall clean
cd /usr/ports/databases/php84-pgsql
make clean
make NO_DIALOG=yes
make reinstall clean
マシンが 2台あるのですが、そのうちの1台は、下記も必要でした。
pkg delete -f php84-pecl-redis
cd /usr/ports/databases/php-redis
make NO_DIALOG=yes
make reinstall clean
「php84-pecl-redis」は、「php-redis」へ移行したらしい。
これで。
sudo -u www php /path/artisan cache:clear
が通るようになりました。
4. 参考サイト
本ページは、「Gemini」伍長を参考にさせていただきました。
|