F.14. file_fdw
ÐодÑÐ»Ñ file_fdw ÑеализÑÐµÑ Ð¾Ð±ÑÑÑÐºÑ ÑÑоÑонниÑ
даннÑÑ
file_fdw Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к Ñайлам на ÑеÑвеÑе. Ð¤Ð°Ð¹Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð² ÑоÑмаÑе, коÑоÑÑй Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° COPY FROM; он ÑаÑÑмаÑÑиваеÑÑÑ Ð² опиÑании COPY. РнаÑÑоÑÑий Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÐ°Ð¹Ð»Ñ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ ÑолÑко Ð´Ð»Ñ ÑÑениÑ.
ÐÐ»Ñ ÑÑоÑонней ÑаблиÑÑ, Ñоздаваемой ÑеÑез ÑÑÑ Ð¾Ð±ÑÑÑкÑ, можно задаÑÑ ÑледÑÑÑие паÑамеÑÑÑ:
filenameÐÐ¼Ñ Ñайла даннÑÑ . УказÑваеÑÑÑ Ð¾Ð±ÑзаÑелÑно. ÐнаÑение пÑедÑÑавлÑÐµÑ Ñобой абÑолÑÑнÑй пÑÑÑ Ðº ÑайлÑ.
formatФоÑÐ¼Ð°Ñ Ñайла. ÐналогиÑно ÑказаниÑ
FORMATв командеCOPY.headerÐоказÑваеÑ, ÑÑо Ñайл ÑодеÑÐ¶Ð¸Ñ ÑÑÑÐ¾ÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ ÑÑолбÑов. ÐналогиÑно ÑказаниÑ
HEADERв командеCOPY.delimiterÐадаÑÑ Ñимвол, ÑазделÑÑÑий ÑÑолбÑÑ Ð² ÑÑÑÐ¾ÐºÐ°Ñ Ñайла. ÐналогиÑно ÑказаниÑ
DELIMITERв командеCOPY.quoteÐадаÑÑ Ñимвол, иÑполÑзÑемÑй Ð´Ð»Ñ Ð·Ð°ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² кавÑÑки. ÐналогиÑно ÑказаниÑ
QUOTEв командеCOPY.escapeÐадаÑÑ Ñимвол, коÑоÑÑй бÑÐ´ÐµÑ Ð²ÑводиÑÑÑÑ Ð¿ÐµÑед Ñимволом даннÑÑ , ÑовпавÑим Ñо знаÑением
QUOTE. ÐналогиÑно ÑказаниÑESCAPEв командеCOPY.nullÐпÑеделÑÐµÑ ÑÑÑокÑ, задаÑÑÑÑ Ð·Ð½Ð°Ñение
NULL. ÐналогиÑно ÑказаниÑNULLв командеCOPY.encodingÐадаÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ Ñайла. ÐналогиÑно ÑказаниÑ
ENCODINGв командеCOPY.
ÐамеÑÑÑе, ÑÑо Ñ
оÑÑ COPY пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑказаниÑ, Ñакие как OIDS и HEADER, без ÑооÑвеÑÑÑвÑÑÑего знаÑениÑ, ÑинÑакÑÐ¸Ñ Ð¾Ð±ÑÑÑки ÑÑоÑонниÑ
даннÑÑ
ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð·Ð½Ð°Ñение пÑиÑÑÑÑÑвовало во вÑеÑ
ÑлÑÑаÑÑ
. ЧÑÐ¾Ð±Ñ Ð°ÐºÑивиÑоваÑÑ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ COPY, коÑоÑÑм знаÑение обÑÑно не пеÑедаÑÑÑÑ, им можно пÑоÑÑо пеÑедаÑÑ Ð·Ð½Ð°Ñение TRUE.
ÐÐ»Ñ ÑÑолбÑов ÑÑоÑонней ÑаблиÑÑ, Ñоздаваемой ÑеÑез ÑÑÑ Ð¾Ð±ÑÑÑкÑ, можно задаÑÑ ÑледÑÑÑие паÑамеÑÑÑ:
force_not_nullÐогиÑеÑкое знаÑение. ÐÑли true, Ñо знаÑение ÑÑолбÑа не должно ÑвеÑÑÑÑÑÑ Ñо знаÑением NULL (заданнÑм в паÑамеÑÑе
null). ÐналогиÑно вклÑÑÐµÐ½Ð¸Ñ ÑÑолбÑа в ÑпиÑок ÑказаниÑFORCE_NOT_NULLкомандÑCOPY.force_nullÐогиÑеÑкое знаÑение. ÐÑли true, знаÑÐµÐ½Ð¸Ñ ÑÑолбÑов нÑжно ÑвеÑÑÑÑ Ñо знаÑением NULL (заданнÑм в паÑамеÑÑе
NULL), даже еÑли они заклÑÑÐµÐ½Ñ Ð² кавÑÑки. Ðез ÑÑого паÑамеÑÑа ÑолÑко знаÑÐµÐ½Ð¸Ñ Ð±ÐµÐ· кавÑÑек, ÑооÑвеÑÑÑвÑÑÑие знаÑениÑnull, бÑдÑÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ ÐºÐ°Ðº NULL. ÐналогиÑно вклÑÑÐµÐ½Ð¸Ñ ÑÑолбÑа в ÑпиÑок ÑказаниÑFORCE_NULLкомандÑCOPY.
РнаÑÑоÑÑий Ð¼Ð¾Ð¼ÐµÐ½Ñ file_fdw не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ OIDS и FORCE_QUOTE ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ COPY.
ÐеÑеÑиÑленнÑе паÑамеÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½Ð¸Ð¼Ñ ÑолÑко Ð´Ð»Ñ ÑÑоÑонниÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¸Ð»Ð¸ иÑ
ÑÑолбÑов. ÐÑ
нелÑÐ·Ñ ÑказаÑÑ Ð´Ð»Ñ Ð¾Ð±ÑÑÑки ÑÑоÑонниÑ
даннÑÑ
file_fdw, ÑеÑвеÑов или ÑопоÑÑавлений полÑзоваÑелей, иÑполÑзÑÑÑиÑ
ÑÑÑ Ð¾Ð±ÑÑÑкÑ.
ÐÐ»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов, опÑеделÑемÑÑ Ð´Ð»Ñ ÑаблиÑÑ, ÑÑебÑÑÑÑÑ Ð¿Ñава ÑÑпеÑполÑзоваÑелÑ. ÐÑо Ñделано в ÑелÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи: ÑолÑко ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑеÑаÑÑ, какой Ñайл иÑполÑзоваÑÑ. РпÑинÑипе, доÑÑÑп на изменение оÑÑалÑнÑÑ Ð¿Ð°ÑамеÑÑов можно пÑедоÑÑавиÑÑ Ð¸ не ÑÑпеÑполÑзоваÑелÑм, но в наÑÑоÑÑий Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÑо не Ñеализовано.
ÐÐ»Ñ ÑÑоÑонниÑ
ÑаблиÑ, ÑабоÑаÑÑиÑ
ÑеÑез file_fdw, команда EXPLAIN показÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ð¸ÑполÑзÑемого Ñайла. ÐÑли не ÑказÑваÑÑ COSTS OFF, Ñо вÑводиÑÑÑ Ð¸ ÑÐ°Ð·Ð¼ÐµÑ Ñайла (в байÑаÑ
).
ÐÑÐ¸Ð¼ÐµÑ F.1. Создание ÑÑоÑонней ÑаблиÑÑ Ð´Ð»Ñ Ð¶ÑÑнала ÑеÑвеÑа Postgres Pro
Ðдно из оÑевиднÑÑ
пÑименений file_fdw ÑÑо пÑедоÑÑавление доÑÑÑпа к жÑÑÐ½Ð°Ð»Ñ ÑеÑвеÑа как к ÑаблиÑе. ÐÑедваÑиÑелÑно нÑжно ÑбедиÑÑÑÑ, ÑÑо жÑÑнал ÑеÑвеÑа пиÑеÑÑÑ Ð² ÑоÑмаÑе 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 ) SERVER pglog OPTIONS ( filename '/home/josh/9.1/data/pg_log/pglog.csv', format 'csv' );
ÐÐ¾Ñ Ð¸ вÑÑ. ТепеÑÑ Ð´Ð»Ñ Ð¿ÑоÑмоÑÑа жÑÑнала ÑеÑвеÑа можно пÑоÑÑо вÑполнÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ðº ÑаблиÑе. РпÑоизводÑÑвенной ÑÑеде, ÑазÑмееÑÑÑ, еÑÑ Ð¿Ð¾ÑÑебÑеÑÑÑ ÐºÐ°Ðº-Ñо ÑÑеÑÑÑ ÑоÑаÑÐ¸Ñ Ñайлов жÑÑнала.