Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Поправить последовательности в set_autoincrement_counters (#138)
Во время работы над добавлением PostgreSQL (#29), мы добавили функцию `set_autoincrement_counters`. При этом получение последовательностей, счетчик которых необходимо изменить, было реализовано довольно примитивным способом: ```python queries = "" for tablename in Base.metadata.tables: queries += f"ALTER SEQUENCE {tablename}_id_seq RESTART WITH 10000;" ``` В этой реализации, для получения последовательностей мы просто использовали имена таблиц, предполагая, что все наши последовательности будут связаны с колонками с названием `id`. Но такая реализация оказалась достаточно хрупкой и у неё есть ряд очевидных проблем: - если например в какой-либо таблице, появится колонка с автогенерируемой последовательностью и названием отличающимся от `id` (например `account_id`), то наша функция не сможет найти такие последовательности, т.к. она будет пытаться изменить `table_id_seq` вместо `table_account_id_seq`; - если в какой-либо таблице вообще не будет ни одной колонки с автогенерирумой последовательностью, то запрос ```python f"ALTER SEQUENCE {tablename}_id_seq RESTART WITH 10000;" ``` упадёт с ошибкой, т.к. алгоритм использует все существующие таблицы в бд и не учитывает, есть ли в них вообще какие-либо последовательности, или нет. Для решения этих проблем можно использовать следующий запрос, который получит имена всех последовательностей, объявленных в нашей бд в явном виде: ```sql SELECT sequencename FROM pg_sequences; ``` Таким образом нам не надо будет проходить по всем таблицам и "угадывать" названия предполагаемых последовательностей - мы просто можем получить все последовательности в явном виде. В рамках этой задачи необходимо поправить получение последовательностей, счетчик которых необходимо изменить в функции `set_autoincrement_counters`, используя указанный выше sql запрос.
- Loading branch information