PHP - Laravel - トラブルシュート - Undefined symbol "PQclosePrepared"


 クラウディア


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」伍長を参考にさせていただきました。

audiobook.jp
JETBOY
Amazonギフトカード
earthcar(アースカー)
5G CONNECT
サウンドハウス
TikTok Shop 【リピート用プログラム】
ベルリッツ
アフィリエイトのアクセストレード
【usus ウズウズ】
それがだいじWi-Fi
葬送のフリーレン Prime Video
ハイスピードプラン
ネットオークションの相場、統計、価格比較といえばオークファン
U-NEXT
薬屋の独り言
損保との違い
健康サポート特集