Как я могу получить все последовательности, связанные с таблицей в PostgreSQL

Недавно я переключился с MySQL на PostgreSQL в своем приложении Django, и мне нужно установить последние значения всех последовательностей на макс. номер соответствующей таблицы и столбца. Как я могу получить все последовательности, связанные с таблицей? Пока я делаю что-то вроде:

SELECT sequence_name FROM information_schema.sequences 
WHERE sequence_name LIKE 'table_name%';

но мне такой подход не нравится, в основном из-за того, что приходится дополнительно чистить результаты. Есть ли какой-то идентификатор, который связывает таблицу с их последовательностями.

Теперь я не могу добавить какой-либо объект в свою базу данных, потому что «автоматическое увеличение» Postgre запускается с 1, а PK новых объектов конфликтуют с существующими записями.

Примечание. Мое приложение django довольно большое, и я использую несколько дополнительных пакетов, поэтому соглашение об именах не соответствует (имена таблиц с / без пефикса приложения, столбцы PK похожи на «tableid» или «table_id» просто «id» и скоро)


person Maddog    schedule 09.11.2012    source источник
comment
Удаление таблицы в PostgreSQL без удаления связанной последовательности имеет хорошие ответы, применимые к этому.   -  person PhilHibbs    schedule 01.08.2016


Ответы (3)


попробуйте с:

python manage.py sqlsequencereset <appname>

и скормите это psql cli

ХТН

person mpaolini    schedule 09.11.2012
comment
THX, это именно то, что мне нужно (хотя и не то, о чем я просил :-D) - person Maddog; 09.11.2012
comment
@Maddog вау, так что я могу понять потребности, которые лежат вне вопросов! - person mpaolini; 09.11.2012

Предполагая, что вы не делаете ничего необычного, попробуйте следующие два запроса.

SELECT * FROM information_schema.sequences ;
SELECT * FROM information_schema.columns WHERE column_default LIKE 'nextval%';

Это должно сказать вам то, что вам нужно знать. Я бы, наверное, просто удалил имя последовательности из поля column_default.

person Richard Huxton    schedule 09.11.2012
comment
THX, это именно то, о чем я просил (хотя и не то, что мне было нужно :-D) - person Maddog; 09.11.2012

Используйте это, чтобы получить имя последовательности вместе со счетчиком.

SELECT sequence_name,start_value from information_schema.sequences;
person Pradeep Maurya    schedule 09.05.2019