Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/opagani/cassini-workshop/postgres-dbanpx skills add opagani/cassini-workshop --skill postgres-dbagit clone --depth 1 https://github.com/opagani/cassini-workshopWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/opagani/cassini-workshop/postgres-dba)<a href="https://agentmods.dev/skills/opagani/cassini-workshop/postgres-dba"><img src="https://agentmods.dev/badge/skills/opagani/cassini-workshop/postgres-dba.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00162 | $0.01799 |
| Opus 5 | $0.00081 | $0.00899 |
| Sonnet 5 | $0.00032 | $0.00360 |
| Haiku 4.5 | $0.00016 | $0.00180 |
Grade A, and why
postgres-dba scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
This is a copy
100% identical to postgres-dba — 0 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 137 lines — stays where its author put it; the contents beside it link to each section on GitHub.
PostgreSQL DBA — Opinionated Schema Design
The database is the system of record, not a dumb bucket behind an ORM. Model integrity in the schema, push set-based logic into functions, and let the application consume a clean, self-defending API. These conventions are defaults with teeth: deviating is allowed, but only deliberately and with a comment saying why.
🎯 Why: Design for Change
The goal of writing software is to be able to change it safely — and a schema is the hardest thing in any system to change. Consistent naming, surrogate keys, NOT NULL FKs, enums, and logic-in-functions exist so migrations stay mechanical: you add a column, you don't reshape the world. JSONB next to a relational spine lets the document side evolve without a migration. Every rule here optimizes for the next migration being boring.
This skill is about database design and SQL. For TypeScript/app-layer concerns use the language skills; this skill never defers integrity to the application.
How to use this skill
- Match the task to a rule below or in the decision guide.
- Open the matching
references/*.mdfor the full rationale, the wrong way, the right way, and the explicit-override escape hatch. - Copy the closest file from
templates/and adapt it — the templates already encode every convention here, so you start compliant. - Apply the rule unless you can state, in a comment in the DDL, the specific reason it does not apply here. "It was easier" is not a reason.
The hard rules (non-negotiable defaults)
-
Naming is
snake_case, lowercase, unquoted, forever. Tables plural (orders), columns singular (shipped_at), no reserved words, noCamelCase, no quoted identifiers in the schema. If you ever need to double-quote an identifier in normal queries, the name is wrong. Seereferences/naming.md. -
Every base table has
id serial primary key. A synthetic key, always namedid, is the row's identity. Natural keys get aUNIQUEconstraint, never the primary key. Usebigserial/identity only when you have a concrete reason to expect >2.1B rows — and write that reason in a comment. Seereferences/keys.md.
What ships with it
11 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- .DS_Store 6.0 KB
- references/enums.md 4.0 KB
- references/functions.md 5.2 KB
- references/generated-columns.md 4.3 KB
- references/jsonb.md 6.6 KB
- references/keys.md 4.7 KB
- references/naming.md 3.6 KB
- templates/function.sql 2.3 KB
- templates/jsonb-document.sql 3.2 KB
- templates/migration.sql 2.3 KB
- templates/schema.sql 3.3 KB
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 137 lines · 162 tokens per session scan A 9e9995936871
postgres-dba is a skill published in the GitHub repository opagani/cassini-workshop (0 stars, last pushed 2mo ago), licensed MIT. It adds 162 tokens to every session and 1,799 once invoked, about $0.0008 per session on Opus 5. A static security scan graded it A with 0 findings. It is 100% identical to postgres-dba, differing in 0 lines, and is treated as a copy.
Other skills, from other repositories
postgres-dba
Opinionated PostgreSQL schema and database design conventions: snakecase naming, id serial primary key surrogate keys, compound primary keys for many-to-many junctions, NOT NULL foreign keys by default (nullable only with an explicit override), enums instead of excessive lookup tables, STORED generated columns for…
add-provider
Add a new storage or service provider to the core package. Use when implementing a new backend for StorageService (e.g., a new database) or a new service provider (e.g., a new LLM backend).
sqlike
Check SQL with sqlike — deterministic static analysis (validity, anti-patterns, rewrites, index advice) and query-equivalence verification. Use whenever you write, edit, review, or rewrite a SQL query, or need to prove two queries return the same results. Requires the sqlike MCP server (@sqlike/mcp) or the sqlike CLI…
api-canvas
DataCanvas primitive reference — a Tier 3 SQL/analytical workspace for tabular MCP servers, backed by DuckDB. Use when registering tables from upstream APIs, running ad-hoc SQL across them, and exporting results. Covers the acquire → register → query → export flow, per-table TTL, the token-sharing pattern for…
api-mirror
Stand up a persistent, self-refreshing local mirror of a bulk upstream dataset with the MirrorService (@cyanheads/mcp-ts-core/mirror). Use when a server wraps a large or slow API and should query a synced local index (embedded SQLite + FTS5) instead of paginating the live API per request.
sqlite-dev
Opinionated SQLite conventions for local TypeScript + Bun web development with Drizzle ORM, where Postgres is the likely production target. Keeps the postgres-dba naming and modeling rules (snakecase, plural tables, id surrogate keys, NOT NULL FKs with explicit ON DELETE, compound junction keys, JSON document store)…