|  | 
| 29 | 29 |  1. Добавить проверку уникальных индексов, чтобы все колонки из индекса были с ограничением `NOT NULL`. Иначе ограничение уникальности не работает и нужно делать [по другому](https://github.com/rin-nas/postgresql-patterns-library/tree/master#%D0%BA%D0%B0%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D1%81%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BD%D0%BE%D0%B9-%D1%83%D0%BD%D0%B8%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81-%D0%B3%D0%B4%D0%B5-%D0%BE%D0%B4%D0%BD%D0%BE-%D0%B8%D0%B7-%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9-%D0%BC%D0%BE%D0%B6%D0%B5%D1%82-%D0%B1%D1%8B%D1%82%D1%8C-null). | 
| 30 | 30 |  1. Добавить параметр для игнорирования индексов `indexes_ignore_regexp`. Пример: `^pgcompact_index_\d+$`. | 
| 31 | 31 |  1. При обнаружении избыточных индексов рекомендовать удалять индексы с названием по маске `(_ccnew$|^pgcompact_index_\d+$)`, а не индексы с другими названиями | 
| 32 |  | - 1. B-деревья подходят для индексирования только скалярных данных. В массивах должен быть GIN индекс вместо btree. | 
|  | 32 | + 1. B-деревья подходят для индексирования только скалярных данных. Для массивов должен быть GIN индекс вместо btree. | 
| 33 | 33 |  1. Добавить проверку на вероятно избыточный индекс, если для `field` есть `lower(field)`, `upper(field)`, `date(field)`. Рекомендовать удалить индекс на `field`! | 
| 34 | 34 |  1. Обнаруживать (и рекомендовать удалять, а не выдавать ошибку) такие избыточные индексы: | 
| 35 | 35 |  1. `CREATE UNIQUE INDEX ON paid_services.snapshot_package_limit USING btree (order_item_id, service_id, sort(uniq(zone_ids)))` | 
|  | 
| 39 | 39 |  1. CASCADE использовать в миграциях опасно.  | 
| 40 | 40 |  Удаление может рекурсивно пойти по FK и удалить существующие объекты БД и записи в таблицах. | 
| 41 | 41 |  Рекомендовать выстроить цепочку удаления объектов в правильной последовательности. | 
|  | 42 | + 1. Валидатор даёт неправильную рекомендацию по удалению избыточного индекса. Нужно смотреть на связанные ограничения? | 
|  | 43 | + ```sql | 
|  | 44 | + ERROR: Таблица public.preset__currency уже имеет индекс CREATE UNIQUE INDEX preset__currency_id_uindex ON public.preset__currency USING btree (id) | 
|  | 45 | + Удалите избыточный индекс CREATE UNIQUE INDEX preset__currency_pk ON public.preset__currency USING btree (id) | 
|  | 46 | + CONTEXT: PL/pgSQL function db_validation.schema_validate() line 109 at RAISE  | 
|  | 47 | + ``` | 
| 42 | 48 | 1. Типы колонок | 
| 43 | 49 |  1. 🚨 Вместо устаревшего `CHAR(n) / VARCHAR(n)` нужно использовать `TEXT` с ограничением, например: `check(length(col) between 0 and 100)` | 
| 44 | 50 |  1. 🚨 Для текстовых колонок `TEXT` и `VARCHAR` без ограничения длины и с отсутствием ограничения `check(...)` необходимо делать ограничение с валидацией `check(length(col) between X and Y)` | 
|  | 
0 commit comments