TGViewer
Сохранёнки программиста Сохранёнки программиста @prog_stuff · 6.5K subscribers
Post #3082 89
Почему nextval нельзя вычислять где угодно

Перенос вычисления с маршрутизатора на шард может ускорить SQL-запрос. Но с nextval() такая оптимизация способна изменить результат.

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

Во-вторых, важно число вызовов. Если JOIN превратил одну исходную строку в три строки результата, выражение nextval() в списке SELECT должно получить новое значение для каждой из них. Вычислить его один раз до соединения и размножить ответ нельзя.

Похожее ограничение касается now(): в PostgreSQL оно связано с началом транзакции. Независимый вызов на каждом шарде может вернуть разные моменты времени.

При распределении SQL по узлам приходится сохранять место, контекст и число вычислений выражения.

#postgresql #архитектура
More from @prog_stuff
  1. Oct 18, 2026Почему одинаковое число ядер даёт разную мощность Две реплики сервиса получили одинаковый…
  2. Oct 17, 2026Как общий кеш выдавал пустые ответы MySQL У крупного клиента Hyperdrive примерно 0,001% за…
  3. Oct 17, 2026Почему уменьшение ответа API не всегда ускоряет запрос Чтобы построить историю звёзд репоз…
  4. Oct 16, 2026Как Spotify проверяет качество при ускорившейся разработке В августе число слитых изменени…
  5. Oct 16, 2026Почему быстрое сжатие TOAST может замедлить чтение TOAST в PostgreSQL умеет сжимать больши…
  6. Oct 15, 2026Почему реплики для чтения могут замедлять запись В текущем хранилище GitHub полные копии р…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →