PostgreSQL Code Review Assistant Expert PostgreSQL code review for ${selection} (or entire project if no selection). Focus on PostgreSQL-specific best practices, anti-patterns, and quality standards that are unique to PostgreSQL. 🎯 PostgreSQL-Specific Review Areas JSONB Best Practices Array Operations Review PostgreSQL Schema Design Review Custom Types and Domains 🔍 PostgreSQL-Specific Anti-Patterns Performance Anti-Patterns - Avoiding PostgreSQL-specific indexes : Not using GIN/GiST for appropriate data types - Misusing JSONB : Treating JSONB like a simple string field - Ignoring array ope…

)\n);\n\n-- Add JSONB GIN index for metadata queries\nCREATE INDEX idx_users_metadata ON users USING gin(metadata);\n```\n\n### Custom Types and Domains\n```sql\n-- ❌ BAD: Using generic types for specific data\nCREATE TABLE transactions (\n amount DECIMAL(10,2),\n currency VARCHAR(3),\n status VARCHAR(20)\n);\n\n-- ✅ GOOD: PostgreSQL custom types\nCREATE TYPE currency_code AS ENUM ('USD', 'EUR', 'GBP', 'JPY');\nCREATE TYPE transaction_status AS ENUM ('pending', 'completed', 'failed', 'cancelled');\nCREATE DOMAIN positive_amount AS DECIMAL(10,2) CHECK (VALUE > 0);\n\nCREATE TABLE transactions (\n amount positive_amount NOT NULL,\n currency currency_code NOT NULL,\n status transaction_status DEFAULT 'pending'\n);\n```\n\n## 🔍 PostgreSQL-Specific Anti-Patterns\n\n### Performance Anti-Patterns\n- **Avoiding PostgreSQL-specific indexes**: Not using GIN/GiST for appropriate data types\n- **Misusing JSONB**: Treating JSONB like a simple string field\n- **Ignoring array operators**: Using inefficient array operations\n- **Poor partition key selection**: Not leveraging PostgreSQL partitioning effectively\n\n### Schema Design Issues\n- **Not using ENUM types**: Using VARCHAR for limited value sets\n- **Ignoring constraints**: Missing CHECK constraints for data validation\n- **Wrong data types**: Using VARCHAR instead of TEXT or CITEXT\n- **Missing JSONB structure**: Unstructured JSONB without validation\n\n### Function and Trigger Issues\n```sql\n-- ❌ BAD: Inefficient trigger function\nCREATE OR REPLACE FUNCTION update_modified_time()\nRETURNS TRIGGER AS $\nBEGIN\n NEW.updated_at = NOW(); -- Should use TIMESTAMPTZ\n RETURN NEW;\nEND;\n$ LANGUAGE plpgsql;\n\n-- ✅ GOOD: Optimized trigger function\nCREATE OR REPLACE FUNCTION update_modified_time()\nRETURNS TRIGGER AS $\nBEGIN\n NEW.updated_at = CURRENT_TIMESTAMP;\n RETURN NEW;\nEND;\n$ LANGUAGE plpgsql;\n\n-- Set trigger to fire only when needed\nCREATE TRIGGER update_modified_time_trigger\n BEFORE UPDATE ON table_name\n FOR EACH ROW\n WHEN (OLD.* IS DISTINCT FROM NEW.*)\n EXECUTE FUNCTION update_modified_time();\n```\n\n## 📊 PostgreSQL Extension Usage Review\n\n### Extension Best Practices\n```sql\n-- ✅ Check if extension exists before creating\nCREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";\nCREATE EXTENSION IF NOT EXISTS \"pgcrypto\";\nCREATE EXTENSION IF NOT EXISTS \"pg_trgm\";\n\n-- ✅ Use extensions appropriately\n-- UUID generation\nSELECT uuid_generate_v4();\n\n-- Password hashing\nSELECT crypt('password', gen_salt('bf'));\n\n-- Fuzzy text matching\nSELECT word_similarity('postgres', 'postgre');\n```\n\n## 🛡️ PostgreSQL Security Review\n\n### Row Level Security (RLS)\n```sql\n-- ✅ GOOD: Implementing RLS\nALTER TABLE sensitive_data ENABLE ROW LEVEL SECURITY;\n\nCREATE POLICY user_data_policy ON sensitive_data\n FOR ALL TO application_role\n USING (user_id = current_setting('app.current_user_id')::INTEGER);\n```\n\n### Privilege Management\n```sql\n-- ❌ BAD: Overly broad permissions\nGRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO app_user;\n\n-- ✅ GOOD: Granular permissions\nGRANT SELECT, INSERT, UPDATE ON specific_table TO app_user;\nGRANT USAGE ON SEQUENCE specific_table_id_seq TO app_user;\n```\n\n## 🎯 PostgreSQL Code Quality Checklist\n\n### Schema Design\n- [ ] Using appropriate PostgreSQL data types (CITEXT, JSONB, arrays)\n- [ ] Leveraging ENUM types for constrained values\n- [ ] Implementing proper CHECK constraints\n- [ ] Using TIMESTAMPTZ instead of TIMESTAMP\n- [ ] Defining custom domains for reusable constraints\n\n### Performance Considerations\n- [ ] Appropriate index types (GIN for JSONB/arrays, GiST for ranges)\n- [ ] JSONB queries using containment operators (@>, ?)\n- [ ] Array operations using PostgreSQL-specific operators\n- [ ] Proper use of window functions and CTEs\n- [ ] Efficient use of PostgreSQL-specific functions\n\n### PostgreSQL Features Utilization\n- [ ] Using extensions where appropriate\n- [ ] Implementing stored procedures in PL/pgSQL when beneficial\n- [ ] Leveraging PostgreSQL's advanced SQL features\n- [ ] Using PostgreSQL-specific optimization techniques\n- [ ] Implementing proper error handling in functions\n\n### Security and Compliance\n- [ ] Row Level Security (RLS) implementation where needed\n- [ ] Proper role and privilege management\n- [ ] Using PostgreSQL's built-in encryption functions\n- [ ] Implementing audit trails with PostgreSQL features\n\n## 📝 PostgreSQL-Specific Review Guidelines\n\n1. **Data Type Optimization**: Ensure PostgreSQL-specific types are used appropriately\n2. **Index Strategy**: Review index types and ensure PostgreSQL-specific indexes are utilized\n3. **JSONB Structure**: Validate JSONB schema design and query patterns\n4. **Function Quality**: Review PL/pgSQL functions for efficiency and best practices\n5. **Extension Usage**: Verify appropriate use of PostgreSQL extensions\n6. **Performance Features**: Check utilization of PostgreSQL's advanced features\n7. **Security Implementation**: Review PostgreSQL-specific security features\n\nFocus on PostgreSQL's unique capabilities and ensure the code leverages what makes PostgreSQL special rather than treating it as a generic SQL database.\n---","attachment_filenames":[],"attachments":[],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"PostgreSQL Code Review Assistant","type":"text"}]},{"type":"paragraph","content":[{"text":"Expert PostgreSQL code review for ${selection} (or entire project if no selection). Focus on PostgreSQL-specific best practices, anti-patterns, and quality standards that are unique to PostgreSQL.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"🎯 PostgreSQL-Specific Review Areas","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"JSONB Best Practices","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"sql"},"content":[{"text":"-- ❌ BAD: Inefficient JSONB usage\nSELECT * FROM orders WHERE data->>'status' = 'shipped'; -- No index support\n\n-- ✅ GOOD: Indexable JSONB queries\nCREATE INDEX idx_orders_status ON orders USING gin((data->'status'));\nSELECT * FROM orders WHERE data @> '{\"status\": \"shipped\"}';\n\n-- ❌ BAD: Deep nesting without consideration\nUPDATE orders SET data = data || '{\"shipping\":{\"tracking\":{\"number\":\"123\"}}}';\n\n-- ✅ GOOD: Structured JSONB with validation\nALTER TABLE orders ADD CONSTRAINT valid_status \nCHECK (data->>'status' IN ('pending', 'shipped', 'delivered'));","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Array Operations Review","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"sql"},"content":[{"text":"-- ❌ BAD: Inefficient array operations\nSELECT * FROM products WHERE 'electronics' = ANY(categories); -- No index\n\n-- ✅ GOOD: GIN indexed array queries\nCREATE INDEX idx_products_categories ON products USING gin(categories);\nSELECT * FROM products WHERE categories @> ARRAY['electronics'];\n\n-- ❌ BAD: Array concatenation in loops\n-- This would be inefficient in a function/procedure\n\n-- ✅ GOOD: Bulk array operations\nUPDATE products SET categories = categories || ARRAY['new_category']\nWHERE id IN (SELECT id FROM products WHERE condition);","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"PostgreSQL Schema Design Review","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"sql"},"content":[{"text":"-- ❌ BAD: Not using PostgreSQL features\nCREATE TABLE users (\n id INTEGER,\n email VARCHAR(255),\n created_at TIMESTAMP\n);\n\n-- ✅ GOOD: PostgreSQL-optimized schema\nCREATE TABLE users (\n id BIGSERIAL PRIMARY KEY,\n email CITEXT UNIQUE NOT NULL, -- Case-insensitive email\n created_at TIMESTAMPTZ DEFAULT NOW(),\n metadata JSONB DEFAULT '{}',\n CONSTRAINT valid_email CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}

PostgreSQL Code Review Assistant Expert PostgreSQL code review for ${selection} (or entire project if no selection). Focus on PostgreSQL-specific best practices, anti-patterns, and quality standards that are unique to PostgreSQL. 🎯 PostgreSQL-Specific Review Areas JSONB Best Practices Array Operations Review PostgreSQL Schema Design Review Custom Types and Domains 🔍 PostgreSQL-Specific Anti-Patterns Performance Anti-Patterns - Avoiding PostgreSQL-specific indexes : Not using GIN/GiST for appropriate data types - Misusing JSONB : Treating JSONB like a simple string field - Ignoring array ope…

)\n);\n\n-- Add JSONB GIN index for metadata queries\nCREATE INDEX idx_users_metadata ON users USING gin(metadata);","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Custom Types and Domains","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"sql"},"content":[{"text":"-- ❌ BAD: Using generic types for specific data\nCREATE TABLE transactions (\n amount DECIMAL(10,2),\n currency VARCHAR(3),\n status VARCHAR(20)\n);\n\n-- ✅ GOOD: PostgreSQL custom types\nCREATE TYPE currency_code AS ENUM ('USD', 'EUR', 'GBP', 'JPY');\nCREATE TYPE transaction_status AS ENUM ('pending', 'completed', 'failed', 'cancelled');\nCREATE DOMAIN positive_amount AS DECIMAL(10,2) CHECK (VALUE > 0);\n\nCREATE TABLE transactions (\n amount positive_amount NOT NULL,\n currency currency_code NOT NULL,\n status transaction_status DEFAULT 'pending'\n);","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"🔍 PostgreSQL-Specific Anti-Patterns","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Performance Anti-Patterns","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Avoiding PostgreSQL-specific indexes","type":"text","marks":[{"type":"strong"}]},{"text":": Not using GIN/GiST for appropriate data types","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Misusing JSONB","type":"text","marks":[{"type":"strong"}]},{"text":": Treating JSONB like a simple string field","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Ignoring array operators","type":"text","marks":[{"type":"strong"}]},{"text":": Using inefficient array operations","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Poor partition key selection","type":"text","marks":[{"type":"strong"}]},{"text":": Not leveraging PostgreSQL partitioning effectively","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Schema Design Issues","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Not using ENUM types","type":"text","marks":[{"type":"strong"}]},{"text":": Using VARCHAR for limited value sets","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Ignoring constraints","type":"text","marks":[{"type":"strong"}]},{"text":": Missing CHECK constraints for data validation","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Wrong data types","type":"text","marks":[{"type":"strong"}]},{"text":": Using VARCHAR instead of TEXT or CITEXT","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Missing JSONB structure","type":"text","marks":[{"type":"strong"}]},{"text":": Unstructured JSONB without validation","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Function and Trigger Issues","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"sql"},"content":[{"text":"-- ❌ BAD: Inefficient trigger function\nCREATE OR REPLACE FUNCTION update_modified_time()\nRETURNS TRIGGER AS $\nBEGIN\n NEW.updated_at = NOW(); -- Should use TIMESTAMPTZ\n RETURN NEW;\nEND;\n$ LANGUAGE plpgsql;\n\n-- ✅ GOOD: Optimized trigger function\nCREATE OR REPLACE FUNCTION update_modified_time()\nRETURNS TRIGGER AS $\nBEGIN\n NEW.updated_at = CURRENT_TIMESTAMP;\n RETURN NEW;\nEND;\n$ LANGUAGE plpgsql;\n\n-- Set trigger to fire only when needed\nCREATE TRIGGER update_modified_time_trigger\n BEFORE UPDATE ON table_name\n FOR EACH ROW\n WHEN (OLD.* IS DISTINCT FROM NEW.*)\n EXECUTE FUNCTION update_modified_time();","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"📊 PostgreSQL Extension Usage Review","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Extension Best Practices","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"sql"},"content":[{"text":"-- ✅ Check if extension exists before creating\nCREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";\nCREATE EXTENSION IF NOT EXISTS \"pgcrypto\";\nCREATE EXTENSION IF NOT EXISTS \"pg_trgm\";\n\n-- ✅ Use extensions appropriately\n-- UUID generation\nSELECT uuid_generate_v4();\n\n-- Password hashing\nSELECT crypt('password', gen_salt('bf'));\n\n-- Fuzzy text matching\nSELECT word_similarity('postgres', 'postgre');","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"🛡️ PostgreSQL Security Review","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Row Level Security (RLS)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"sql"},"content":[{"text":"-- ✅ GOOD: Implementing RLS\nALTER TABLE sensitive_data ENABLE ROW LEVEL SECURITY;\n\nCREATE POLICY user_data_policy ON sensitive_data\n FOR ALL TO application_role\n USING (user_id = current_setting('app.current_user_id')::INTEGER);","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Privilege Management","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"sql"},"content":[{"text":"-- ❌ BAD: Overly broad permissions\nGRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO app_user;\n\n-- ✅ GOOD: Granular permissions\nGRANT SELECT, INSERT, UPDATE ON specific_table TO app_user;\nGRANT USAGE ON SEQUENCE specific_table_id_seq TO app_user;","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"🎯 PostgreSQL Code Quality Checklist","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Schema Design","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Using appropriate PostgreSQL data types (CITEXT, JSONB, arrays)","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Leveraging ENUM types for constrained values","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Implementing proper CHECK constraints","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Using TIMESTAMPTZ instead of TIMESTAMP","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Defining custom domains for reusable constraints","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Performance Considerations","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Appropriate index types (GIN for JSONB/arrays, GiST for ranges)","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"JSONB queries using containment operators (@>, ?)","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Array operations using PostgreSQL-specific operators","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Proper use of window functions and CTEs","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Efficient use of PostgreSQL-specific functions","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"PostgreSQL Features Utilization","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Using extensions where appropriate","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Implementing stored procedures in PL/pgSQL when beneficial","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Leveraging PostgreSQL's advanced SQL features","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Using PostgreSQL-specific optimization techniques","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Implementing proper error handling in functions","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Security and Compliance","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Row Level Security (RLS) implementation where needed","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Proper role and privilege management","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Using PostgreSQL's built-in encryption functions","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"Implementing audit trails with PostgreSQL features","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"📝 PostgreSQL-Specific Review Guidelines","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Data Type Optimization","type":"text","marks":[{"type":"strong"}]},{"text":": Ensure PostgreSQL-specific types are used appropriately","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Index Strategy","type":"text","marks":[{"type":"strong"}]},{"text":": Review index types and ensure PostgreSQL-specific indexes are utilized","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"JSONB Structure","type":"text","marks":[{"type":"strong"}]},{"text":": Validate JSONB schema design and query patterns","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Function Quality","type":"text","marks":[{"type":"strong"}]},{"text":": Review PL/pgSQL functions for efficiency and best practices","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Extension Usage","type":"text","marks":[{"type":"strong"}]},{"text":": Verify appropriate use of PostgreSQL extensions","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Performance Features","type":"text","marks":[{"type":"strong"}]},{"text":": Check utilization of PostgreSQL's advanced features","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Security Implementation","type":"text","marks":[{"type":"strong"}]},{"text":": Review PostgreSQL-specific security features","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Focus on PostgreSQL's unique capabilities and ensure the code leverages what makes PostgreSQL special rather than treating it as a generic SQL database.","type":"text"}]}]},"metadata":{"date":"2026-06-05","name":"postgresql-code-review","author":"@skillopedia","source":{"stars":34253,"repo_name":"awesome-copilot","origin_url":"https://github.com/github/awesome-copilot/blob/HEAD/skills/postgresql-code-review/SKILL.md","repo_owner":"github","body_sha256":"377655cd539dcb9ca4d27a43cc38d4c700aaa25ea7d4450a10631a3a291c4cf2","cluster_key":"9f9ca688f42c970ec58196009b7adeef43ca88d297a353237f9f6f683120984f","clean_bundle":{"format":"clean-skill-bundle-v1","source":"github/awesome-copilot/skills/postgresql-code-review/SKILL.md","bundle_sha256":"0e4d8c8325844636d4547049183962f5f97eb3c7de2f306b0a1785e10083407f","attachment_count":0,"text_attachments":0,"binary_attachments":0},"cluster_size":2,"skill_md_path":"skills/postgresql-code-review/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"security","category_label":"Security"},"exact_dupes_collapsed_into_this":1},"version":"v1","category":"security","import_tag":"clean-skills-v1","description":"PostgreSQL-specific code review assistant focusing on PostgreSQL best practices, anti-patterns, and unique quality standards. Covers JSONB operations, array usage, custom types, schema design, function optimization, and PostgreSQL-exclusive security features like Row Level Security (RLS)."}},"renderedAt":1782979387672}

PostgreSQL Code Review Assistant Expert PostgreSQL code review for ${selection} (or entire project if no selection). Focus on PostgreSQL-specific best practices, anti-patterns, and quality standards that are unique to PostgreSQL. 🎯 PostgreSQL-Specific Review Areas JSONB Best Practices Array Operations Review PostgreSQL Schema Design Review Custom Types and Domains 🔍 PostgreSQL-Specific Anti-Patterns Performance Anti-Patterns - Avoiding PostgreSQL-specific indexes : Not using GIN/GiST for appropriate data types - Misusing JSONB : Treating JSONB like a simple string field - Ignoring array ope…