Фон
Служба, выполняющая одинаковые задачи для нескольких похожих экземпляров PostgreSQL.Большинство сред работают на версии 10, но некоторые - на 9. По крайней мере, в краткосрочной перспективе их обновление невозможно.
Проблема
Для повышения производительности мы использовалиФункция PostgreSQL 10 CREATE STATISTICS
.Он отлично работает в средах на v10, но не поддерживается на v9.
Один из способов справиться с этим мог бы заключаться в дублировании каждого сценария, который использует CREATE STATISTICS
, сохранении его копии без этого оператора ивыберите сценарий для запуска на уровне приложения.Я бы хотел избежать этого, так как он содержит много дублирующегося кода.
Я пытался обмануть его, создавая статистику только в том случае, если скрипт находит подходящую версию (код ниже), но в версии 9все еще воспринимается как синтаксическая ошибка.
DO $$
-- server_version_num is a version number melted to an integer:
-- 9.6.6 -> 09.06.06 -> 90606
-- 10.0.1 -> 10.00.01 -> 100001
DECLARE pg_version int := current_setting('server_version_num');
BEGIN
IF pg_version >= 100000 THEN
CREATE STATISTICS table_1_related_col_group_a (NDISTINCT)
ON col_a1, col_a2
FROM schema_1.table_1;
CREATE STATISTICS table_2_related_col_group_b (NDISTINCT)
ON col_b1, col_b2, col_b3
FROM schema_1.table_2;
END IF;
END $$ LANGUAGE plpgsql;
Вопрос
Есть ли способ запустить сценарий с неподдерживаемым оператором, таким как CREATE STATISTICS
без опрокидывания postgres 9 off?