| name | psql |
| description | Run PostgreSQL queries and meta-commands via CLI |
| version | 1.0.0 |
| license | MIT |
| compatibility | opencode |
Overview
CLI tool for running SQL queries and psql meta-commands against PostgreSQL databases. Each query is executed directly via the psql CLI - no persistent connection required.
Prerequisites
- bun runtime installed
- psql client installed
- PostgreSQL connection environment variables set in
<git-root>/.env or exported
Environment Variables
Set these in your .env file or export them:
| Variable | Required | Default | Description |
|---|
PGHOST | Yes | - | Database host |
PGPORT | No | 5432 | Database port |
PGDATABASE | Yes | - | Database name |
PGUSER | Yes | - | Database user |
PGPASSWORD | Yes | - | Database password |
PGSSLMODE | No | - | SSL mode (disable, require, etc.) |
Example .env:
PGHOST=localhost
PGPORT=5432
PGDATABASE=myapp
PGUSER=myapp
PGPASSWORD=secret
PGSSLMODE=disable
Command
Query
Run a SQL query, meta-command, or SQL file.
bun .opencode/skill/psql/query.js <query> [options]
bun .opencode/skill/psql/query.js --file <path> [options]
Arguments:
query - SQL query or meta-command to execute
Options:
--file <path> - Execute SQL file instead of inline query
--tuples - Tuples only output (no headers or row count)
--timeout <ms> - Query timeout in milliseconds (default: 30000)
--json - Wrap output in JSON
--help - Show help
Examples:
bun .opencode/skill/psql/query.js "SELECT * FROM users LIMIT 5;"
bun .opencode/skill/psql/query.js "SELECT COUNT(*) FROM orders WHERE status = 'pending';"
bun .opencode/skill/psql/query.js "\dt"
bun .opencode/skill/psql/query.js "\d users"
bun .opencode/skill/psql/query.js "\di"
bun .opencode/skill/psql/query.js "\l"
bun .opencode/skill/psql/query.js --file migrations/001_create_users.sql
bun .opencode/skill/psql/query.js --file scripts/seed_data.sql
bun .opencode/skill/psql/query.js "SELECT id FROM users;" --tuples
bun .opencode/skill/psql/query.js "SELECT * FROM large_table;" --timeout 60000
Common Workflows
Explore Database Schema
bun .opencode/skill/psql/query.js "\dt"
bun .opencode/skill/psql/query.js "\d users"
bun .opencode/skill/psql/query.js "\di"
bun .opencode/skill/psql/query.js "\d+ orders"
Run Analytical Queries
bun .opencode/skill/psql/query.js "SELECT COUNT(*) FROM orders;"
bun .opencode/skill/psql/query.js "SELECT status, COUNT(*) FROM orders GROUP BY status;"
bun .opencode/skill/psql/query.js "SELECT * FROM orders WHERE created_at > NOW() - INTERVAL '1 day' ORDER BY created_at DESC LIMIT 10;"
Database Administration
bun .opencode/skill/psql/query.js "SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC LIMIT 10;"
bun .opencode/skill/psql/query.js "SELECT count(*) FROM pg_stat_activity WHERE state = 'active';"
bun .opencode/skill/psql/query.js "\l"
Run Migrations
bun .opencode/skill/psql/query.js --file migrations/001_create_users.sql
bun .opencode/skill/psql/query.js --file scripts/seed.sql
Output Behavior
- Query output is displayed directly to the user in the terminal
- Do not re-summarize or reformat query output - the user can already see it
- Use
--tuples for clean output without headers (useful for piping to other tools)
- Use
--json for structured output when parsing programmatically
Notes
- Each query is executed as a separate
psql invocation (no persistent connection)
- Meta-commands (starting with
\) work the same as SQL queries
- Long-running queries may need
--timeout increased from the default 30 seconds
- The
--tuples flag is useful when you need to parse output or pipe to other commands