Как узнать ведётся ли журнал действий над таблицей в PostgreSQL или нет?
При переносе больших данных из одной таблицы в другую, для ускорения процесса обычно отключают ведение журнала для новой таблицы.
Для отключения логирования используется команда:
ALTER TABLE a.t_clients SET UNLOGGED;
После переноса данных нужно вручную включить логирование на новой таблице.
ALTER TABLE a.t_clients SET LOGGED;
Может сложиться такая ситуация, что включение ведения журнала для новой таблицы не будет включено вручную. Банально кто-то забудет это сделать.
Можно принудительно включить все нужные журналы таблиц по списку. Но это же глупо. Как понять текущее состояние — журналируется ли таблица или нет?
Решение
PostgreSQL даёт возможность заранее узнать текущий статус ведения журнала для таблицы. Для этого нужно обратиться к системному представлению «pg_class«.
Для проверки логирования нас будут интересовать два столбца:
- relpersistence
- relname — имя таблицы без схемы
Если у вас имена таблиц могут повторяться в разных схемах, тогда дополнительно укажите «oid».
select relpersistence, relname from pg_class where relname = 'tpart_dp20m_1';
В моём случае мы получили значение «p» в столбце «relpersistence«. Значит таблица является постоянной и она логируется.
Всего существует 3 варианта значений для столбца «relpersistence» в системном представлении «pg_class«:
- p = постоянная таблица/последовательность (permanent)
- u = нежурналируемая таблица/последовательность (unlogged)
- t = временная таблица/последовательность (temporary)
Информационные ссылки
Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org
Официальный сайт СУБД PostgreSQL — https://www.postgresql.org
Официальный сайт клиента DBeaver для СУБД PostgreSQL — https://dbeaver.io