«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как сбросить последовательность первичных ключей Postgres из синхронизации с таблицами строк?

Как сбросить последовательность первичных ключей Postgres из синхронизации с таблицами строк?

Опубликовано в 2025-04-17
Просматривать:779

How Can I Reset a Postgres Primary Key Sequence Out of Sync with Table Rows?

разрешение Postgresql Первичного ключа Расходы

]

первичная последовательность ключей, смешанная с рядами вашей таблицы, может вызвать разочаровывающие дублирующие ошибки ключей. Это часто случается во время импорта данных или восстановления, где целостность последовательности не сохранена. Вот как это исправить:

]

1. Найдите высший идентификатор:

используйте функцию max () , чтобы идентифицировать самый большой идентификатор в вашей таблице:

]
SELECT MAX(id) FROM your_table;
]

2. Получите следующее значение последовательности:

]

этот запрос показывает следующее сгенерированное значение последовательности:

]
SELECT nextval('your_table_id_seq');

3. Сбросить последовательность (при необходимости):

]

Если следующее значение последовательности меньше максимального идентификатора таблицы, сбросьте последовательность в транзакции, чтобы предотвратить одновременные вставки:

]
BEGIN;
LOCK TABLE your_table IN EXCLUSIVE MODE;
SELECT setval('your_table_id_seq', (SELECT GREATEST(MAX(your_id), nextval('your_table_id_seq') - 1) FROM your_table));
COMMIT;

источник: адаптирован из обсуждения рубинового форума.

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3