dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Hata Teşhis Kütüphanesi/postgresql-pg-upgrade-could-not-load-library
PostgreSQL
PostgreSQL 14–18Yükseltme & Eklentiler
8 dk okuma
ERROR: could not load library / could not access file "$libdir/..."

PostgreSQL "could not load library" — Yükseltmeden Sonra Eklenti Neden Kayboldu?

pg_upgrade sonrası eksik veya uyumsuz eklenti kütüphanesi hatasının nedeni, loadable_libraries.txt, shared_preload_libraries ve yeni major sürüm için paket kurulumu.

İnceleyen:Principal Database Reliability Architect
Test Edilen Sürümler: PostgreSQL 17.11 & 18.6 (Alpine Linux / Ubuntu 24.04 PGDG) | Tarihsel: PostgreSQL 14, 15, 16

Operasyonel Doğrulama & Güvenilirlik Standardı

Son Teknik İnceleme: 30 Ekim 2026
Test Edilen SürümlerPostgreSQL 17.11 & 18.6 (Alpine / Ubuntu 24.04 PGDG, Docker 29.7) | Tarihsel: 14.10, 15.6, 16.4
Gerekli Yetkiİşletim sistemi root/sudo (paket kurulumu) ve veritabanı SUPERUSER
Risk Seviyesi
HighEksik kütüphane fonksiyonlarını eski kurulumdan körlemesine silmek eklenti verilerini kalıcı olarak erişilemez kılar
Beklenen Çıktıloadable_libraries.txt dosyasındaki eklentilerin yeni sürüm paketlerinin kurulması ve ALTER EXTENSION UPDATE başarısı
Geri Dönüş (Rollback) Planı:Yeni major sürüme uygun postgresql-XX-eklenti paketini kurup shared_preload_libraries değerini güncelleme
PostgreSQL Docs: pg_upgrade & Extension Libraries
İlk 60 Saniye Teşhis Protokolü:

Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.

▸Belirti

plaintext
ERROR: could not load library "/usr/lib/postgresql/17/lib/pg_stat_statements.so": /usr/lib/postgresql/17/lib/pg_stat_statements.so: undefined symbol: pg_stat_statements_internal ERROR: could not access file "$libdir/postgis-3": No such file or directory FATAL: could not load library "/usr/lib/postgresql/17/lib/timescaledb-2.14.so"

Bu hata neredeyse her zaman bir major sürüm yükseltmesinden (pg_upgrade) sonra ortaya çıkar ve üç farklı varyant halinde kendini gösterir:

  1. 1`could not access file "$libdir/..."` + No such file or directory: Kütüphane ikili dosyası (.so / .dll) yeni PostgreSQL sürümünün dizininde fiziksel olarak yoktur. Hedef sürüm için ilgili işletim sistemi paketi kurulmamıştır.
  2. 2`undefined symbol`: Kütüphane dosyası mevcuttur ancak hedef PostgreSQL sürümünün ABI/API başlıklarıyla derlenmemiştir. Genellikle resmi PGDG (apt.postgresql.org) paketleri ile Linux dağıtımının (Ubuntu/Debian ana deposu) paketleri karıştırıldığında oluşur.
  3. 3`FATAL: could not load library`: Eksik olan kütüphane postgresql.conf dosyasında shared_preload_libraries içinde tanımlıdır; veritabanı kümesi ayağa dahi kalkamaz.
ÖNEMLİ
`$libdir` Mekanizması: PostgreSQL içindeki $libdir değişkeni dinamik olarak hedefteki yeni sürümün pkglibdir dizinine çözümlenir (örneğin /usr/lib/postgresql/17/lib/). PostgreSQL 16'dan 17'ye geçtiyseniz, 16 dizininde duran postgis-3.so dosyası 17 için hiçbir şey ifade etmez. Veritabanı tablolarınız sorunsuz taşınmıştır ancak bu tabloların C dili fonksiyonlarını çalıştıran paylaşımlı kütüphaneler yeni dizinde eksiktir.

