Execute read-only SQL queries against multiple PostgreSQL databases. Use when: (1) querying PostgreSQL databases, (2) exploring database schemas/tables, (3) running SELECT queries for data analysis, (4) checking database contents. Supports multiple database connections with descriptions for intelligent auto-selection. Blocks all write operations (INSERT, UPDATE, DELETE, DROP, etc.) for safety.
Add this skill
npx mdskills install sanjay3290/postgresWell-documented read-only PostgreSQL query tool with strong safety features and clear setup
1---2name: postgres3description: "Execute read-only SQL queries against multiple PostgreSQL databases. Use when: (1) querying PostgreSQL databases, (2) exploring database schemas/tables, (3) running SELECT queries for data analysis, (4) checking database contents. Supports multiple database connections with descriptions for intelligent auto-selection. Blocks all write operations (INSERT, UPDATE, DELETE, DROP, etc.) for safety."4license: Apache-2.05metadata:6 author: sanjay32907 version: "1.0"8---910# PostgreSQL Read-Only Query Skill1112Execute safe, read-only queries against configured PostgreSQL databases.1314## Requirements1516- Python 3.8+17- psycopg2-binary: `pip install -r requirements.txt`1819## Setup2021Create `connections.json` in the skill directory or `~/.config/claude/postgres-connections.json`.2223**Security**: Set file permissions to `600` since it contains credentials:24```bash25chmod 600 connections.json26```2728```json29{30 "databases": [31 {32 "name": "production",33 "description": "Main app database - users, orders, transactions",34 "host": "db.example.com",35 "port": 5432,36 "database": "app_prod",37 "user": "readonly_user",38 "password": "your-password",39 "sslmode": "require"40 }41 ]42}43```4445### Config Fields4647| Field | Required | Description |48|-------|----------|-------------|49| name | Yes | Identifier for the database (case-insensitive) |50| description | Yes | What data this database contains (used for auto-selection) |51| host | Yes | Database hostname |52| port | No | Port number (default: 5432) |53| database | Yes | Database name |54| user | Yes | Username |55| password | Yes | Password |56| sslmode | No | SSL mode: disable, allow, prefer (default), require, verify-ca, verify-full |5758## Usage5960### List configured databases61```bash62python3 scripts/query.py --list63```6465### Query a database66```bash67python3 scripts/query.py --db production --query "SELECT * FROM users LIMIT 10"68```6970### List tables71```bash72python3 scripts/query.py --db production --tables73```7475### Show schema76```bash77python3 scripts/query.py --db production --schema78```7980### Limit results81```bash82python3 scripts/query.py --db production --query "SELECT * FROM orders" --limit 10083```8485## Database Selection8687Match user intent to database `description`:8889| User asks about | Look for description containing |90|-----------------|--------------------------------|91| users, accounts | users, accounts, customers |92| orders, sales | orders, transactions, sales |93| analytics, metrics | analytics, metrics, reports |94| logs, events | logs, events, audit |9596If unclear, run `--list` and ask user which database.9798## Safety Features99100- **Read-only session**: Connection uses PostgreSQL `readonly=True` mode (primary protection)101- **Query validation**: Only SELECT, SHOW, EXPLAIN, WITH queries allowed102- **Single statement**: Multiple statements per query rejected103- **SSL support**: Configurable SSL mode for encrypted connections104- **Query timeout**: 30-second statement timeout enforced105- **Memory protection**: Max 10,000 rows per query to prevent OOM106- **Column width cap**: 100 char max per column for readable output107- **Credential sanitization**: Error messages don't leak passwords108109## Troubleshooting110111| Error | Solution |112|-------|----------|113| Config not found | Create `connections.json` in skill directory |114| Authentication failed | Check username/password in config |115| Connection timeout | Verify host/port, check firewall/VPN |116| SSL error | Try `"sslmode": "disable"` for local databases |117| Permission warning | Run `chmod 600 connections.json` |118119## Exit Codes120121- **0**: Success122- **1**: Error (config missing, auth failed, invalid query, database error)123124## Workflow1251261. Run `--list` to show available databases1272. Match user intent to database description1283. Run `--tables` or `--schema` to explore structure1294. Execute query with appropriate LIMIT130
Full transparency — inspect the skill content before installing.