Consumers on postgres:NN-alpine can't switch to the Debian pgvector image
without reindexing every text index (musl vs glibc collation). This builds
pgvector into the same Alpine image instead. Verified on PG 16 and 17.
The sink ships with a JSONB variant and is documented for asyncpg, but
the suite only ever exercised SQLite. The embeddings work will need
pgvector, so this adds a local Postgres stack and a way to run the
database tests on it, here and in CI.
- docker-compose.yml: ffb-postgres (pgvector/pgvector:pg16) on a private
network, published on 127.0.0.1 only, with an init script that adds
the vector extension to the test database and template1
- Makefile: pg-up/pg-down/pg-reset/pg-logs/pg-psql, test, test-pg,
test-all, lint; .env is generated from .env.example with a random
password, and FFB_TEST_DATABASE_URL from the environment wins over it
- tests: a db_url fixture parametrized over sqlite and postgres. The
postgres leg skips unless FFB_TEST_DATABASE_URL is set, and creates a
uniquely named database per test (with vector) that is dropped after.
The DatabaseSink factories in the events, retention, correlation,
soft-error and instrumentation tests now use it, so their 38 database
tests run on both. The missing-events-table test accepts either
backend's error. New tests check isolation and that vector works.
- asyncpg and pgvector added to the dev and test extras
- CI: a test-postgres job on FastMCP 2.12.2 and 4.x with a pgvector
service container, failing if the Postgres cases skip
- CONTRIBUTING: how to run the suite against Postgres