PostgreSQL | Как проверить логируется ли таблица или нет?

PostgreSQL | Как проверить логируется ли таблица или нет?

Как узнать ведётся ли журнал действий над таблицей в PostgreSQL или нет?

При переносе больших данных из одной таблицы в другую, для ускорения процесса обычно отключают ведение журнала для новой таблицы.

Для отключения логирования используется команда:

ALTER TABLE a.t_clients SET UNLOGGED;

После переноса данных нужно вручную включить логирование на новой таблице.

ALTER TABLE a.t_clients SET LOGGED;

Может сложиться такая ситуация, что включение ведения журнала для новой таблицы не будет включено вручную. Банально кто-то забудет это сделать.

Можно принудительно включить все нужные журналы таблиц по списку. Но это же глупо. Как понять текущее состояние — журналируется ли таблица или нет?

 

Решение

PostgreSQL даёт возможность заранее узнать текущий статус ведения журнала для таблицы. Для этого нужно обратиться к системному представлению «pg_class«.

Для проверки логирования нас будут интересовать два столбца:

  1. relpersistence
  2. relname — имя таблицы без схемы

Если у вас имена таблиц могут повторяться в разных схемах, тогда дополнительно укажите «oid».

select relpersistence, relname from pg_class where relname = 'tpart_dp20m_1';

В моём случае мы получили значение «p» в столбце «relpersistence«. Значит таблица является постоянной и она логируется.

relpersistence - p - PostgreSQL
relpersistence — p — PostgreSQL

Всего существует 3 варианта значений для столбца «relpersistence» в системном представлении «pg_class«:

  1. p = постоянная таблица/последовательность (permanent)
  2. u = нежурналируемая таблица/последовательность (unlogged)
  3. t = временная таблица/последовательность (temporary)

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org

Официальный сайт клиента DBeaver для СУБД PostgreSQLhttps://dbeaver.io