Перейти к основному содержимому

adminpack. Удаленное управление файлами журналов сервера

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: pg_catalog.

Модуль adminpack включает в себя несколько вспомогательных функций, которыми могут пользоваться как pgAdmin, так и другие средства администрирования и управления базами данных. Среди дополнительных функций, например, есть возможность удаленного управления файлами журналов сервера. По умолчанию использовать эти функции разрешено только суперпользователям, однако при помощи команды GRANT доступ может быть предоставлен и другим пользователям.

Ниже приведены функции, предоставляющие право на редактирование файлов машины, где работает сервер:

  1. pg_file_write записывает данные (data) в файл с именем filename:

    pg_catalog.pg_file_write (filename text, data text, append boolean);

    Если флаг append сброшен (принимает значение 0/off/false), этот файл не должен существовать. Если же флаг append установлен (в значении 1/on/true), существование файла допускается, и в этом случае данные будут дописаны в него. Функция возвращает число записанных байт.

  2. pg_file_rename переименовывает файл:

    pg_catalog.pg_file_rename(oldname text, newname text [, archivename text])

    Результаты выполнения функции в зависимости от значения необязательного параметра archivename:

    • если параметр не задан или равен NULL, файл oldname будет переименован в newname (файл с новым именем не должен существовать);
    • если параметр задан, файл newname будет переименован в archivename (такой файл не должен существовать), затем файл oldname будет переименован в newname. В случае неудачи на этом этапе файл archivename будет переименован назад в newname и далее будет выдана ошибка.

    Функция возвращает true в случае успеха, false, если исходные файлы отсутствуют или их невозможно изменить. В иных случаях будут возвращены ошибки.

  3. pg_file_unlink удаляет заданный файл:

    pg_catalog.pg_file_unlink(filename text)

    Функция возвращает true в случае успеха, false в случае отсутствия указанного файла либо при сбое в вызове unlink(). В иных случаях возвращаются ошибки.

  4. pg_logdir_ls возвращает время создания и пути всех файлов журналов в каталоге log_directory (параметр СУБД):

    pg_catalog.pg_logdir_ls()

    Параметр log_filename должен иметь значение по умолчанию в формате postgresql-%Y-%m-%d_%H%M%S.log).

  5. pg_file_sync сбрасывает файл или каталог на диск:

    pg_catalog.pg_file_sync(filename text)

    Функция синхронизирует файл или каталог с именем filename. В случае неудачи, например, при отсутствии соответствующего файла, будет выдана ошибка. Значение data_sync_retry на функцию pg_file_sync не влияет, поэтому даже при отказе в сбросе файлов БД ошибка уровня PANIC выдана не будет.

Примечание:

Обычные пользователи имеют доступ только к файлам директории кластера БД, тогда как для суперпользователей и пользователей с правами ролей pg_read_server_files или pg_write_server_files доступ не ограничен. Обращение к файлу возможно как через относительный путь, так и через абсолютный.

Доработка

Не проводилась.

Установка

При наличии прав администратора СУБД включение модуля возможно выполнить вручную:

CREATE EXTENSION adminpack;

Настройка

Не требуется.

Использование модуля

Примеры:

  • pg_file_write

    Создать или дописать в существующий файл test1.txt в каталоге $PGDATA текст Test:

    SELECT * FROM pg_catalog.pg_file_write ('test1.txt', 'Test', '1');

    # Пример вывода
    pg_file_write
    ---------------
    4
    (1 row)

    Создать или дописать в существующий файл test1.txt в указанном каталоге текст Test:

    SELECT * FROM pg_catalog.pg_file_write ('/home/postgres/test1.txt', 'Test', '1');
  • pg_file_rename

    Cохранить файл $PGDATA/test1.txt с именем test1old.txt и переименовать его в test1new.txt:

    SELECT * FROM pg_catalog.pg_file_rename ('test1.txt', 'test1new.txt', 'test1old.txt');
  • pg_file_unlink

    Удалить файл $PGDATA/test1.txt

    SELECT * FROM pg_catalog.pg_file_unlink ('test1.txt');
  • pg_logdir_ls

    Функция pg_logdir_ls проверяет log-каталог и возвращает список файлов журнала:

    SELECT * FROM pg_catalog.pg_logdir_ls () AS (LogDate timestamp, Filename text);

    # Пример вывода
    LogDate | Filename
    ---------------------+--------------------------------------------------
    2023-01-20 15:06:44 | /pgerrorlogs/04/postgresql-2023-01-20_150644.log
    2023-01-24 00:00:00 | /pgerrorlogs/04/postgresql-2023-01-24_000000.log
    2023-01-23 00:00:00 | /pgerrorlogs/04/postgresql-2023-01-23_000000.log
    2023-01-20 12:26:49 | /pgerrorlogs/04/postgresql-2023-01-20_122649.log
    2023-01-25 00:00:00 | /pgerrorlogs/04/postgresql-2023-01-25_000000.log
    2023-01-20 12:31:14 | /pgerrorlogs/04/postgresql-2023-01-20_123114.log
    2023-01-26 00:00:00 | /pgerrorlogs/04/postgresql-2023-01-26_000000.log
    2023-01-21 00:00:00 | /pgerrorlogs/04/postgresql-2023-01-21_000000.log
    2023-01-27 00:00:00 | /pgerrorlogs/04/postgresql-2023-01-27_000000.log
    2023-01-22 00:00:00 | /pgerrorlogs/04/postgresql-2023-01-22_000000.log
    2023-01-20 12:28:09 | /pgerrorlogs/04/postgresql-2023-01-20_122809.log
    (11 rows)

Ссылки на документацию разработчика

Дополнительно поставляемый модуль adminpack: https://www.postgresql.org/docs/15/adminpack.html.