Files
86314dc9d8 fix: avoid apt package when psycopg-binary is used (#379)
* feat: detect psycopg[binary] and skip apt packages

When using psycopg2-binary or psycopg[binary], the PostgreSQL client
libraries (libpq-dev, libpq5) are not needed because these variants
ship with pre-compiled binaries. This change:

- Adds usesBinaryPsycopg() to detect binary variants
- Updates usesPostgres() to return false when binary variants are used
- Skips libpq-dev (build) and libpq5 (runtime) apt package installation
- Adds comprehensive unit tests for binary psycopg detection

This reduces image size and build time for projects using binary variants.

* test: add psycopg[binary] integration test

Adds a dedicated test example for psycopg[binary] to verify that the
bracket syntax for optional dependencies is correctly detected. This
ensures the binary detection works for both psycopg2-binary and
psycopg[binary] variants.

Test coverage now includes:
- psycopg2-binary (existing python-system-deps example)
- psycopg[binary] (new python-psycopg-binary example)
- psycopg non-binary (existing python-latest-psycopg example)
- psycopg2 non-binary (existing python-django example)

* test: snapshot update

* test: add binary pyscogp test

* test: ensure libpq is installed for pyscog operation

* build: add helper for running the current dir tests

* test: check to make sure the libpg library is not installed when a binary postgres connection is requested

* test: update snapshot

---------

Co-authored-by: Hanzo Dev <[email protected]>
2026-01-15 11:32:30 -07:00

26 lines
714 B
Python

import os
import psycopg
import ctypes.util
print(f"psycopg version: {psycopg.__version__}")
# Verify libpq is not installed on the system
libpq_path = ctypes.util.find_library('pq')
if libpq_path:
print(f"ERROR: Found system libpq at {libpq_path}. It should not be present.")
exit(1)
print("System libpq not found")
database_url = os.environ["DATABASE_URL"]
print("Connecting to database...")
with psycopg.connect(database_url) as conn:
print("Successfully connected to PostgreSQL!")
with conn.cursor() as cur:
cur.execute("SELECT 1 + 1 AS result;")
result = cur.fetchone()[0]
print(f"Test query result: 1 + 1 = {result}")
print("Connection closed successfully")