mirror of
https://github.com/tradecatlabs/vibe-coding-cn.git
synced 2026-08-08 08:37:46 +00:00
128 lines
4.3 KiB
Markdown
128 lines
4.3 KiB
Markdown
---
|
|
name: postgresql
|
|
description: "PostgreSQL database skill: psql usage, schema design, SQL queries, DDL/DML, transactions, RETURNING, indexing, EXPLAIN, permissions, libpq connection basics, and performance troubleshooting."
|
|
---
|
|
|
|
# postgresql Skill
|
|
|
|
Use this skill to design, query, debug, and operate PostgreSQL databases with evidence-based SQL and safe production habits.
|
|
|
|
## When to Use This Skill
|
|
|
|
Trigger when any of these applies:
|
|
- Writing or reviewing PostgreSQL SQL, DDL, DML, indexes, views, transactions, or migrations.
|
|
- Using `psql`, connection strings, `libpq`, or PostgreSQL client behavior.
|
|
- Debugging slow queries, locking, permissions, schema/search path, connection failures, or data-modifying statements.
|
|
- Designing normalized schema, constraints, keys, and query plans.
|
|
- Explaining PostgreSQL-specific features such as `RETURNING`, CTEs, roles, or `EXPLAIN`.
|
|
|
|
## Not For / Boundaries
|
|
|
|
- Not for destructive production changes without backups, migration plan, and rollback path.
|
|
- Do not expose database passwords, connection strings with secrets, dumps containing private data, or production credentials.
|
|
- Prefer explicit transactions and small verified changes for DDL/DML that touches real data.
|
|
- Required inputs: PostgreSQL version, schema/table definitions, query, expected result, observed error or plan, data volume, and environment.
|
|
- When docs or behavior differ by version, verify against the installed server with `SHOW server_version;`.
|
|
|
|
## Quick Reference
|
|
|
|
### Common Patterns
|
|
|
|
**Connect with psql**
|
|
```bash
|
|
psql "postgresql://user@localhost:5432/mydb"
|
|
```
|
|
|
|
**Check server version**
|
|
```sql
|
|
SHOW server_version;
|
|
```
|
|
|
|
**Create a table with a generated id**
|
|
```sql
|
|
CREATE TABLE users (
|
|
id serial PRIMARY KEY,
|
|
firstname text NOT NULL,
|
|
lastname text NOT NULL
|
|
);
|
|
```
|
|
|
|
**Insert and return generated data**
|
|
```sql
|
|
INSERT INTO users (firstname, lastname)
|
|
VALUES ('Joe', 'Cool')
|
|
RETURNING id;
|
|
```
|
|
|
|
**Update and inspect changed rows**
|
|
```sql
|
|
UPDATE products
|
|
SET price = price * 1.10
|
|
WHERE price <= 99.99
|
|
RETURNING name, price AS new_price;
|
|
```
|
|
|
|
**Create an index**
|
|
```sql
|
|
CREATE INDEX test1_id_index ON test1 (id);
|
|
```
|
|
|
|
**Read a query plan**
|
|
```sql
|
|
EXPLAIN (ANALYZE, BUFFERS)
|
|
SELECT * FROM users WHERE lastname = 'Cool';
|
|
```
|
|
|
|
**Use a transaction guard for data changes**
|
|
```sql
|
|
BEGIN;
|
|
UPDATE users SET lastname = 'Checked' WHERE id = 1 RETURNING *;
|
|
ROLLBACK;
|
|
```
|
|
|
|
**Harden search path for untrusted schemas**
|
|
```sql
|
|
SELECT pg_catalog.set_config('search_path', '', false);
|
|
```
|
|
|
|
## Examples
|
|
|
|
### Example 1: Add a Safe Migration
|
|
|
|
- Input: new table requirement and target PostgreSQL version.
|
|
- Steps:
|
|
1. Write `CREATE TABLE` with primary key, `NOT NULL`, and constraints.
|
|
2. Add indexes only for known query predicates.
|
|
3. Run migration in a transaction in staging and verify with `\d`.
|
|
- Expected output / acceptance: migration is reversible or has a rollback plan and schema matches expected constraints.
|
|
|
|
### Example 2: Debug a Slow Query
|
|
|
|
- Input: SQL query, table definitions, estimated data volume, and current indexes.
|
|
- Steps:
|
|
1. Run `EXPLAIN (ANALYZE, BUFFERS)` on a safe environment.
|
|
2. Identify sequential scans, bad row estimates, sort/hash spills, or missing predicates.
|
|
3. Propose the smallest index/query rewrite and re-run the plan.
|
|
- Expected output / acceptance: before/after plan evidence shows lower runtime or IO for the target workload.
|
|
|
|
### Example 3: Validate Data-Modifying SQL
|
|
|
|
- Input: `UPDATE` or `DELETE` statement for production data.
|
|
- Steps:
|
|
1. Convert the predicate to a `SELECT count(*)` and inspect sample rows.
|
|
2. Run inside `BEGIN` with `RETURNING` on a staging or transaction-guarded session.
|
|
3. Commit only after row count and returned rows match the expected blast radius.
|
|
- Expected output / acceptance: affected rows are known before commit and the rollback path is explicit.
|
|
|
|
## References
|
|
|
|
- `references/index.md`: navigation for local PostgreSQL references.
|
|
- `references/getting_started.md`: psql, tutorial SQL, build/install, and basics.
|
|
- `references/sql.md`: SQL language, DDL/DML, `RETURNING`, monitoring, and advanced examples.
|
|
|
|
## Maintenance
|
|
|
|
- Sources: local `references/` extracted from PostgreSQL documentation.
|
|
- Last updated: 2026-04-28
|
|
- Known limits: server behavior depends on PostgreSQL version, extensions, configuration, statistics, and workload; validate with live plans.
|