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;
Результат:
Раскрыть type=sqllog_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 можно получить по ссылке.