[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CXF9ACQADEHZAFTT8DAFZG":3,"skill-same:01M6CXF9ACQADEHZAFTT8DAFZG":49},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":22,"linkOnly":23,"markdownContent":24,"markdownBody":25,"frontMatter":26,"refName":29,"commitSha":30,"skillDirectory":5,"forksCount":31,"repositoryHtmlUrl":32,"repositoryHomepageUrl":6,"ownerHtmlUrl":33,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":34,"install":35,"resources":48},"01M6CXF9ACQADEHZAFTT8DAFZG","postgresql",null,"PostgreSQL advanced open-source relational database","ffsshhttiikk\u002Fopencode-agents-skills","ffsshhttiikk","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F226346827?v=4","01M6CWD9RR3Y7VRQX3MXYC8FYH","01M6CWD9WVPYAZW0J82G1VKGHY",3,"MIT","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fpostgresql\u002FSKILL.md",[],[5,18,19,20,21],"database","open","opencode","databases","2026-11-10 10:12:30",false,"---\nname: postgresql\ndescription: PostgreSQL advanced open-source relational database\nlicense: MIT\ncompatibility: opencode\nmetadata:\n  audience: developers\n  category: databases\n---\n## What I do\n- Design schemas with constraints and indexes\n- Write complex queries with CTEs\n- Use JSON\u002FJSONB for flexible schemas\n- Implement full-text search\n- Optimize performance with EXPLAIN\n- Manage partitions and inheritance\n- Use array and range types\n\n## When to use me\nWhen building production applications requiring ACID compliance and advanced features.\n\n## Basic Operations\n```sql\n-- Create table with constraints\nCREATE TABLE users (\n    id SERIAL PRIMARY KEY,\n    username VARCHAR(50) UNIQUE NOT NULL,\n    email VARCHAR(255) UNIQUE NOT NULL,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    status VARCHAR(20) DEFAULT 'active'\n);\n\n-- Insert\nINSERT INTO users (username, email) VALUES ('john', 'john@example.com')\nRETURNING id, username;\n\n-- Update with returning\nUPDATE users SET status = 'inactive' WHERE id = 1 RETURNING *;\n\n-- Delete\nDELETE FROM users WHERE id = 1 RETURNING id;\n```\n\n## Queries\n```sql\n-- CTE (Common Table Expression)\nWITH active_users AS (\n    SELECT * FROM users WHERE status = 'active'\n),\nrecent_orders AS (\n    SELECT * FROM orders WHERE created_at > NOW() - INTERVAL '30 days'\n)\nSELECT u.username, COUNT(o.id) as order_count\nFROM active_users u\nLEFT JOIN recent_orders o ON u.id = o.user_id\nGROUP BY u.username;\n\n-- Window functions\nSELECT \n    name,\n    department,\n    salary,\n    AVG(salary) OVER (PARTITION BY department) as dept_avg,\n    RANK() OVER (PARTITION BY department ORDER BY salary DESC) as dept_rank\nFROM employees;\n\n-- Lateral join\nSELECT u.*, o.*\nFROM users u\nCROSS JOIN LATERAL (\n    SELECT * FROM orders o \n    WHERE o.user_id = u.id \n    ORDER BY o.created_at DESC \n    LIMIT 3\n) o;\n```\n\n## JSON\u002FJSONB\n```sql\n-- JSONB column\nCREATE TABLE events (\n    id SERIAL PRIMARY KEY,\n    data JSONB\n);\n\n-- Index on JSONB\nCREATE INDEX idx_events_data ON events USING GIN (data);\n\n-- Query JSONB\nSELECT * FROM events WHERE data->>'type' = 'click';\nSELECT * FROM events WHERE data @> '{\"user\": {\"id\": 1}}';\n\n-- Transform to rows\nSELECT * FROM events, jsonb_array_elements(data->'items') as item;\n```\n\n## Array Types\n```sql\nCREATE TABLE products (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(255),\n    tags TEXT[]\n);\n\nINSERT INTO products (name, tags) VALUES ('Widget', ARRAY['sale', 'popular']);\n\nSELECT * FROM products WHERE 'sale' = ANY(tags);\nSELECT * FROM products WHERE tags @> ARRAY['sale'];\n```\n\n## Full-Text Search\n```sql\n-- Create tsvector column\nALTER TABLE articles ADD COLUMN search_vector tsvector;\n\n-- Generate search vector\nUPDATE articles \nSET search_vector = to_tsvector('english', title || ' ' || content);\n\n-- Index\nCREATE INDEX idx_articles_search ON articles USING GIN (search_vector);\n\n-- Search with ranking\nSELECT title, ts_rank(search_vector, query) as rank\nFROM articles, to_tsquery('english', 'postgres & tutorial')\nWHERE search_vector @@ query\nORDER BY rank DESC;\n```\n\n## Partitioning\n```sql\n-- Range partitioning\nCREATE TABLE orders (\n    id BIGSERIAL,\n    created_at TIMESTAMP NOT NULL,\n    total DECIMAL(10,2)\n) PARTITION BY RANGE (created_at);\n\n-- Create partitions\nCREATE TABLE orders_2024_01 PARTITION OF orders\n    FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');\n\nCREATE TABLE orders_2024_02 PARTITION OF orders\n    FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');\n```\n\n## Performance\n```sql\n-- Analyze query\nEXPLAIN ANALYZE \nSELECT * FROM users u \nJOIN orders o ON u.id = o.user_id \nWHERE u.created_at > '2024-01-01';\n\n-- Partial index\nCREATE INDEX idx_active_users ON users (email) WHERE status = 'active';\n\n-- Composite index\nCREATE INDEX idx_orders_user_date ON orders (user_id, created_at DESC);\n\n-- Covering index\nCREATE INDEX idx_orders_covering ON orders (user_id, created_at) INCLUDE (total);\n```\n","## What I do\n- Design schemas with constraints and indexes\n- Write complex queries with CTEs\n- Use JSON\u002FJSONB for flexible schemas\n- Implement full-text search\n- Optimize performance with EXPLAIN\n- Manage partitions and inheritance\n- Use array and range types\n\n## When to use me\nWhen building production applications requiring ACID compliance and advanced features.\n\n## Basic Operations\n```sql\n-- Create table with constraints\nCREATE TABLE users (\n    id SERIAL PRIMARY KEY,\n    username VARCHAR(50) UNIQUE NOT NULL,\n    email VARCHAR(255) UNIQUE NOT NULL,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    status VARCHAR(20) DEFAULT 'active'\n);\n\n-- Insert\nINSERT INTO users (username, email) VALUES ('john', 'john@example.com')\nRETURNING id, username;\n\n-- Update with returning\nUPDATE users SET status = 'inactive' WHERE id = 1 RETURNING *;\n\n-- Delete\nDELETE FROM users WHERE id = 1 RETURNING id;\n```\n\n## Queries\n```sql\n-- CTE (Common Table Expression)\nWITH active_users AS (\n    SELECT * FROM users WHERE status = 'active'\n),\nrecent_orders AS (\n    SELECT * FROM orders WHERE created_at > NOW() - INTERVAL '30 days'\n)\nSELECT u.username, COUNT(o.id) as order_count\nFROM active_users u\nLEFT JOIN recent_orders o ON u.id = o.user_id\nGROUP BY u.username;\n\n-- Window functions\nSELECT \n    name,\n    department,\n    salary,\n    AVG(salary) OVER (PARTITION BY department) as dept_avg,\n    RANK() OVER (PARTITION BY department ORDER BY salary DESC) as dept_rank\nFROM employees;\n\n-- Lateral join\nSELECT u.*, o.*\nFROM users u\nCROSS JOIN LATERAL (\n    SELECT * FROM orders o \n    WHERE o.user_id = u.id \n    ORDER BY o.created_at DESC \n    LIMIT 3\n) o;\n```\n\n## JSON\u002FJSONB\n```sql\n-- JSONB column\nCREATE TABLE events (\n    id SERIAL PRIMARY KEY,\n    data JSONB\n);\n\n-- Index on JSONB\nCREATE INDEX idx_events_data ON events USING GIN (data);\n\n-- Query JSONB\nSELECT * FROM events WHERE data->>'type' = 'click';\nSELECT * FROM events WHERE data @> '{\"user\": {\"id\": 1}}';\n\n-- Transform to rows\nSELECT * FROM events, jsonb_array_elements(data->'items') as item;\n```\n\n## Array Types\n```sql\nCREATE TABLE products (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(255),\n    tags TEXT[]\n);\n\nINSERT INTO products (name, tags) VALUES ('Widget', ARRAY['sale', 'popular']);\n\nSELECT * FROM products WHERE 'sale' = ANY(tags);\nSELECT * FROM products WHERE tags @> ARRAY['sale'];\n```\n\n## Full-Text Search\n```sql\n-- Create tsvector column\nALTER TABLE articles ADD COLUMN search_vector tsvector;\n\n-- Generate search vector\nUPDATE articles \nSET search_vector = to_tsvector('english', title || ' ' || content);\n\n-- Index\nCREATE INDEX idx_articles_search ON articles USING GIN (search_vector);\n\n-- Search with ranking\nSELECT title, ts_rank(search_vector, query) as rank\nFROM articles, to_tsquery('english', 'postgres & tutorial')\nWHERE search_vector @@ query\nORDER BY rank DESC;\n```\n\n## Partitioning\n```sql\n-- Range partitioning\nCREATE TABLE orders (\n    id BIGSERIAL,\n    created_at TIMESTAMP NOT NULL,\n    total DECIMAL(10,2)\n) PARTITION BY RANGE (created_at);\n\n-- Create partitions\nCREATE TABLE orders_2024_01 PARTITION OF orders\n    FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');\n\nCREATE TABLE orders_2024_02 PARTITION OF orders\n    FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');\n```\n\n## Performance\n```sql\n-- Analyze query\nEXPLAIN ANALYZE \nSELECT * FROM users u \nJOIN orders o ON u.id = o.user_id \nWHERE u.created_at > '2024-01-01';\n\n-- Partial index\nCREATE INDEX idx_active_users ON users (email) WHERE status = 'active';\n\n-- Composite index\nCREATE INDEX idx_orders_user_date ON orders (user_id, created_at DESC);\n\n-- Covering index\nCREATE INDEX idx_orders_covering ON orders (user_id, created_at) INCLUDE (total);\n```\n",{"name":5,"license":14,"metadata":27,"description":7,"compatibility":20},{"audience":28,"category":21},"developers","main","5f7a3e453c98261f93d19a6a7de44ad8f7b72d41",2,"https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk","2026-03-01 06:55:40",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill postgresql",{"tool":41,"command":42},"bunx","bunx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill postgresql",{"tool":44,"command":45},"pnpm","pnpm dlx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill postgresql","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fpostgresql\u002FSKILL.md",true,[],[50,61,71,80,89,97],{"skillNo":51,"name":52,"nameZh":6,"description":53,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":56,"publishedAt":22},"01M6CXT9TXDF79BWJTMQAPB49G","xamarin","Xamarin cross-platform development","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fxamarin\u002FSKILL.md",[],[52,57,58,59,20,60],"platform","cross-platform","mobile","development",{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":22},"01M6CXT8AD04MFYDA32VW3FKAG","wrangling","Data wrangling fundamentals","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwrangling\u002FSKILL.md",[],[63,68,20,69,70],"data wrangling","science","data",{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":22},"01M6CXT717GCN7SRRNPBDP4508","windows","Windows operating system administration and scripting","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwindows\u002FSKILL.md",[],[73,78,20,79],"system","scripting",{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":22},"01M6CXT54K794NMEM3XAPZZDKT","wide-column","Wide-column data model","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwide-column\u002FSKILL.md",[],[87,21,20,88,70],"wide column","model",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":22},"01M6CXT28FMT2P4V9GZE67WA8E","wide-column-stores","Wide-column database stores","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwide-column-stores\u002FSKILL.md",[],[96,21,20,18],"wide column stores",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":22},"01M6CXT0D0M0Q4T2N7C2RX7DSN","websockets","WebSocket implementation and best practices","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwebsockets\u002FSKILL.md",[],[99,104,105,106,20,107,108],"websocket","real-time","time","best practices","implementation"]