Дополнительные инструкции по обновлению, связанные с переходом на ядро PostgreSQL 15.5
Внимание!
Инструкция актуальна только при обновлении СУБД Pangolin с версий ранее 6.1.0 на версии 6.1.0 и выше.
Особенности миграции
При переходе на новую версию ядра для миграции данных необходимо использовать pg_dumpall
или pg_upgrade
. В документации PostgreSQL можно ознакомиться с общими рекомендациями при переходе на обновленную версию ядра для каждого из способов.
Перед обновлением на версию Pangolin 6.x.x:
- Удалите расширение
pg_pathman
, так как оно больше не поддерживается сообществом. В скриптах обновления расширения участвуют устаревшие объекты. В 6.x.x версии СУБД Pangolin появились встроенные функции по работе с партициями. Подробнее в Документе «Руководство по установке», раздел «Расширение pg_pathman и переход на декларативное секционирование данных». - Временно (на период обновления) удалите расширение
pg_repack
, так как оно содержит не поддерживаемые полиморфные объекты. По окончании обновления расширение может быть возвращено для дальнейшего использования.
Примечание:
Расширение
pg_stat_kсache
, если оно было установлено, при обновлении ядра будет пересоздано. Это может привести к сбросу статистики.
Изменения ролевой модели
Внимание!
В ядре PostgreSQL версии 15.5 проведены изменения встроенной ролевой модели, касающиеся ролей:
- pg_execute_server_program;
- pg_monitor;
- pg_read_all_settings;
- pg_read_all_stats;
- pg_read_server_files;
- pg_signal_backend;
- pg_stat_scan_tables;
- pg_write_server_files.
В связи с этим изменились правила наследования встроенных ролей, указанных выше.
Далее рассмотрен пример с ролевой моделью, в рамках которой родительская роль as_admin_read
не наследует явно роль pg_read_all_settings
. Созданы две дочерние роли - с наследованием и без.
Логика работы ролевой модели до версии 6.1.0:
\du *as_admin_read*
List of roles
┌──────────────────────────────┬───────────────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────┐
│ Role name │ Attributes │ Member of │
├──────────────────────────────┼───────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────┤
│ as_admin_read │ No inheritance, Cannot login ↵│ {pg_monitor,pg_read_all_settings,pg_read_all_stats,pg_stat_scan_tables,pg_signal_backend} │
│ │ 5 connections ↵ │ │
│ │ Password valid until infinity │ │
│ user_as_admin_read_inherit │ Cannot login │ {as_admin_read} │
│ user_as_admin_read_noinherit │ No inheritance, Cannot login │ {as_admin_read} │
└──────────────────────────────┴───────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────┘
-- Для просмотра поля pg_settings.sourceline нужны права pg_read_all_settings
-- Переключение на роль без наследования:
set session authorization user_as_admin_read_noinherit;
select name,sourceline from pg_settings where name='work_mem'\gx
┌─[ RECORD 1 ]────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ name │ work_mem │
│ sourceline │ 129 │
└─────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-- Права pg_read_all_settings (без явного наследования ни родител ьской ролью, хотя есть у дочерней) применились
-- Переключение на роль с наследованием:
set session authorization user_as_admin_read_inherit;
select name,sourceline from pg_settings where name='work_mem'\gx
┌─[ RECORD 1 ]────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ name │ work_mem │
│ sourceline │ 129 │
└─────────────────┴───────────────────────────────────────────────────────────────────────────────────── ──────────────────────────────────┘
-- Права pg_read_all_settings (без явного наследования ни родительской ролью, хотя есть у дочерней) применились
Аналогичный пример с логикой работы ролевой модели, начиная с версии 6.1.0:
\du *as_admin_read*
List of roles
┌───────────────── ─────────────┬───────────────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Role name │ Attributes │ Member of │
├──────────────────────────────┼───────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ as_admin_read │ No inheritance, Cannot login ↵│ {pg_monitor,pg_read_all_settings,pg_read_all_stats,pg_stat_scan_tables,pg_read_all_perfinsight,pg_signal_backend} │
│ │ 5 connections ↵│ │
│ │ Password valid until infinity │ │
│ user_as_admin_read_inherit │ Cannot login │ {as_admin_read} │
│ user_as_admin_read_noinherit │ No inheritance, Cannot login │ {as_admin_read} │
└──────────────────────────────┴───────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-- Для просмотра поля pg_settings.sourceline нужны права pg_read_all_settings
-- Переключение на роль без наследования:
set session authorization user_as_admin_read_noinherit;
select name,sourceline from pg_settings where name='work_mem'\gx
┌─[ RECORD 1 ]────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ name │ work_mem │
│ sourceline │ NUL │
└─────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-- Права pg_read_all_settings (без явного наследования ни родительской ролью, хотя есть у дочерней) не применились
-- Переключение на роль с наследованием:
set session authorization user_as_admin_read_inherit;
select name,sourceline from pg_settings where name='work_mem'\gx
┌─[ RECORD 1 ]────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ name │ work_mem │
│ sourceline │ NUL │
└─────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-- Права pg_read_all_settings (без явного наследования ни родительской ролью, хотя есть у дочерней) не применились
-- Установка явного наследования родительской ролью:
alter role as_admin_read inherit;
-- Переключение в роль без наследования:
set session authorization user_as_admin_read_noinherit;
select name,sourceline from pg_settings where name='work_mem'\gx
┌─[ RECORD 1 ]────┬────────────────────────────────────────────────────────────────────────────── ─────────────────────────────────────────┐
│ name │ work_mem │
│ sourceline │ NUL │
└─────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-- Права pg_read_all_settings (без явного наследования дочерней ролью) не применились
-- Переключение в роль с наследованием:
set session authorization user_as_admin_read_inherit;
select name,sourceline from pg_settings where name='work_mem'\gx
┌─[ RECORD 1 ]────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ name │ work_mem │
│ sourceline │ 166 │
└─────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-- Права pg_read_all_settings (только в случае, если все роли имеют явное наследование) применились