TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
УКЦ ФОРС | Обучение IT

24 Aug, 12:35

Открыть в Telegram Поделиться Пожаловаться

🛠️ В таблице далеко не два миллиарда строк, а INSERT уже не получает новый ID

Причина может быть не в количестве строк.

А в sequence.

Sequence — не счётчик сохранённых записей. Она выдаёт значения.

Если nextval() вернул номер, а транзакция потом откатилась, значение не возвращается обратно.

Поэтому:

count(*)
MAX(id)
last_value

могут различаться.

Что может расходовать sequence:

— rollback после nextval();
— конфликтующая вставка;
— прямой вызов nextval();
— CACHE;
— другие потребители sequence.

Gaps сами по себе не означают проблему.

Проблема начинается, когда генератор приближается к пределу.

С чего начать:

SELECT pg_get_serial_sequence('public.orders', 'id');

Затем параметры sequence:

SELECT
schemaname,
sequencename,
data_type,
max_value,
increment_by,
cycle,
cache_size,
last_value
FROM pg_sequences
WHERE schemaname = 'public'
AND sequencename = 'orders_id_seq';

И данные таблицы:

SELECT max(id), count(*)
FROM public.orders;

Важно: last_value — не точный следующий ID. При cache он может быть больше последнего реально выданного значения, а иногда может быть NULL.

Проверяйте оба предела:

тип ID-колонки
и
MAXVALUE sequence

Расширить integer до bigint недостаточно, если sequence осталась со старым пределом. Менять только sequence тоже бессмысленно, если колонка не принимает новый диапазон.

При NO CYCLE после исчерпания диапазона следующий nextval() завершится ошибкой.

CYCLE для PK — опасный вариант: sequence может вернуться к уже существующим ID и получить конфликт уникальности.

Главная ошибка — считать MAX(id) реальным показателем остатка sequence.

Сохраните проверку, которую стоит добавить для старых таблиц с постоянно растущим ID.

🔹🔹🔹🔹

13 0 0
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot