postgresql
PostgreSQL best practices: multi-tenancy with RLS, schema design, Alembic migrations, async SQLAlchemy, and query optimization. Use when designing multi-tenant tables with Row-Level Security, debugging tenant isolation, creating/changing Alembic migrations, or optimizing PostgreSQL queries. Keywords: PostgreSQL, RLS, Alembic, SQLAlchemy, multi-tenancy.
How do I install this agent skill?
npx skills add https://github.com/itechmeat/llm-code --skill postgresqlIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill provides comprehensive documentation and best practices for PostgreSQL, including row-level security, multi-tenancy, and technical notes for versions up to 19. No security issues were detected.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
- Runlayerfail
6/13 files flagged
What does this agent skill do?
PostgreSQL
RLS Multi-tenancy Pattern
Non-negotiables
- RLS context is mandatory for any tenant-scoped query
- Context must be set inside the same transaction as the queries
- No fallbacks for tenant ID (fail fast if missing)
- Async-only DB access when using async frameworks
Setting RLS Context
RLS works only if the current transaction has the context set:
SET LOCAL app.current_tenant_id = '<tenant_uuid>';
Must run before the first tenant-scoped query in that transaction.
Common Failure Modes
- Setting
SET LOCAL ...after the firstselect() - Setting the context in one session, then querying in another
- Running queries outside the expected transaction scope
Typical RLS Policy
ALTER TABLE some_table ENABLE ROW LEVEL SECURITY;
CREATE POLICY some_table_tenant_isolation
ON some_table
USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid);
Multi-tenant Table Checklist
- Tenant ID column is UUID
- FK to tenants table with
ON DELETE CASCADE - Indexes aligned with access patterns (usually tenant_id first)
- PostgreSQL does not auto-index FK columns — add explicit indexes
- UNIQUE allows multiple NULLs unless using
NULLS NOT DISTINCT(PG15+)
- RLS is enabled and policies exist
- Application code sets RLS context at transaction start
Alembic Migrations Checklist
- Add/modify schema (columns, constraints, FKs)
- Create/update indexes
- Enable RLS and create/adjust policies
- Add verification (tests) for isolation
- Provide a real downgrade (no stubs)
Version Notes
PostgreSQL 19 (beta)
- 19 is at Beta 3 (2026-08-13); GA is expected September/October 2026 and details may still change. Latest stable line is
18.6. - Headline changes:
REPACK/REPACK CONCURRENTLYreplacingVACUUM FULLandCLUSTER, parallel autovacuum with a scoring system, logical replication of sequences, SQL/PGQ property graphs,GROUP BY ALL,FOR PORTION OF, and online checksum enable/disable. - 18 incompatible changes to plan for, including forced
standard_conforming_strings, RADIUS removal,jitoff by default,default_toast_compressionswitching tolz4, andmax_locks_per_transactiondefaulting to 128 with changed sizing. - Full detail and the upgrade checklist: postgresql-19.md
PostgreSQL 18.4
18.4is a security/robustness patch release; no dump/restore is required for existing18.xclusters.- The patch line hardens startup packet parsing, backup tools (
pg_basebackup,pg_rewind,pg_verifybackup), and several logical replication code paths. - Planner/executor fixes also land for
MERGE, nondeterministic collations, generated columns, and assorted aggregate/window edge cases.
RLS Isolation Testing Recipe
Goal:
- Data for tenant A is visible to tenant A
- Data for tenant A is NOT visible to tenant B
Canonical flow:
- Setup data through an admin session (RLS bypass) for tenant A and B
- Assert via an RLS session:
- set context to tenant A → sees only tenant A data
- set context to tenant B → does not see tenant A data
Destructive Operations Safety
Hard rules:
- Never run
DELETEwithout a narrowWHEREtargeting specific data - Never run
TRUNCATE/DROPwithout explicit confirmation
Pre-flight before destructive actions:
- Confirm exact target (tables / IDs / date range)
- Run a
SELECT/row count first and show results - Ask for final confirmation, then execute
References
Versions
- postgresql-19.md — PostgreSQL 19 (beta): new features by area, full incompatible-changes list, upgrade checklist
Schema & Design
- table-design.md — Data types, constraints, indexing, partitioning, JSONB, safe schema evolution
- charset-encoding.md — Character sets, encoding, collation, ICU, locale settings
Authentication
- authentication.md — pg_hba.conf, SCRAM-SHA-256, md5, peer, cert, LDAP, GSSAPI
- authentication-oauth.md — OAuth 2.0 (PostgreSQL 18+), SASL OAUTHBEARER, validators
- user-management.md — CREATE/ALTER/DROP ROLE, membership, GRANT/REVOKE, predefined roles
Runtime Configuration
- connection-settings.md — listen_addresses, max_connections, SSL, TCP keepalives
- query-tuning.md — Planner settings, work_mem, parallel query, cost constants
- replication.md — Streaming replication, WAL, synchronous commit, logical replication
- vacuum.md — Autovacuum, vacuum cost model, freeze ages, per-table tuning
- error-handling.md — exit_on_error, restart_after_crash, data_sync_retry
Internals
- internals.md — Query processing pipeline, parser/rewriter/planner/executor, system catalogs, wire protocol, access methods
- protocol.md — Wire protocol v3.2: message format, startup, auth, query, COPY, replication
Links
See Also
- sql-expert — Query patterns, EXPLAIN workflow, optimization
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/itechmeat/llm-code/postgresql">View postgresql on skillZs</a>