Open triwada opened 1 year ago
Пока не смог вопроизвести ошибку. Расширение написано на pl/pgsql, так что его процедура обновления не может зависеть от версии СУБД - скрипт обновления всегда одинаковый и должен одинаково исполняться (или не исполняться) на любой версии СУБД. Возможно у вас произошло непреднамеренное изменение объекта схемы расширения pg_profile. Можно просто создать расширнеие заново. Если необходимо сохранить наблюления можно оставит старое расширение в соседней схеме. А еще можно попробовать перегрузить данные из старого расширения в новое через export-inport. Если повреждение не фатальное, может и получиться. Ну и наконец, если у вас СУБД PostgresPro, можно использовать поставляемое в его составе расширение pgpro_pwr. При наличии в базе расширения pgpro_stats отчеты pgpro_pwr содержат много дополнительных статистик по сравнению с pg_profile.
pgpro_pwr нет для версии 11, поэтому и используется обычный pg_profile. Проблема возникла не на одном сервере, а на нескольких. При этом обновлении до версии 4.0 проходит же нормально, т.е. проблема в переходе с 4.0 на 4.1. Завтра попробую вариант с сохранением старой схемы и экспортом/импортом данных
проблема проявляется массово на серверах с версией 11. О каком повреждении схемы идёт речь, если в самом pg_profile--4.1.sql в DDL sample_statements используются эти колонки jit*
CREATE TABLE sample_statements (
server_id integer,
sample_id integer,
userid oid,
datid oid,
queryid bigint,
queryid_md5 char(32),
plans bigint,
total_plan_time double precision,
min_plan_time double precision,
max_plan_time double precision,
mean_plan_time double precision,
stddev_plan_time double precision,
calls bigint,
total_exec_time double precision,
min_exec_time double precision,
max_exec_time double precision,
mean_exec_time double precision,
stddev_exec_time double precision,
rows bigint,
shared_blks_hit bigint,
shared_blks_read bigint,
shared_blks_dirtied bigint,
shared_blks_written bigint,
local_blks_hit bigint,
local_blks_read bigint,
local_blks_dirtied bigint,
local_blks_written bigint,
temp_blks_read bigint,
temp_blks_written bigint,
blk_read_time double precision,
blk_write_time double precision,
wal_records bigint,
wal_fpi bigint,
wal_bytes numeric,
toplevel boolean,
jit_functions bigint,
jit_generation_time double precision,
jit_inlining_count bigint,
jit_inlining_time double precision,
jit_optimization_count bigint,
jit_optimization_time double precision,
jit_emission_count bigint,
jit_emission_time double precision,
CONSTRAINT pk_sample_statements_n PRIMARY KEY (server_id, sample_id, datid, userid, queryid, toplevel),
CONSTRAINT fk_stmt_list FOREIGN KEY (server_id,queryid_md5)
REFERENCES stmt_list (server_id,queryid_md5)
ON DELETE NO ACTION ON UPDATE CASCADE
DEFERRABLE INITIALLY IMMEDIATE,
CONSTRAINT fk_statments_dat FOREIGN KEY (server_id, sample_id, datid)
REFERENCES sample_stat_database(server_id, sample_id, datid) ON DELETE CASCADE,
CONSTRAINT fk_statements_roles FOREIGN KEY (server_id, userid)
REFERENCES roles_list (server_id, userid)
ON DELETE NO ACTION ON UPDATE CASCADE
DEFERRABLE INITIALLY IMMEDIATE
);
насколько я понял, функция collect_pg_stat_statements_stats из pg_profile--4.1.sql содержит блок case, где в зависимости от версии расширения pg_stat_statements, несуществующие колонки проставляются как NULL. Ошибка же возникает в CREATE FUNCTION save_pg_stat_statements из pg_profile--4.0--4.1.sql
Воспроизвел, но пока не понял как такое получается. Это SQL скрипт и он успешно исполняется на других 11-х версиях. Буду изучать вопрос.
Ошибка при попытке обновления расширения с версии 0.3.6 до версии 4.1 в PostgresPro 11 Standard, при этом ошибка не возникает в PostgresPro 11 Enterprise