postgresql — правило для Cursor: безопасные миграции и индексы
Правило для Cursor, которое задаёт агенту стиль работы с PostgreSQL: параметризованные запросы, TIMESTAMPTZ, индексы по внешним ключам. Пригодится, когда агент пишет SQL и миграции в вашем проекте.
.cursor/rules/postgresql.mdcЧто делает postgresql
Правило подключается к файлам **/*.sql, **/migrations/**/*.sql, **/schema.sql и **/seed.sql — то есть срабатывает там, где агент трогает схему или запросы. В схеме оно требует TIMESTAMPTZ вместо TIMESTAMP без часового пояса, UUID для публичных идентификаторов и BIGSERIAL для внутренних ключей, NOT NULL по умолчанию и явное поведение ON DELETE у внешних ключей.
В запросах — только параметры вместо подстановки строк, перечисление колонок вместо SELECT * и LIMIT на больших выборках. Перед выпуском сложного запроса правило просит прогнать EXPLAIN ANALYZE. Индексы: по каждой колонке внешнего ключа, CREATE INDEX CONCURRENTLY на живых таблицах, частичные индексы для частых фильтров.
Миграции именуются как V001__create_table.sql, добавление большой колонки идёт в несколько шагов с backfill, откат проверяется до деплоя. Отдельный раздел запрещает SELECT *, склейку SQL из строк, смену схемы в часы пик, пароли в открытом виде и TRUNCATE в коде приложения. Файл кладётся в .cursor/rules/postgresql.mdc; в других инструментах путь другой, и правило оттуда не подхватится.
Какие задачи решает
- поймать
SELECT *и склейку SQL из строк до ревью - добавить колонку на живой таблице без блокировки
- проставить индексы по всем внешним ключам
- перевести TIMESTAMP на TIMESTAMPTZ в новой схеме
- проверить откат миграции перед деплоем
Примеры запросов агенту
- Напиши миграцию
V007__add_status.sql, которая добавляет колонку в таблицу заказов без блокировки. - Перепиши этот запрос на параметризованный и убери
SELECT *. - Прогони EXPLAIN ANALYZE для выборки заказов за месяц и предложи индексы.
Как установить postgresql
Вручную: положить файлы
.cursor/rules/postgresql.mdcВо frontmatter: description, globs, alwaysApply
Вручную: положить файлы
.claude/rules/postgresql.mdПоле paths во frontmatter ограничивает файлы: globs из источника → paths
AGENTS.md
Codex читает AGENTS.md: вставьте текст правила туда
Вручную: положить файлы
.github/instructions/postgresql.instructions.mdПоле applyTo задаёт, к каким файлам применять: globs из источника → applyTo
Вручную: положить файлы
.devin/rules/postgresql.mdВручную: положить файлы
.clinerules/postgresql.mdПо шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules
Вопросы о postgresql
Как установить правило postgresql в Cursor?
Создайте файл .cursor/rules/postgresql.mdc в проекте и вставьте в него содержимое правила. Cursor подхватит его для файлов, подходящих под globs.
Что делает это правило?
Задаёт агенту соглашения по схеме, запросам, индексам, миграциям и транзакциям в PostgreSQL. Плюс список запретов вроде SELECT * и склейки SQL из строк.
Когда правило применяется?
К файлам **/*.sql, **/migrations/**/*.sql, **/schema.sql и **/seed.sql. Вне этих путей оно не действует.
Исходный текст
postgresql.mdc · CC0-1.0
--- description: "PostgreSQL production rules. Safe migrations, parameterized queries, TIMESTAMPTZ, proper indexing strategy." globs: **/*.sql, **/migrations/**/*.sql, **/schema.sql, **/seed.sql alwaysApply: false --- # PostgreSQL Rules Expert PostgreSQL developer. Safe migrations, parameterized queries, proper indexing. ## Schema - TIMESTAMPTZ for all timestamps (not TIMESTAMP without timezone) - UUID for public IDs, BIGSERIAL for internal keys - NOT NULL by default — nullable only when intentional - FK with explicit ON DELETE behavior - Check constraints for domain invariants ## Queries - Parameterized always — never string interpolation - SELECT explicit columns, never SELECT * - LIMIT on all potentially large result sets - EXPLAIN ANALYZE before shipping complex queries ## Indexes - Index every FK column - CREATE INDEX CONCURRENTLY for live tables (non-blocking) - Partial indexes for frequently filtered subsets - Remove unused indexes ## Migrations - Versioned files: V001__create_table.sql - Large column additions: multi-step with backfill - Test rollback before deploying ## Transactions - Explicit BEGIN/COMMIT for multi-statement changes - statement_timeout to prevent runaway queries - SELECT ... FOR UPDATE for row locking ## Forbidden - No SELECT * - No string-interpolated SQL - No schema changes during peak traffic - No plaintext passwords in DB - No TRUNCATE in app code
© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules