{"id":"f71ac26f-a433-4d2b-baaa-4246c97304fe","shortId":"XQjwPQ","kind":"skill","title":"Postgresql Optimization","tagline":"Awesome Copilot skill by Github","description":"# PostgreSQL Development Assistant\n\nExpert PostgreSQL guidance for ${selection} (or entire project if no selection). Focus on PostgreSQL-specific features, optimization patterns, and advanced capabilities.\n\n## � PostgreSQL-Specific Features\n\n### JSONB Operations\n```sql\n-- Advanced JSONB queries\nCREATE TABLE events (\n    id SERIAL PRIMARY KEY,\n    data JSONB NOT NULL,\n    created_at TIMESTAMPTZ DEFAULT NOW()\n);\n\n-- GIN index for JSONB performance\nCREATE INDEX idx_events_data_gin ON events USING gin(data);\n\n-- JSONB containment and path queries\nSELECT * FROM events \nWHERE data @> '{\"type\": \"login\"}'\n  AND data #>> '{user,role}' = 'admin';\n\n-- JSONB aggregation\nSELECT jsonb_agg(data) FROM events WHERE data ? 'user_id';\n```\n\n### Array Operations\n```sql\n-- PostgreSQL arrays\nCREATE TABLE posts (\n    id SERIAL PRIMARY KEY,\n    tags TEXT[],\n    categories INTEGER[]\n);\n\n-- Array queries and operations\nSELECT * FROM posts WHERE 'postgresql' = ANY(tags);\nSELECT * FROM posts WHERE tags && ARRAY['database', 'sql'];\nSELECT * FROM posts WHERE array_length(tags, 1) > 3;\n\n-- Array aggregation\nSELECT array_agg(DISTINCT category) FROM posts, unnest(categories) as category;\n```\n\n### Window Functions & Analytics\n```sql\n-- Advanced window functions\nSELECT \n    product_id,\n    sale_date,\n    amount,\n    -- Running totals\n    SUM(amount) OVER (PARTITION BY product_id ORDER BY sale_date) as running_total,\n    -- Moving averages\n    AVG(amount) OVER (PARTITION BY product_id ORDER BY sale_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as moving_avg,\n    -- Rankings\n    DENSE_RANK() OVER (PARTITION BY EXTRACT(month FROM sale_date) ORDER BY amount DESC) as monthly_rank,\n    -- Lag/Lead for comparisons\n    LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sale_date) as prev_amount\nFROM sales;\n```\n\n### Full-Text Search\n```sql\n-- PostgreSQL full-text search\nCREATE TABLE documents (\n    id SERIAL PRIMARY KEY,\n    title TEXT,\n    content TEXT,\n    search_vector tsvector\n);\n\n-- Update search vector\nUPDATE documents \nSET search_vector = to_tsvector('english', title || ' ' || content);\n\n-- GIN index for search performance\nCREATE INDEX idx_documents_search ON documents USING gin(search_vector);\n\n-- Search queries\nSELECT * FROM documents \nWHERE search_vector @@ plainto_tsquery('english', 'postgresql database');\n\n-- Ranking results\nSELECT *, ts_rank(search_vector, plainto_tsquery('postgresql')) as rank\nFROM documents \nWHERE search_vector @@ plainto_tsquery('postgresql')\nORDER BY rank DESC;\n```\n\n## � PostgreSQL Performance Tuning\n\n### Query Optimization\n```sql\n-- EXPLAIN ANALYZE for performance analysis\nEXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) \nSELECT u.name, COUNT(o.id) as order_count\nFROM users u\nLEFT JOIN orders o ON u.id = o.user_id\nWHERE u.created_at > '2024-01-01'::date\nGROUP BY u.id, u.name;\n\n-- Identify slow queries from pg_stat_statements\nSELECT query, calls, total_time, mean_time, rows,\n       100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent\nFROM pg_stat_statements \nORDER BY total_time DESC \nLIMIT 10;\n```\n\n### Index Strategies\n```sql\n-- Composite indexes for multi-column queries\nCREATE INDEX idx_orders_user_date ON orders(user_id, order_date);\n\n-- Partial indexes for filtered queries\nCREATE INDEX idx_active_users ON users(created_at) WHERE status = 'active';\n\n-- Expression indexes for computed values\nCREATE INDEX idx_users_lower_email ON users(lower(email));\n\n-- Covering indexes to avoid table lookups\nCREATE INDEX idx_orders_covering ON orders(user_id, status) INCLUDE (total, created_at);\n```\n\n### Connection & Memory Management\n```sql\n-- Check connection usage\nSELECT count(*) as connections, state \nFROM pg_stat_activity \nGROUP BY state;\n\n-- Monitor memory usage\nSELECT name, setting, unit \nFROM pg_settings \nWHERE name IN ('shared_buffers', 'work_mem', 'maintenance_work_mem');\n```\n\n## �️ PostgreSQL Advanced Data Types\n\n### Custom Types & Domains\n```sql\n-- Create custom types\nCREATE TYPE address_type AS (\n    street TEXT,\n    city TEXT,\n    postal_code TEXT,\n    country TEXT\n);\n\nCREATE TYPE order_status AS ENUM ('pending', 'processing', 'shipped', 'delivered', 'cancelled');\n\n-- Use domains for data validation\nCREATE DOMAIN email_address AS TEXT \nCHECK (VALUE ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$');\n\n-- Table using custom types\nCREATE TABLE customers (\n    id SERIAL PRIMARY KEY,\n    email email_address NOT NULL,\n    address address_type,\n    status order_status DEFAULT 'pending'\n);\n```\n\n### Range Types\n```sql\n-- PostgreSQL range types\nCREATE TABLE reservations (\n    id SERIAL PRIMARY KEY,\n    room_id INTEGER,\n    reservation_period tstzrange,\n    price_range numrange\n);\n\n-- Range queries\nSELECT * FROM reservations \nWHERE reservation_period && tstzrange('2024-07-20', '2024-07-25');\n\n-- Exclude overlapping ranges\nALTER TABLE reservations \nADD CONSTRAINT no_overlap \nEXCLUDE USING gist (room_id WITH =, reservation_period WITH &&);\n```\n\n### Geometric Types\n```sql\n-- PostgreSQL geometric types\nCREATE TABLE locations (\n    id SERIAL PRIMARY KEY,\n    name TEXT,\n    coordinates POINT,\n    coverage CIRCLE,\n    service_area POLYGON\n);\n\n-- Geometric queries\nSELECT name FROM locations \nWHERE coordinates <-> point(40.7128, -74.0060) < 10; -- Within 10 units\n\n-- GiST index for geometric data\nCREATE INDEX idx_locations_coords ON locations USING gist(coordinates);\n```\n\n## 📊 PostgreSQL Extensions & Tools\n\n### Useful Extensions\n```sql\n-- Enable commonly used extensions\nCREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";    -- UUID generation\nCREATE EXTENSION IF NOT EXISTS \"pgcrypto\";     -- Cryptographic functions\nCREATE EXTENSION IF NOT EXISTS \"unaccent\";     -- Remove accents from text\nCREATE EXTENSION IF NOT EXISTS \"pg_trgm\";      -- Trigram matching\nCREATE EXTENSION IF NOT EXISTS \"btree_gin\";    -- GIN indexes for btree types\n\n-- Using extensions\nSELECT uuid_generate_v4();                     -- Generate UUIDs\nSELECT crypt('password', gen_salt('bf'));      -- Hash passwords\nSELECT similarity('postgresql', 'postgersql'); -- Fuzzy matching\n```\n\n### Monitoring & Maintenance\n```sql\n-- Database size and growth\nSELECT pg_size_pretty(pg_database_size(current_database())) as db_size;\n\n-- Table and index sizes\nSELECT schemaname, tablename,\n       pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size\nFROM pg_tables \nORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;\n\n-- Index usage statistics\nSELECT schemaname, tablename, indexname, idx_scan, idx_tup_read, idx_tup_fetch\nFROM pg_stat_user_indexes \nWHERE idx_scan = 0;  -- Unused indexes\n```\n\n### PostgreSQL-Specific Optimization Tips\n- **Use EXPLAIN (ANALYZE, BUFFERS)** for detailed query analysis\n- **Configure postgresql.conf** for your workload (OLTP vs OLAP)\n- **Use connection pooling** (pgbouncer) for high-concurrency applications\n- **Regular VACUUM and ANALYZE** for optimal performance\n- **Partition large tables** using PostgreSQL 10+ declarative partitioning\n- **Use pg_stat_statements** for query performance monitoring\n\n## 📊 Monitoring and Maintenance\n\n### Query Performance Monitoring\n```sql\n-- Identify slow queries\nSELECT query, calls, total_time, mean_time, rows\nFROM pg_stat_statements \nORDER BY total_time DESC \nLIMIT 10;\n\n-- Check index usage\nSELECT schemaname, tablename, indexname, idx_scan, idx_tup_read, idx_tup_fetch\nFROM pg_stat_user_indexes \nWHERE idx_scan = 0;\n```\n\n### Database Maintenance\n- **VACUUM and ANALYZE**: Regular maintenance for performance\n- **Index Maintenance**: Monitor and rebuild fragmented indexes\n- **Statistics Updates**: Keep query planner statistics current\n- **Log Analysis**: Regular review of PostgreSQL logs\n\n## 🛠️ Common Query Patterns\n\n### Pagination\n```sql\n-- ❌ BAD: OFFSET for large datasets\nSELECT * FROM products ORDER BY id OFFSET 10000 LIMIT 20;\n\n-- ✅ GOOD: Cursor-based pagination\nSELECT * FROM products \nWHERE id > $last_id \nORDER BY id \nLIMIT 20;\n```\n\n### Aggregation\n```sql\n-- ❌ BAD: Inefficient grouping\nSELECT user_id, COUNT(*) \nFROM orders \nWHERE order_date >= '2024-01-01' \nGROUP BY user_id;\n\n-- ✅ GOOD: Optimized with partial index\nCREATE INDEX idx_orders_recent ON orders(user_id) \nWHERE order_date >= '2024-01-01';\n\nSELECT user_id, COUNT(*) \nFROM orders \nWHERE order_date >= '2024-01-01' \nGROUP BY user_id;\n```\n\n### JSON Queries\n```sql\n-- ❌ BAD: Inefficient JSON querying\nSELECT * FROM users WHERE data::text LIKE '%admin%';\n\n-- ✅ GOOD: JSONB operators and GIN index\nCREATE INDEX idx_users_data_gin ON users USING gin(data);\n\nSELECT * FROM users WHERE data @> '{\"role\": \"admin\"}';\n```\n\n## 📋 Optimization Checklist\n\n### Query Analysis\n- [ ] Run EXPLAIN ANALYZE for expensive queries\n- [ ] Check for sequential scans on large tables\n- [ ] Verify appropriate join algorithms\n- [ ] Review WHERE clause selectivity\n- [ ] Analyze sort and aggregation operations\n\n### Index Strategy\n- [ ] Create indexes for frequently queried columns\n- [ ] Use composite indexes for multi-column searches\n- [ ] Consider partial indexes for filtered queries\n- [ ] Remove unused or duplicate indexes\n- [ ] Monitor index bloat and fragmentation\n\n### Security Review\n- [ ] Use parameterized queries exclusively\n- [ ] Implement proper access controls\n- [ ] Enable row-level security where needed\n- [ ] Audit sensitive data access\n- [ ] Use secure connection methods\n\n### Performance Monitoring\n- [ ] Set up query performance monitoring\n- [ ] Configure appropriate log settings\n- [ ] Monitor connection pool usage\n- [ ] Track database growth and maintenance needs\n- [ ] Set up alerting for performance degradation\n\n## 🎯 Optimization Output Format\n\n### Query Analysis Results\n```\n## Query Performance Analysis\n\n**Original Query**:\n[Original SQL with performance issues]\n\n**Issues Identified**:\n- Sequential scan on large table (Cost: 15000.00)\n- Missing index on frequently queried column\n- Inefficient join order\n\n**Optimized Query**:\n[Improved SQL with explanations]\n\n**Recommended Indexes**:\n```sql\nCREATE INDEX idx_table_column ON table(column);\n```\n\n**Performance Impact**: Expected 80% improvement in execution time\n```\n\n## 🚀 Advanced PostgreSQL Features\n\n### Window Functions\n```sql\n-- Running totals and rankings\nSELECT \n    product_id,\n    order_date,\n    amount,\n    SUM(amount) OVER (PARTITION BY product_id ORDER BY order_date) as running_total,\n    ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY amount DESC) as rank\nFROM sales;\n```\n\n### Common Table Expressions (CTEs)\n```sql\n-- Recursive queries for hierarchical data\nWITH RECURSIVE category_tree AS (\n    SELECT id, name, parent_id, 1 as level\n    FROM categories \n    WHERE parent_id IS NULL\n    \n    UNION ALL\n    \n    SELECT c.id, c.name, c.parent_id, ct.level + 1\n    FROM categories c\n    JOIN category_tree ct ON c.parent_id = ct.id\n)\nSELECT * FROM category_tree ORDER BY level, name;\n```\n\nFocus on providing specific, actionable PostgreSQL optimizations that improve query performance, security, and maintainability while leveraging PostgreSQL's advanced features.","tags":["postgresql","optimization","awesome","copilot","github"],"capabilities":["skill","source-github","category-awesome-copilot"],"categories":["awesome-copilot"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/github/awesome-copilot/postgresql-optimization","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under github/awesome-copilot","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T19:40:25.558Z","embedding":null,"createdAt":"2026-04-18T20:24:55.465Z","updatedAt":"2026-04-22T19:40:25.558Z","lastSeenAt":"2026-04-22T19:40:25.558Z","tsv":"'-01':379,380,1080,1081,1104,1105,1116,1117 '-07':660,663 '-20':661 '-25':664 '-74.0060':716 '0':412,889,997 '1':146,236,1399,1417 '10':426,717,719,934,973 '100.0':401 '10000':1045 '15000.00':1299 '2':205,603 '20':1047,1064 '2024':378,659,662,1079,1103,1115 '3':147 '40.7128':715 '80':1329 '9':593,598 'a-za-z':599 'a-za-z0':589,594 'accent':771 'access':1231,1243 'action':1441 'activ':457,465,516 'add':671 'address':553,584,617,620,621 'admin':91,1136,1160 'advanc':31,40,165,541,1334,1455 'agg':96,152 'aggreg':93,149,1065,1189 'alert':1271 'algorithm':1181 'alter':668 'amount':173,177,193,226,235,248,1349,1351,1373 'analysi':351,904,1022,1164,1279,1283 'analyt':163 'analyz':348,353,899,925,1002,1167,1186 'applic':921 'appropri':1179,1256 'area':704 'array':104,108,120,136,143,148,151 'assist':10 'audit':1240 'averag':191 'avg':192,212 'avoid':484 'awesom':3 'bad':1033,1067,1125 'base':1051 'bf':808 'blks':403,407,410 'bloat':1220 'btree':788,793 'buffer':354,534,900 'c':1420 'c.id':1412 'c.name':1413 'c.parent':1414,1426 'call':395,957 'cancel':575 'capabl':32 'categori':118,154,158,160,1391,1403,1419,1422,1431 'category-awesome-copilot' 'check':505,587,974,1171 'checklist':1162 'circl':702 'citi':558 'claus':1184 'code':561 'column':435,1198,1205,1305,1322,1325 'common':743,1028,1379 'comparison':233 'composit':430,1200 'comput':469 'concurr':920 'configur':905,1255 'connect':501,506,511,914,1246,1260 'consid':1207 'constraint':672 'contain':76 'content':270,287 'control':1232 'coord':730 'coordin':699,713,735 'copilot':4 'cost':1298 'count':359,363,509,1073,1109 'countri':563 'cover':481,491 'coverag':701 'creat':43,54,64,109,261,293,437,454,461,471,487,499,548,551,565,581,608,634,690,726,746,756,764,774,783,1091,1143,1193,1318 'crypt':804 'cryptograph':762 'ct':1424 'ct.id':1428 'ct.level':1416 'ctes':1382 'current':208,831,1020 'cursor':1050 'cursor-bas':1049 'custom':544,549,606,610 'data':50,68,74,84,88,97,101,542,579,725,1133,1147,1153,1158,1242,1388 'databas':137,316,820,829,832,998,1264 'dataset':1037 'date':172,186,202,223,245,381,442,448,1078,1102,1114,1348,1360 'db':834 'declar':935 'default':57,626 'degrad':1274 'deliv':574 'dens':214 'desc':227,340,424,865,971,1374 'detail':902 'develop':9 'distinct':153 'document':263,279,296,299,308,330 'domain':546,577,582 'duplic':1216 'email':476,480,583,615,616 'enabl':742,1233 'english':285,314 'entir':17 'enum':570 'event':45,67,71,82,99 'exclud':665,675 'exclus':1228 'execut':1332 'exist':750,760,768,778,787 'expect':1328 'expens':1169 'expert':11 'explain':347,352,898,1166 'explan':1314 'express':466,1381 'extens':737,740,745,747,757,765,775,784,796 'extract':219 'featur':27,36,1336,1456 'fetch':880,988 'filter':452,1211 'focus':22,1437 'format':355,1277 'fragment':1012,1222 'frequent':1196,1303 'full':252,258 'full-text':251,257 'function':162,167,763,1338 'fuzzi':815 'gen':806 'generat':755,799,801 'geometr':684,688,706,724 'gin':59,69,73,288,301,789,790,1141,1148,1152 'gist':677,721,734 'github':7 'good':1048,1086,1137 'group':382,517,1069,1082,1118 'growth':823,1265 'guidanc':13 'hash':809 'hierarch':1387 'high':919 'high-concurr':918 'hit':404,408,414 'id':46,103,112,170,182,198,241,264,374,446,495,611,637,642,679,693,1043,1057,1059,1062,1072,1085,1099,1108,1121,1346,1356,1370,1395,1398,1406,1415,1427 'identifi':386,952,1292 'idx':66,295,439,456,473,489,728,873,875,878,887,981,983,986,995,1093,1145,1320 'impact':1327 'implement':1229 'improv':1311,1330,1445 'includ':497 'index':60,65,289,294,427,431,438,450,455,467,472,482,488,722,727,791,838,866,885,891,975,993,1007,1013,1090,1092,1142,1144,1191,1194,1201,1209,1217,1219,1301,1316,1319 'indexnam':872,980 'ineffici':1068,1126,1306 'integ':119,643 'issu':1290,1291 'join':368,1180,1307,1421 'json':1122,1127 'jsonb':37,41,51,62,75,92,95,1138 'keep':1016 'key':49,115,267,614,640,696 'lag':234 'lag/lead':231 'larg':930,1036,1176,1296 'last':1058 'left':367 'length':144 'level':1236,1401,1435 'leverag':1452 'like':1135 'limit':425,972,1046,1063 'locat':692,711,729,732 'log':1021,1027,1257 'login':86 'lookup':486 'lower':475,479 'maintain':1450 'mainten':537,818,947,999,1004,1008,1267 'manag':503 'match':782,816 'mean':398,960 'mem':536,539 'memori':502,521 'method':1247 'miss':1300 'monitor':520,817,944,945,950,1009,1218,1249,1254,1259 'month':220,229 'move':190,211 'multi':434,1204 'multi-column':433,1203 'name':524,531,697,709,1396,1436 'need':1239,1268 'null':53,619,1408 'nullif':405 'number':1365 'numrang':649 'o':370 'o.id':360 'o.user':373 'offset':1034,1044 'olap':912 'oltp':910 'oper':38,105,123,1139,1190 'optim':2,28,345,895,927,1087,1161,1275,1309,1443 'order':183,199,224,242,337,362,369,420,440,444,447,490,493,567,624,857,967,1041,1060,1075,1077,1094,1097,1101,1111,1113,1308,1347,1357,1359,1371,1433 'origin':1284,1286 'ossp':753 'output':1276 'overlap':666,674 'pagin':1031,1052 'parameter':1226 'parent':1397,1405 'partial':449,1089,1208 'partit':179,195,217,238,929,936,1353,1367 'password':805,810 'path':78 'pattern':29,1030 'pend':571,627 'percent':415 'perform':63,292,342,350,928,943,949,1006,1248,1253,1273,1282,1289,1326,1447 'period':645,657,682 'pg':390,417,514,528,779,825,828,843,846,855,859,882,938,964,990 'pgbouncer':916 'pgcrypto':761 'plainto':312,324,334 'planner':1018 'point':700,714 'polygon':705 'pool':915,1261 'post':111,126,133,141,156 'postal':560 'postgersql':814 'postgresql':1,8,12,25,34,107,128,256,315,326,336,341,540,631,687,736,813,893,933,1026,1335,1442,1453 'postgresql-specif':24,33,892 'postgresql.conf':906 'preced':206 'pretti':827,845 'prev':247 'price':647 'primari':48,114,266,613,639,695 'process':572 'product':169,181,197,240,1040,1055,1345,1355,1369 'project':18 'proper':1230 'provid':1439 'queri':42,79,121,305,344,388,394,436,453,651,707,903,942,948,954,956,1017,1029,1123,1128,1163,1170,1197,1212,1227,1252,1278,1281,1285,1304,1310,1385,1446 'rang':628,632,648,650,667 'rank':213,215,230,317,321,328,339,1343,1376 'read':411,877,985 'rebuild':1011 'recent':1095 'recommend':1315 'recurs':1384,1390 'regular':922,1003,1023 'relat':848,861 'remov':770,1213 'reserv':636,644,654,656,670,681 'result':318,1280 'review':1024,1182,1224 'role':90,1159 'room':641,678 'row':203,209,400,962,1235,1364 'row-level':1234 'run':174,188,1165,1340,1362 'sale':171,185,201,222,244,250,1378 'salt':807 'scan':874,888,982,996,1174,1294 'schemanam':841,850,863,870,978 'search':254,260,272,276,281,291,297,302,304,310,322,332,1206 'secur':1223,1237,1245,1448 'select':15,21,80,94,124,131,139,150,168,306,319,357,393,508,523,652,708,797,803,811,824,840,869,955,977,1038,1053,1070,1106,1129,1154,1185,1344,1394,1411,1429 'sensit':1241 'sequenti':1173,1293 'serial':47,113,265,612,638,694 'servic':703 'set':280,525,529,1250,1258,1269 'share':402,406,409,533 'ship':573 'similar':812 'size':821,826,830,835,839,844,849,853,862 'skill':5 'slow':387,953 'sort':1187 'source-github' 'specif':26,35,894,1440 'sql':39,106,138,164,255,346,429,504,547,630,686,741,819,951,1032,1066,1124,1287,1312,1317,1339,1383 'stat':391,418,515,883,939,965,991 'state':512,519 'statement':392,419,940,966 'statist':868,1014,1019 'status':464,496,568,623,625 'strategi':428,1192 'street':556 'sum':176,1350 'tabl':44,110,262,485,604,609,635,669,691,836,856,931,1177,1297,1321,1324,1380 'tablenam':842,851,864,871,979 'tag':116,130,135,145 'text':117,253,259,269,271,356,557,559,562,564,586,698,773,1134 'time':397,399,423,959,961,970,1333 'timestamptz':56 'tip':896 'titl':268,286 'tool':738 'total':175,189,396,422,498,847,860,958,969,1341,1363 'track':1263 'tree':1392,1423,1432 'trgm':780 'trigram':781 'ts':320 'tsqueri':313,325,335 'tstzrang':646,658 'tsvector':274,284 'tune':343 'tup':876,879,984,987 'type':85,543,545,550,552,554,566,607,622,629,633,685,689,794 'u':366 'u.created':376 'u.id':372,384 'u.name':358,385 'unacc':769 'union':1409 'unit':526,720 'unnest':157 'unus':890,1214 'updat':275,278,1015 'usag':507,522,867,976,1262 'use':72,300,576,605,676,733,739,744,795,897,913,932,937,1151,1199,1225,1244 'user':89,102,365,441,445,458,460,474,478,494,884,992,1071,1084,1098,1107,1120,1131,1146,1150,1156 'uuid':752,754,798,802 'uuid-ossp':751 'v4':800 'vacuum':923,1000 'valid':580 'valu':470,588 'vector':273,277,282,303,311,323,333 'verifi':1178 'vs':911 'window':161,166,1337 'within':718 'work':535,538 'workload':909 'z':602 'z0':592,597 'za':591,596,601","prices":[{"id":"c2484ec3-42c0-4a10-8278-8b2ffa719366","listingId":"f71ac26f-a433-4d2b-baaa-4246c97304fe","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"github","category":"awesome-copilot","install_from":"skills.sh"},"createdAt":"2026-04-18T20:24:55.465Z"}],"sources":[{"listingId":"f71ac26f-a433-4d2b-baaa-4246c97304fe","source":"github","sourceId":"github/awesome-copilot/postgresql-optimization","sourceUrl":"https://github.com/github/awesome-copilot/tree/main/skills/postgresql-optimization","isPrimary":false,"firstSeenAt":"2026-04-18T21:50:33.799Z","lastSeenAt":"2026-04-22T18:53:02.236Z"},{"listingId":"f71ac26f-a433-4d2b-baaa-4246c97304fe","source":"skills_sh","sourceId":"github/awesome-copilot/postgresql-optimization","sourceUrl":"https://skills.sh/github/awesome-copilot/postgresql-optimization","isPrimary":true,"firstSeenAt":"2026-04-18T20:24:55.465Z","lastSeenAt":"2026-04-22T19:40:25.558Z"}],"details":{"listingId":"f71ac26f-a433-4d2b-baaa-4246c97304fe","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"github","slug":"postgresql-optimization","source":"skills_sh","category":"awesome-copilot","skills_sh_url":"https://skills.sh/github/awesome-copilot/postgresql-optimization"},"updatedAt":"2026-04-22T19:40:25.558Z"}}