file_fdw. Оболочка сторонних данных для доступа к файлам на сервере#

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

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

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

Модуль реализует оболочку сторонних данных (fdw – foreign-data wrapper), с помощью которой можно:

  • обращаться к файлам данных в файловой системе сервера;

  • выполнять программы на сервере;

  • читать их вывод.

Файлы и вывод программ должны быть в формате, понятном для команды COPY FROM.

Файлы доступны только для чтения.

Для сторонней таблицы можно задать параметры. Некоторые параметры имеют аналогичные указания в команде COPY.

Параметр

Описание

Аналог в COPY

filename

Определяет имя файла, который нужно прочитать. При указании относительного пути он рассматривается от каталога данных. Необходимо определить либо параметр filename, либо program, но не оба сразу.

program

Определяет команду, которая будет выполнена. Поток стандартного вывода этой команды будет прочитан так же, как и с COPY FROM PROGRAM. Необходимо определить либо параметр program, либо filename, но не оба сразу.

format

Определяет формат файла

FORMAT

header

Указывает на то, что данные содержат строку заголовка с именами столбцов

HEADER

delimiter

Задает символ, разделяющий столбцы в данных

DELIMITER

quote

Задает символ, используемый для заключения данных в кавычки

QUOTE

escape

Задает символ, используемый для экранирования данных

ESCAPE

null

Определяет строку, задающую значение NULL в данных

NULL

encoding

Задает кодировку данных

ENCODING

Параметры для столбцов создаваемой сторонней таблицы:

Параметр

Тип

Значения

Аналог в COPY

force_not_null

Логическое

Если true, то значение столбца не должно сверяться со значением NULL, заданным в параметре null на уровне таблицы

FORCE_NOT_NULL

force_null

Логическое

Если true, значения столбцов нужно сверять со значением NULL, заданным в параметре NULL, даже если они заключены в кавычки. Без этого параметра только значения без кавычек, соответствующие значению null, будут возвращаться как NULL

FORCE_NULL

Доработка#

Доработка не проводилась.

Ограничения#

Модуль не поддерживает указание FORCE_QUOTE команды COPY.

Установка#

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

CREATE EXTENSION file_fdw SCHEMA ext;

Настройка#

Настройка не требуется.

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

Пример использования для доступа к журналу сообщений PostgreSQL как к таблице.

Создайте сторонний сервер:

CREATE SERVER pgsyslog FOREIGN DATA WRAPPER file_fdw;

Создайте стороннюю таблицу pgsyslog с перечислением столбцов и указанием на расположение файла:

CREATE FOREIGN TABLE pgsyslog (
  log_time timestamp(3) with time zone,
  user_name text,
  database_name text,
  process_id integer,
  connection_from text
) SERVER pgsyslog
OPTIONS (filename 'log/pgsyslog.csv', format 'csv');

Содержимое файла $PGDATA/log/pgsyslog.csv:

2023-02-04 10:23:54+03,User1,full_db,345445,out_db

Выборка данных из созданной сторонней таблицы:

SELECT * FROM pgsyslog;

Результат:

        log_time        | user_name | database_name | process_id | connection_from 
------------------------+-----------+---------------+------------+-----------------
 2023-02-04 10:23:54+03 | User1     | full_db       |     345445 | out_db
(1 row)

В результате для просмотра файла на сервере можно выполнять запросы к таблице.

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

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