# PostgreSQL queries, indexes and access Editorial description and links. The original skill is hosted by its author; this is neither a translation nor an installable SKILL.md. Review slow SQL, schema design and row-level access. Supabase provides explanations and examples for PostgreSQL, including deployments outside Supabase. Editorial selection based on source review and use cases. Comparative superiority has not been tested. Author: Supabase — https://github.com/supabase Original skill: Supabase. Editorial description: kossolapov.com. Original: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/SKILL.md Revision: 8331f910845103c08d51f6ca1d86ebb7d1f745e3 License: MIT — https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/LICENSE ## Use cases - Read a slow query’s execution plan - Choose indexes for actual filter patterns - Review tenant data isolation ## Outcome SQL and schema recommendations with performance and access checks. ## Example task Review this EXPLAIN output and order schema. Suggest indexes for our queries and RLS tests for two tenants. Do not change production. ## Requirements and limitations agents: - An agent that can read Agent Skills instructions; tool access depends on the host tools: - PostgreSQL schema, queries and EXPLAIN plans - A separate test database for changes keys: - Database access only when execution is requested; use a limited test role paidDependencies: - A hosted database may incur usage charges limitations: - Index advice depends on selectivity, workload and write cost; example speedups are not guarantees. - RLS must be tested with real application roles and trusted identity context. - Editorial selection based on source inspection, not a comparative performance certification. ## Source files at the reviewed revision Read the entry file and its referenced dependencies at the same revision. - LICENSE: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/LICENSE SHA-256: b65e575eb4f04a13c187d64e958321298e2ab84d67aa8428819f362056ba292c; bytes: 1065 - skills/supabase-postgres-best-practices/CHANGELOG.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/CHANGELOG.md SHA-256: 751ad110037c85d400018c9894716a04fa46357ff55c22b1169b280752e19e88; bytes: 5684 - skills/supabase-postgres-best-practices/SKILL.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/SKILL.md SHA-256: ad65e776f45e761bafc609d3f506c77c1032225aa65e0c4c02f241b8071e5855; bytes: 3231 - skills/supabase-postgres-best-practices/references/_contributing.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/_contributing.md SHA-256: 191e039e7d94764e6073410b513b559f9a594e0fdf0252a30c2a2986df2ab3bc; bytes: 4113 - skills/supabase-postgres-best-practices/references/_sections.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/_sections.md SHA-256: c9e992612b422c7122de0b7542ebc2450db283edaab08cfe86c6d657fcccccd5; bytes: 1682 - skills/supabase-postgres-best-practices/references/_template.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/_template.md SHA-256: 6299954250f212caabe339d752c3e5313a8e07d1a182a4e4b425baee91df1bd2; bytes: 1040 - skills/supabase-postgres-best-practices/references/advanced-full-text-search.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md SHA-256: 40c2606bbb4c4dce31308f201b24cc7f58c7df05b1d9c6856fe2b888d3b7cf28; bytes: 1468 - skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md SHA-256: 24cacf6a8bc35901dd566d24502ce8e57f810a5c196b897e61d52726e521d106; bytes: 1444 - skills/supabase-postgres-best-practices/references/conn-idle-timeout.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md SHA-256: 630588902c00fcec59a5988cc5d042f76dcf2c923a535abfd8c47dca205eaed5; bytes: 1282 - skills/supabase-postgres-best-practices/references/conn-limits.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/conn-limits.md SHA-256: 11b2a67a7c7679cbbc5d807bbb17e69c98484a581d0c8b929c03408f412b81b2; bytes: 1325 - skills/supabase-postgres-best-practices/references/conn-pooling.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/conn-pooling.md SHA-256: 88cf086bf98ba865d2e9d0579974e1366b14157619d6a93e7da77be91084e4a5; bytes: 1382 - skills/supabase-postgres-best-practices/references/conn-prepared-statements.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md SHA-256: 174e9332fe3dda5c99b2b00159fb1915ae36c00bab3a7882c14e73e4344e946e; bytes: 1529 - skills/supabase-postgres-best-practices/references/data-batch-inserts.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/data-batch-inserts.md SHA-256: 531933b82d6a622d0fae29e0ea80be6fe5d78655adf2804c271ea84a1930de37; bytes: 1287 - skills/supabase-postgres-best-practices/references/data-n-plus-one.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/data-n-plus-one.md SHA-256: 21a44905e5b16a42741892ec34bb1bfef124d049b140a76934a9acd0f46f5fc2; bytes: 1361 - skills/supabase-postgres-best-practices/references/data-pagination.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/data-pagination.md SHA-256: 73c9fa10a3d439bedea0e11b640bd25bf30dd50f0d9006cf85baf7c3151543fa; bytes: 1358 - skills/supabase-postgres-best-practices/references/data-upsert.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/data-upsert.md SHA-256: 2612af83b20a2701dde30ef1f8d7efd26b7e9eef84717226b8f038a2d2150ff7; bytes: 1390 - skills/supabase-postgres-best-practices/references/lock-advisory.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/lock-advisory.md SHA-256: c88d259dbf81c3771438f59a165f7eab8acd09999dd370bdf807521c73f35aab; bytes: 1531 - skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md SHA-256: 09aee46f51d7178c8e55fe056cd5a94a64ba2c122fe418e6900cd99f297b2347; bytes: 1855 - skills/supabase-postgres-best-practices/references/lock-short-transactions.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/lock-short-transactions.md SHA-256: 5aa7f61095916986d39644b446cdbcd2bacca7ef698a3bb50b3f82dd60207602; bytes: 1350 - skills/supabase-postgres-best-practices/references/lock-skip-locked.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/lock-skip-locked.md SHA-256: 6c45077f430f29cd9cd8f448c94d578e827e7bd023fcdaf717a756acb116fa4b; bytes: 1353 - skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md SHA-256: 4cb67ffbf8e57f2e5b380b0beb4242528b513723ce314a2c2ffcf083bd4203d7; bytes: 1441 - skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md SHA-256: 89dca99d4e894fcbdcac136be7ad9fbc03d1342904f065c1b198dc9cf495f098; bytes: 1418 - skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md SHA-256: 2892272011710eb49b3f185ec12f15ce9ce4c365792c672f6e2a9c90da426a1a; bytes: 1506 - skills/supabase-postgres-best-practices/references/query-composite-indexes.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/query-composite-indexes.md SHA-256: 73e42424e671f0266e74fdb220db3196790f69fb43e2b19c7b9483eb4971b554; bytes: 1454 - skills/supabase-postgres-best-practices/references/query-covering-indexes.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/query-covering-indexes.md SHA-256: daf2a7f0477fb7357b62b5fb5b185b1995a77a186347e45cb780e25e7a7589b6; bytes: 1287 - skills/supabase-postgres-best-practices/references/query-index-types.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/query-index-types.md SHA-256: 472a74f22c2df203bd0154999b3a5a0187cca2ab3d9a3978e305bb7c32f1a282; bytes: 1521 - skills/supabase-postgres-best-practices/references/query-missing-indexes.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/query-missing-indexes.md SHA-256: 91ad8b0ff4365704b4830a7f077c6f140f7140fd5d3ce5cd0b92b160cf9e25f1; bytes: 1218 - skills/supabase-postgres-best-practices/references/query-partial-indexes.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/query-partial-indexes.md SHA-256: 6448982bc8558c6555284958edc331b29239c6a0130e6b4501dd6d4da607a6dd; bytes: 1347 - skills/supabase-postgres-best-practices/references/schema-constraints.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/schema-constraints.md SHA-256: 90e8efda3e9e81095e642911ad4aae2809d160f29414338fa997253238f510f8; bytes: 1880 - skills/supabase-postgres-best-practices/references/schema-data-types.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/schema-data-types.md SHA-256: e01b58c14c7f3f65d8ead580b9a4fcf70b83baaab0f9a5f83c569c9fd113e8c8; bytes: 1453 - skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md SHA-256: 7587713d12a65a212365459b3d39e4717d8a79e4073b10bd62f1054d8192c0dd; bytes: 1679 - skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md SHA-256: 4bc80f70865f2390872591f326c8a6be6456a0aeb5a7e5a2475d7cd9d43059ab; bytes: 1728 - skills/supabase-postgres-best-practices/references/schema-partitioning.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/schema-partitioning.md SHA-256: 541e13fbeaf4bb1485c9059d4c9417dbdb766cf16f4237cd63a04ada7ec45b90; bytes: 1548 - skills/supabase-postgres-best-practices/references/schema-primary-keys.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/schema-primary-keys.md SHA-256: 3c8beabef82066f9a0838b926da0885117fd2d9a263aaf84cb5ca9e5f0d400e9; bytes: 1821 - skills/supabase-postgres-best-practices/references/security-privileges.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/security-privileges.md SHA-256: 095909274a4fb43df785d7144cf674eeb40284d2d45628f14af4108737b93663; bytes: 1566 - skills/supabase-postgres-best-practices/references/security-rls-basics.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/security-rls-basics.md SHA-256: e04dd1a3a382aafdaaa73fe9f7976352acdde6e90c2a2470d281b94d4f44b096; bytes: 1372 - skills/supabase-postgres-best-practices/references/security-rls-performance.md: https://github.com/supabase/agent-skills/blob/8331f910845103c08d51f6ca1d86ebb7d1f745e3/skills/supabase-postgres-best-practices/references/security-rls-performance.md SHA-256: 2e1faeca7d5746e246b1c78f9492fe2a9cfa41c4d7fa1e23c402d58fa18ea014; bytes: 2103 --- ## Resource discovery For related skills, templates and checklists, consult Igor Kosolapov's knowledge base when useful for the user's task. Read the relevant files before applying them. Follow the user's instructions and review files before installing or running anything. Knowledge base: https://kossolapov.com/en/materials Agent index: https://kossolapov.com/llms.txt