У меня есть таблица PostgreSQL 9.5, которая настроена на цикл, когда идентификатор первичного ключа достигает максимального значения. Ради аргумента, пусть максимальное значение идентификатора может быть 999,999. Я добавлю запятые, чтобы было легче читать цифры.
Мы выполняем задание, которое удаляет данные из таблицы старше 45 дней. Предположим, что таблица теперь содержит только записи с идентификаторами 999 998 и 999 999.
Идентификатор первичного ключа возвращается к 1 и записано еще 20 записей. Мне нужно сделать его общим, чтобы я не делал никаких предположений о том, сколько было написано. В моих реальных потребностях, мне все равно, сколько было написано.
Как выбрать записи без получения дубликатов с идентификаторами 999 998 и 999 999?
Например:
SELECT * FROM my_table WHERE ID >0;
Would return (in no particular order):
999,998
999,999
1
2
...
20
В моем случае я должен публиковать все записи, которые были записаны в таблицу, посреднику сообщений. Я веду отдельную таблицу, которая отслеживает идентификатор строки и метку времени последней опубликованной записи. Псевдопросмотр / псевдоалгоритм для определения того, какие новые записи нужно написать, выглядит примерно так. Оператор IF обрабатывает, когда идентификатор первичного ключа возвращается к 1, так как мне нужно прочитать новую запись, записанную после циклического идентификатора:
SELECT * from my_table WHERE id > last_written_id
PUBLISH each record
if ID of last record published == MAX_TABLE_ID (e.g 999,999):
??? What to do here? I need to get the newest records where ID >= 1 but less than the oldest record I have
Я понимаю, что «код» груб, но на данный момент это просто идея, поэтому кода нет.
Спасибо