Skip to content

Bundled vector.so (pgvector 0.8.1) requires GLIBC_2.38, inconsistent with pg0's own documented glibc floor of 2.35+ #23

Description

@swarthyplacebo

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions