AnalyticDB PostgreSQL Query Skill. Any AI Agent with shell execution capability can use this Skill to connect to an AnalyticDB PostgreSQL database via psql,...
Data & analysis
postgresql-skill
Try itExecute PostgreSQL database operations using psycopg2. List tables, describe schema, execute SQL queries.
What it does
Execute PostgreSQL database operations using psycopg2. List tables, describe schema, execute SQL queries.
The skill document
PostgreSQL Database Operations
Pure Python PostgreSQL skill using psycopg2 (no psql client needed).
When to Use
Use this skill when the user needs to:
- List database tables: "What tables are in the database?", "show tables"
- View table structure: "What columns does the users table have?", "describe users"
- Execute SQL queries: "Get all users", "SELECT * FROM users"
- Get schema summary: "What's the database structure?", "schema overview"
- Modify data: Insert, update, or delete records
When NOT to Use
- User asks conceptual questions (e.g., "What is PostgreSQL?")
- User needs data analysis or business insights (requires LLM reasoning)
- User wants natural language to SQL conversion (should be handled by upper-layer Agent)
- Database is not PostgreSQL
Usage Guidelines for AI Agents
Step 1: Check Prerequisites
Before using this skill, ensure:
- Python 3 is installed
- Dependencies are installed:
pip install psycopg2-binary pyyaml config.yamlexists with valid database connection details
If config.yaml is missing, instruct the user to:
cp config.example.yaml config.yaml
# Then edit config.yaml with real database credentials
Step 2: Choose the Right Command
| User Intent | Command | Example |
|---|---|---|
| List tables | python scripts/pgsql_skill.py list-tables | Get all table names |
| Describe table | python scripts/pgsql_skill.py describe-table | describe-table users |
| Query data | python scripts/pgsql_skill.py execute-sql "" | execute-sql "SELECT * FROM users LIMIT 10" |
| Schema overview | python scripts/pgsql_skill.py schema-summary | Full database structure |
Step 3: Parse Results
All commands return JSON (except schema-summary):
list-tables output:
{"tables": ["users", "orders", "products"]}
describe-table output:
{
"table": "users",
"columns": [
{"name": "id", "type": "integer", "nullable": false, "default": null},
{"name": "username", "type": "varchar", "nullable": false, "default": null}
]
}
execute-sql SELECT output:
{
"columns": ["id", "username", "email"],
"rows": [
{"values": ["1", "alice", "alice@example.com"]},
{"values": ["2", "bob", "bob@example.com"]}
]
}
execute-sql INSERT/UPDATE/DELETE output:
{"affected_rows": 1}
Step 4: Handle Errors
If a command fails, check the error message:
"error": "config.yaml not found"→ Guide user to create config"error": "psycopg2 not installed"→ Runpip install psycopg2-binary"error": "connection failed"→ Verify database credentials"error": "Forbidden operation"→ SQL violates safety rules
Safety Rules
This skill enforces strict SQL safety:
✅ Allowed:
- SELECT queries
- INSERT (single row only)
- UPDATE (must have WHERE clause)
- DELETE (must have WHERE clause)
❌ Blocked:
- DROP TABLE/DATABASE
- TRUNCATE TABLE
- ALTER TABLE
- Batch INSERT (multiple rows)
- UPDATE/DELETE without WHERE
Example of blocked query:
python scripts/pgsql_skill.py execute-sql "DROP TABLE users"
# Output: {"error": "Forbidden operation: DROP"}
Programmatic Integration
For advanced usage, import directly in Python:
import sys
from pathlib import Path
sys.path.insert(0, 'scripts')
from pgsql_skill import Database, load_config
# Initialize database connection
config = load_config()
db = Database(
host=config['host'],
port=config['port'],
dbname=config['dbname'],
user=config['user'],
password=config.get('password', '')
)
# Use database methods
tables = db.list_tables()
structure = db.describe_table("users")
result = db.execute_sql("SELECT count(*) FROM users")
# Always close connection
db.close()
Troubleshooting
- ModuleNotFoundError: psycopg2: Run
pip install psycopg2-binary- On macOS with managed Python:
pip install psycopg2-binary --no-binary :all:
- On macOS with managed Python:
- config.yaml not found: Copy from config.example.yaml
- Connection failed: Verify host/port/user/password in config.yaml
- Permission denied: Check database user permissions
Best Practices
- Add LIMIT to SELECT queries to avoid large result sets
- Always check errors before proceeding
- Close connections when using programmatic API
- Warn users before data modifications (INSERT/UPDATE/DELETE) and confirm intent
Related skills
Bundle entry for TencentDB PostgreSQL skills. It organizes five scenarios: one natural-language management-plane router, two extension-service scenarios for...
Convert natural language to SQL, explore database schemas, execute queries safely, and get optimization suggestions.
PostgreSQL schema design, query optimization, indexing, and administration. Use when working with PostgreSQL, JSONB, partitioning, RLS, CTEs, window functions, or EXPLAIN ANALYZE.
Use this skill whenever the user needs to operate or troubleshoot a PostgreSQL server/cluster as a DBA — a one-shot cluster health overview; server reads (version/uptime, settings, extensions, databases, roles); activity (sessions, idle-in-transaction, long-running queries, locks); query stats (pg_stat_statements top-N, EXPLAIN a statement); index health (unused indexes, missing-index hints, bloat, invalid/duplicate); table health (sizes, dead-tuple bloat, autovacuum status); replication (standby lag, replication slots, WAL); three flagship analyses — slow-query RCA (worst pg_stat_statements entry + EXPLAIN → cause/action), bloat & vacuum analysis (dead tuples + autovacuum lag → recommendation), and blocking lock-chain RCA (build the wait-for tree, name the root blocker); and guarded writes (terminate a backend, cancel a query, VACUUM/ANALYZE, create/drop an index, REINDEX, ALTER SYSTEM SET a parameter, reset query stats). Always use this skill for "postgres health check", "why is this
PostGrid (postgrid.com). Use this skill for ANY PostGrid request — reading, creating, updating, and deleting data. Whenever a task involves PostGrid, use thi...