Postgresql
September 17, 2023

PostgreSQL. Too many range table entries.

Недавно столкнулся с таким багом PostgreSQL. Жил себе да поживал в продакшне джоб Pentaho, в котором в том числе вызывается всякий pl/pgsql. И внезапно начал валиться с постгресовской ошибкой "too many range table entries". Версия PostgreSQL 13.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit.

Логи выдали, что падёж происходит на элементарном апдейте типа:

update t1 set f = my_val
where t1.log_id in (select distinct log_id from t2)

Код не мой, признаюсь, не хотел бы я встретиться в тёмном переулке с человеком, который пишет в in select distinct (Данил, привет).

Методом тыка выяснилось, что если этот distinct убрать, то и ошибки too many range table entries тоже не будет.

--не возникает ошибка
update t1 set f = my_val
where t1.log_id in (select log_id from t2)

Видимо, роляет то, что обе таблицы - и t1 и t2 - секционированные. Партиций, навскидку, по паре сотен в каждой.

P.S. Написал о баге на официальном сайте. Но эти русофобы message зарежектили. Видимо, потому что я написал об этом на русском.

Такая жизнь.

P.P.S. Написал о баге в Postgres Pro - они оказались не русофобами, ответили на русском.