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

file_fdw — доступ к файлам данных в файловой системе сервера

примечание

Эта страница переведена при помощи нейросети GigaChat.

Этот модуль предоставляет внешний интерфейс для работы с данными file_fdw, который может использоваться для доступа к файлам данных в файловой системе сервера или для выполнения программ на сервере и чтения их вывода. Файл данных или вывод программы должны быть в формате, который может быть прочитан COPY FROM. См. COPY для получения подробной информации. В настоящее время файлы доступны только для чтения.

Сторонняя таблица, созданная с использованием этой обертки, может иметь следующие параметры:

filename

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

program

: Указывает команду, которая должна быть выполнена. Стандартный вывод этой команды будет прочитан так, как если бы использовался COPY FROM PROGRAM. Должен быть указан либо program или filename, но не оба.

format

: Задает формат данных, такой же, как параметр FORMAT параметра COPY.

header

: Указывает, имеет ли набор данных строку заголовка, аналогично указанию HEADER в команде COPY.

delimiter

: Задает символ-разделитель данных, аналогично указанию DELIMITER в команде COPY.

quote

: Задает символ кавычек для данных, аналогично указанию QUOTE в команде COPY.

escape

: Задает символ экранирования данных, аналогично указанию ESCAPE в команде COPY.

null

: Задает строку, задающую значение NULL в данных, аналогично указанию NULL в команде COPY.

encoding

: Задает кодировку данных, аналогично указанию ENCODING в команде COPY.

Обратите внимание, что хотя COPY позволяет указывать параметры, такие как HEADER, без соответствующего значения, синтаксис параметра внешней таблицы требует наличия значения во всех случаях. Чтобы активировать параметры COPY, обычно записываемые без значения, можно передать значение TRUE, поскольку все эти параметры являются логическими.

Столбец внешней таблицы, созданный с помощью этой обертки, может иметь следующие параметры:

force_not_null

: Это логический параметр. Если установлено значение true, это указывает на то, что значения столбца не должны сопоставляться с нулевой строкой (т.е., опция уровня таблицы null). Это имеет тот же эффект, что и перечисление столбца в опции COPY FORCE_NOT_NULL.

force_null

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

Опция COPY FORCE_QUOTE в настоящее время не поддерживается file_fdw.

Эти параметры могут быть указаны только для внешней таблицы или ее столбцов, но не в параметрах обертки внешних данных file_fdw, ни в параметрах сервера или сопоставления пользователей с использованием обертки.

Изменение параметров уровня таблицы требует быть суперпользователем или иметь привилегии роли pg_read_server_files (чтобы использовать имя файла) или роль pg_execute_server_program (для использования программы) по соображениям безопасности: только определенные пользователи должны иметь возможность контролировать, какой файл будет прочитан или какая программа будет запущена. В принципе обычным пользователям можно было бы разрешить изменять другие параметры, но это пока не поддерживается.

При указании параметра program имейте в виду, что строка параметра выполняется оболочкой. Если нужно передать какие-либо аргументы команде, которые поступают из ненадежного источника, нужно быть осторожным, чтобы удалить или экранировать любые символы, которые могут иметь специальное значение для оболочки. По соображениям безопасности лучше всего использовать фиксированную командную строку или хотя бы избегать передачи любого пользовательского ввода в ней.

Для внешней таблицы с использованием file_fdw, EXPLAIN показывает имя файла, который должен быть прочитан, или программу, которая должна быть выполнена. Для файла, если не указано COSTS OFF, также отображается размер файла (в байтах).

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

Одним из очевидных применений file_fdw является предоставление журнала активности PostgreSQL в виде таблицы для запросов. Для этого сначала нужно настроить ведение журнала в файл CSV,, который здесь будет называться pglog.csv. Сначала установите file_fdw как расширение:

CREATE EXTENSION file_fdw;

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

CREATE SERVER pglog FOREIGN DATA WRAPPER file_fdw;

Теперь можно создать стороннюю таблицу данных. Используя команду CREATE FOREIGN TABLE, нужно будет определить столбцы для таблицы, имя файла CSV и его формат:

CREATE FOREIGN TABLE pglog (
log_time timestamp(3) with time zone,
user_name text,
database_name text,
process_id integer,
connection_from text,
session_id text,
session_line_num bigint,
command_tag text,
session_start_time timestamp with time zone,
virtual_transaction_id text,
transaction_id bigint,
error_severity text,
sql_state_code text,
message text,
detail text,
hint text,
internal_query text,
internal_query_pos integer,
context text,
query text,
query_pos integer,
location text,
application_name text,
backend_type text,
leader_pid integer,
query_id bigint
) SERVER pglog
OPTIONS ( filename 'log/pglog.csv', format 'csv' );

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

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

Чтобы задать параметр force_null для столбца, используйте ключевое слово OPTIONS:

CREATE FOREIGN TABLE films (
code char(5) NOT NULL,
title text NOT NULL,
rating text OPTIONS (force_null 'true')
) SERVER film_server
OPTIONS ( filename 'films/db.csv', format 'csv' );