Treat this skill as the MOOLLM wrapper around PostgreSQL’s full stack: the psql client, pg_dump / pg_restore, connection libraries, extension packages, and the on-disk / managed-server ecosystem—not a reimplementation of the engine. The postgres schemapedia mechanism points here; sql remains the abstract language family.
This skill covers operating PostgreSQL: getting connected, migrations, extensions (including TimescaleDB and pgvector), catalog introspection, and operational vocabulary. Index design, constraint tricks, and deep EXPLAIN work live in postgres-optimization — use this skill first for wiring and safety, then delegate when the problem is plan-level.
When to use
New service or container needs a repeatable way to apply DDL.
Split variables (classic DBA style): PGHOST, PGPORT, PGUSER, PGDATABASE, PGPASSWORD. psql picks these up when no URI is passed.
Safe DDL and scripts
-v ON_ERROR_STOP=1 — stop the script on first error (essential for migrations).
Transactions — wrap multi-statement deploys when appropriate; know that some DDL takes stronger locks.
Idempotent patterns — CREATE TABLE IF NOT EXISTS, CREATE EXTENSION IF NOT EXISTS — avoid blind rewrites in production without review.
Migrations (practice)
Single source of truth — one ordered apply path, or a migration tool (Flyway, Sqitch, Alembic, Liquibase, ORM) with explicit version table.
Roles and grants — separate “superuser bootstrap” from application DDL where possible.
Rollback story — forward-only migrations are common; document how to recover (restore from backup, or compensating migration).
Introspection (starter queries)
Version and extensions:
SELECT version();
SELECT extname, extversion FROM pg_extension ORDERBY1;
Table sizes (rough):
SELECT relname, pg_total_relation_size(oid) AS bytes
FROM pg_class
WHERE relkind ='r'AND relnamespace ='public'::regnamespace
ORDERBY bytes DESC
LIMIT 20;
Load pg_stat_statements (if installed) and read the PostgreSQL docs for setup — then inspect top queries by total time.
TimescaleDB (time-series)
Timescale extends PostgreSQL with hypertables (time-partitioned tables), compression, retention policies, and continuous aggregates (rollup views). Read the product docs before turning this on in production: chunk intervals, retention, and compression interact with query patterns.
Typical enable: CREATE EXTENSION IF NOT EXISTS timescaledb; then create_hypertable(...) per current API in your Timescale version.
pgvector (embeddings)
pgvector stores vectors in-table and supports nearest-neighbor search with distance operators. Install the extension package for your Postgres major, then: