基于 SOC 职业分类
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/ffsshhttiikk/opencode-agents-skills --skill postgresql命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | postgresql |
| description | PostgreSQL advanced open-source relational database |
| license | MIT |
| compatibility | opencode |
| metadata | {"audience":"developers","category":"databases"} |
When building production applications requiring ACID compliance and advanced features.
-- Create table with constraints
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(20) DEFAULT 'active'
);
-- Insert
INSERT INTO users (username, email) VALUES ('john', 'john@example.com')
RETURNING id, username;
-- Update with returning
UPDATE users SET status = 'inactive' WHERE id = 1 RETURNING *;
-- Delete
DELETE FROM users WHERE id = 1 RETURNING id;
-- CTE (Common Table Expression)
WITH active_users AS (
SELECT * FROM users WHERE status = 'active'
),
recent_orders AS (
SELECT * FROM orders WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT u.username, COUNT(o.id) as order_count
FROM active_users u
LEFT JOIN recent_orders o ON u.id = o.user_id
GROUP BY u.username;
-- Window functions
SELECT
name,
department,
salary,
AVG(salary) OVER (PARTITION BY department) as dept_avg,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) as dept_rank
FROM employees;
-- Lateral join
SELECT u.*, o.*
FROM users u
CROSS JOIN LATERAL (
SELECT orders o
o.user_id u.id
o.created_at
LIMIT
) o;
-- JSONB column
CREATE TABLE events (
id SERIAL PRIMARY KEY,
data JSONB
);
-- Index on JSONB
CREATE INDEX idx_events_data ON events USING GIN (data);
-- Query JSONB
SELECT * FROM events WHERE data->>'type' = 'click';
SELECT * FROM events WHERE data @> '{"user": {"id": 1}}';
-- Transform to rows
SELECT * FROM events, jsonb_array_elements(data->'items') as item;
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(255),
tags TEXT[]
);
INSERT INTO products (name, tags) VALUES ('Widget', ARRAY['sale', 'popular']);
SELECT * FROM products WHERE 'sale' = ANY(tags);
SELECT * FROM products WHERE tags @> ARRAY['sale'];
-- Create tsvector column
ALTER TABLE articles ADD COLUMN search_vector tsvector;
-- Generate search vector
UPDATE articles
SET search_vector = to_tsvector('english', title || ' ' || content);
-- Index
CREATE INDEX idx_articles_search ON articles USING GIN (search_vector);
-- Search with ranking
SELECT title, ts_rank(search_vector, query) as rank
FROM articles, to_tsquery('english', 'postgres & tutorial')
WHERE search_vector @@ query
ORDER BY rank DESC;
-- Range partitioning
CREATE TABLE orders (
id BIGSERIAL,
created_at TIMESTAMP NOT NULL,
total DECIMAL(10,2)
) PARTITION BY RANGE (created_at);
-- Create partitions
CREATE TABLE orders_2024_01 PARTITION OF orders
FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
CREATE TABLE orders_2024_02 PARTITION OF orders
FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');
-- Analyze query
EXPLAIN ANALYZE
SELECT * FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.created_at > '2024-01-01';
-- Partial index
CREATE INDEX idx_active_users ON users (email) WHERE status = 'active';
-- Composite index
CREATE INDEX idx_orders_user_date ON orders (user_id, created_at DESC);
-- Covering index
CREATE INDEX idx_orders_covering ON orders (user_id, created_at) INCLUDE (total);