Submitted with the assistance of Sally Sonnet
Summary
The pg0 gnu/glibc binary's own documented platform support (per install.sh) is GLIBC 2.35+, with a fallback to the musl build below that threshold. However, the bundled vector.so (pgvector 0.8.1, shipped inside the pg0 binary via include_bytes! and extracted to ~/.pg0/installation/<version>/lib/vector.so on first start) requires GLIBC_2.38 — a higher floor than pg0 itself claims to support.
This means pg0 correctly reports itself as compatible and installed on a host with glibc 2.35–2.37 (e.g. Debian 12 bookworm, glibc 2.36), starts cleanly, and even reports "pgvector already installed" — but the first real CREATE EXTENSION vector call fails:
psycopg2.errors.UndefinedFile: could not load library ".../pg0/installation/18.1.0/lib/vector.so":
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by .../vector.so)
Verification performed
objdump -T on the bundled pg0 CLI binary and the bundled postgres binary: both require only up to GLIBC_2.34.
objdump -T on the bundled vector.so: requires GLIBC_2.38.
ldd on vector.so directly: confirms the load failure (version 'GLIBC_2.38' not found) independent of any application-level error handling.
- Host: Debian 12 bookworm, glibc 2.36, confirmed via
ldd --version.
- Fix applied locally: built pgvector v0.8.1 from source against
pg0's own bundled pg_config/PGXS headers (make OPTFLAGS="" && make install). The resulting .so only requires GLIBC_2.14 and loads/works correctly (CREATE EXTENSION vector succeeds, real ::vector casts work).
Why this matters
pg0's value proposition is "no installation, no configuration" zero-friction PostgreSQL+pgvector — but on any host in the glibc 2.35–2.37 range, that promise silently breaks specifically for the vector extension, while every other part of pg0 (install, start, info, "pgvector already installed") reports success. The failure only surfaces the first time something actually calls CREATE EXTENSION vector, which can be much later than pg0 start.
Suggested fix
Build the bundled vector.so with the same glibc floor / build environment used for the pg0 CLI and bundled postgres binaries (apparently glibc 2.34-2.35-era), rather than a newer build image, so the bundled extension doesn't have a stricter floor than the wrapper around it.
Environment
- pg0-embedded 0.14.2 (Python SDK), pg0 CLI 0.14.2
- PostgreSQL 18.1.0 (bundled)
- pgvector 0.8.1 (bundled)
- Host: Debian 12 bookworm, glibc 2.36, x86_64
Submitted with the assistance of Sally Sonnet
Summary
The
pg0gnu/glibc binary's own documented platform support (perinstall.sh) is GLIBC 2.35+, with a fallback to the musl build below that threshold. However, the bundledvector.so(pgvector 0.8.1, shipped inside the pg0 binary viainclude_bytes!and extracted to~/.pg0/installation/<version>/lib/vector.soon first start) requires GLIBC_2.38 — a higher floor thanpg0itself claims to support.This means
pg0correctly reports itself as compatible and installed on a host with glibc 2.35–2.37 (e.g. Debian 12 bookworm, glibc 2.36), starts cleanly, and even reports "pgvector already installed" — but the first realCREATE EXTENSION vectorcall fails:Verification performed
objdump -Ton the bundledpg0CLI binary and the bundledpostgresbinary: both require only up to GLIBC_2.34.objdump -Ton the bundledvector.so: requires GLIBC_2.38.lddonvector.sodirectly: confirms the load failure (version 'GLIBC_2.38' not found) independent of any application-level error handling.ldd --version.pg0's own bundledpg_config/PGXS headers (make OPTFLAGS="" && make install). The resulting.soonly requires GLIBC_2.14 and loads/works correctly (CREATE EXTENSION vectorsucceeds, real::vectorcasts work).Why this matters
pg0's value proposition is "no installation, no configuration" zero-friction PostgreSQL+pgvector — but on any host in the glibc 2.35–2.37 range, that promise silently breaks specifically for the vector extension, while every other part of pg0 (install, start, info, "pgvector already installed") reports success. The failure only surfaces the first time something actually callsCREATE EXTENSION vector, which can be much later thanpg0 start.Suggested fix
Build the bundled
vector.sowith the same glibc floor / build environment used for thepg0CLI and bundledpostgresbinaries (apparently glibc 2.34-2.35-era), rather than a newer build image, so the bundled extension doesn't have a stricter floor than the wrapper around it.Environment