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 |
Пример использования для доступа к журналу сообщений 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 можно получить по ссылке.