PostgreSQL - отрицательные индексы

Sep 20, 22

Предыстория

В целом всё описание есть в вопросе на Хабр Q&A. Что-то ломает логику БД и в базу летит отрицательный индекс, который ломает всю логику программы дальше.

Выясняем, что к чему

Сначала выясняем, где у нас хранятся логи:

SHOW data_directory

Включим логирование запросов через БД (можно сделать через правку конфигурационного файла postgresql.conf, но для этого нам нужно будет дергать службу):

-- Включаем логирование
ALTER SYSTEM SET log_duration TO on
-- Включаем продолжительность выполнения всех команд
ALTER SYSTEM SET log_min_duration_statement TO 1
-- Пишем в отдельную директорию
ALTER SYSTEM SET log_directory = 'pg_log_mylogdir'
ALTER SYSTEM SET log_filename = 'mylogdir-%Y-%m-%d_%H%M%S.log'

Для применения параметров используем команду

pg_reload_conf()
-- Показать значения всех конфигурационных параметров с описаниями.
-- show all

Смотри в логи и видим, что в них индекс не участвует:

Logs query PostgreSQL

По другим логам было выяснено, что БД отклоняет запросы при превышении количества подключений к ней. Повысим с 100 до 200:

ALTER SYSTEM SET max_connections TO 200

А помогло это или нет - узнаем позже.