Install
openclaw skills install postgres-skillPostgreSQL 数据库管理技能。通过自然语言查询、管理 PostgreSQL 数据库,支持复杂查询、性能分析、JSON 操作、全文搜索等高级功能。当用户提到 PostgreSQL、Postgres、复杂查询、性能优化时使用此技能。
openclaw skills install postgres-skill通过自然语言,轻松管理 PostgreSQL,利用其强大特性!
Ubuntu/Debian:
sudo apt update
sudo apt install postgresql-client
macOS:
brew install libpq
Windows: 下载并安装 PostgreSQL 官方客户端工具
使用环境变量:
export PGHOST=localhost
export PGPORT=5432
export PGUSER=your_username
export PGPASSWORD=your_password
export PGDATABASE=your_database
或使用连接字符串:
postgresql://username:password@localhost:5432/database
SELECT
department,
name,
salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) as rank
FROM employees
QUALIFY rank <= 3;
WITH monthly_sales AS (
SELECT
DATE_TRUNC('month', order_date) as month,
SUM(amount) as total
FROM orders
GROUP BY DATE_TRUNC('month', order_date)
)
SELECT
month,
total,
LAG(total) OVER (ORDER BY month) as prev_month,
ROUND(
(total - LAG(total) OVER (ORDER BY month))::numeric /
LAG(total) OVER (ORDER BY month) * 100,
2
) as growth_pct
FROM monthly_sales;
-- 查询 JSON 中的嵌套值
SELECT
id,
metadata->>'user_id' as user_id,
metadata->'preferences'->>'theme' as theme
FROM users
WHERE metadata->>'status' = 'active';
UPDATE users
SET metadata = jsonb_set(
metadata,
'{preferences,theme}',
'"dark"'
)
WHERE id = 123;
-- GIN 索引支持高效的 JSONB 查询
CREATE INDEX idx_users_metadata_gin ON users USING gin (metadata jsonb_path_ops);
-- 创建全文搜索索引
CREATE INDEX idx_articles_content_fts ON articles
USING gin(to_tsvector('chinese', content));
-- 全文搜索
SELECT title, ts_headline('chinese', content, query) as snippet
FROM articles, to_tsquery('chinese', '人工智能') as query
WHERE to_tsvector('chinese', content) @@ query
ORDER BY ts_rank(to_tsvector('chinese', content), query) DESC;
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT * FROM orders
WHERE status = 'completed'
ORDER BY created_at DESC
LIMIT 100;
SELECT
schemaname,
tablename,
attname,
n_distinct,
correlation
FROM pg_stats
WHERE tablename = 'your_table'
ORDER BY n_distinct DESC;
SELECT
schemaname,
tablename,
indexname,
idx_scan as index_scans,
idx_tup_read as tuples_read,
idx_tup_fetch as tuples_fetched
FROM pg_stat_user_indexes
WHERE idx_scan < 50 -- 很少使用的索引
ORDER BY idx_scan;
完整备份:
pg_dump -F c -f backup_$(date +%Y%m%d).dump your_database
仅结构备份:
pg_dump -s -f schema_only.sql your_database
仅数据备份:
pg_dump -a -f data_only.sql your_database
单表备份:
pg_dump -t table_name -f table_backup.sql your_database
恢复完整备份:
pg_restore -d target_database backup_file.dump
列出备份内容:
pg_restore -l backup_file.dump
选择性恢复:
pg_restore -d target_database -t table_name backup_file.dump
SELECT
datname as database_name,
pg_size_pretty(pg_database_size(datname)) as size
FROM pg_database
ORDER BY pg_database_size(datname) DESC;
SELECT
schemaname,
tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
SELECT
pid,
usename,
application_name,
client_addr,
state,
query_start,
state_change,
query
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY query_start;
ANALYZE table 更新统计信息用户: "查询每个部门员工的薪资排名"
AI: "使用窗口函数查询每个部门的员工薪资排名"
SELECT
department,
name,
salary,
DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) as salary_rank
FROM employees
ORDER BY department, salary_rank;
用户: "查询用户偏好设置中主题为 dark 的用户"
AI: "查询 JSONB 字段中的嵌套值"
SELECT id, username, metadata->'preferences' as preferences
FROM users
WHERE metadata->>'theme' = 'dark';
用户: "帮我分析这个查询为什么慢"
AI: "使用 EXPLAIN ANALYZE 分析查询执行计划"
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders o
JOIN users
WHERE o.user_id = users.id
AND o.created_at >= NOW() - INTERVAL '7 days';
开始使用: 告诉我你的查询需求,我会利用 PostgreSQL 的强大特性帮你完成!🚀