▸pg_upgrade Bunu Önceden Haber Vermişti

Çoğu veritabanı yöneticisi yükseltme gecesinde stres altındayken pg_upgrade komutunun bıraktığı uyarıyı kaçırır:

plaintext
Checking for presence of required libraries fatal Your installation references loadable libraries that are missing from the new installation. You can add these libraries to the new installation, or remove the functions using them from the old installation. A list of problem libraries is in the file: loadable_libraries.txt

pg_upgrade çalıştırıldığı dizinde otomatik olarak `loadable_libraries.txt` dosyasını oluşturur. Eksik olan tüm kütüphanelerin tam listesi bu dosyanın içindedir; tahmin yürütmeye gerek yoktur.

İPUCU
Bakım Penceresi Öncesi Güvenlik Kalkanı: Gerçek upgrade işlemine başlamadan günler önce pg_upgrade --check komutunu çalıştırın. Bu komut hiçbir veriyi kopyalamaz; yalnızca küme uyumluluğunu, sayfa boyutlarını ve eklenti kütüphanelerini denetler. Gece yarısı yaşanacak bir sürprizi bir hafta önceden tespit etmenizi sağlar.

▸Nedenini Doğrulayan Teşhis Sorguları

1. Yüklü Eklentileri ve Kütüphane Yollarını Listeleyin

sql
SELECT extname, extversion FROM pg_extension ORDER BY extname;

Veritabanında hangi C kütüphane fonksiyonlarının referans verildiğini sorgulayın:

sql
SELECT DISTINCT probin FROM pg_proc WHERE probin IS NOT NULL ORDER BY probin;

probin sütunu fonksiyonun hangi paylaşımlı kütüphaneden ($libdir/pg_stat_statements gibi) beslendiğini gösterir.

2. Açılışta Yüklenen Kütüphaneleri Doğrulayın

Sunucu açılamıyorsa postgresql.conf içindeki şu parametreleri kontrol edin:

sql
SHOW shared_preload_libraries; SHOW dynamic_library_path;

3. Dosya Fiziksel Olarak Var mı?

İşletim sistemi kabuğunda hedef PostgreSQL sürümünün kütüphane dizinini listeleyin:

bash
ls -la "$(pg_config --pkglibdir)"

▸Adım Adım Kalıcı Çözüm

1. loadable_libraries.txt Dosyasını Okuyun

Eksik kütüphanelerin adlarını dosyadan tek tek belirleyin.

2. Yeni Major Sürüme Uygun Paketleri Kurun

Eski paketler yeni sürümü kurtarmaz; paket adında yeni major sürüm numarası yer almalıdır:

bash
# Debian / Ubuntu (PostgreSQL 17 örneği) apt-get update apt-get install -y postgresql-17-postgis-3 postgresql-17-pg-stat-statements # RHEL / Rocky Linux dnf install -y postgis35_17

3. shared_preload_libraries Değerini Normalize Edin

Eğer timescaledb gibi sürüm spesifik bir kütüphane adı yazıldıysa (ör. timescaledb-2.11), bu sürüm numarasını kaldırarak sembolik bağını veya yeni sürüm adını kullanın:

ini
shared_preload_libraries = 'pg_stat_statements,timescaledb'

4. Eklenti Tanımlarını Güncelleyin

Paket kurulduktan sonra veritabanı içinde SQL meta tanımlarını yükseltin:

sql
ALTER EXTENSION postgis UPDATE;
UYARI
Bazı eklentiler (örneğin TimescaleDB) doğrudan PostgreSQL major sürüm atlamayı desteklemez. Eklentinin kendi resmi migration rehberinde belirtilen ara sürümleri geçmek gerekebilir. ALTER EXTENSION UPDATE hata verirse eklentinin sürüm uyumluluk matrisini inceleyin.

▸İlgili Hata Rehberleri & Hub Bağlantıları

Diğer Veritabanı Hata Teşhisleri

Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.

Tüm Hatalar (50)