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

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, будут возвращаться как NULLFORCE_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.