Исправление пробелов / пробелов в числах, сгенерированных последовательностью Postgres - PullRequest
2 голосов
/ 03 июня 2011

У меня есть база данных postgres, которая широко использует последовательности для генерации первичных ключей таблиц. После многократного использования этой базы данных, т. Е. Операции добавления / обновления / удаления, столбцы, использующие последовательности для первичных ключей, теперь имеют много дыр / пробелов, и само значение последовательности очень велико.

Мой вопрос: есть ли способы, которыми мы можем исправить эти пробелы в Первичных Ключах? который должен опустить int, сбить максимальное значение числа в этих столбцах и затем сбросить последовательность?

Примечание. Многие из этих столбцов также упоминаются другими столбцами как ForeignKeys.

Ответы [ 3 ]

1 голос
/ 04 июня 2011

Эту проблему можно решить, но для базы данных это дорого (особенно для ввода-вывода) и гарантированно повторяется. Я бы не беспокоился об этой проблеме. Если вы приблизитесь к 4B, обновите ваш первичный и внешний ключи до BIGSERIAL и BIGINT. Если вы приближаетесь к 2 ^ 64 ... ну ... мне было бы интересно узнать больше о вашем заявлении. : ~]

1 голос
/ 03 июня 2011

Если вы чувствуете необходимость заполнить пробелы в автоматически сгенерированных порядковых номерах Posgresql, у меня возникает ощущение, что вам нужно другое поле в вашей таблице, например, какое-то «число», которое вы увеличиваете программно, либо в своем коде, либо в спусковой крючок.

0 голосов
/ 04 июня 2011

Postgres позволяет обновлять PK, хотя многие считают, что это плохая практика.Таким образом, вы можете заблокировать стол и UPDATE.(Вы можете создать таблицу oldkey, newkey всевозможными способами, например, оконную функцию.) Все отношения FK должны быть помечены как каскадные.Затем вы можете сбросить текущее значение последовательности идентификаторов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...