COPY
COPY â копиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе Ð¼ÐµÐ¶Ð´Ñ Ñайлом и ÑаблиÑей
СинÑакÑиÑ
COPYимÑ_ÑаблиÑÑ[ (имÑ_ÑÑолбÑа[, ...] ) ] FROM { 'имÑ_Ñайла' | PROGRAM 'команда' | STDIN } [ [ WITH ] (паÑамеÑÑ[, ...] ) ] [ WHEREÑÑловие] COPY {имÑ_ÑаблиÑÑ[ (имÑ_ÑÑолбÑа[, ...] ) ] | (query) } TO { 'имÑ_Ñайла' | PROGRAM 'команда' | STDOUT } [ [ WITH ] (паÑамеÑÑ[, ...] ) ] ÐдеÑÑ Ð´Ð¾Ð¿ÑÑкаеÑÑÑпаÑамеÑÑ: FORMATимÑ_ÑоÑмаÑаFREEZE [boolean] DELIMITER 'Ñимвол_ÑазделиÑелÑ' NULL 'маÑкеÑ_NULL' DEFAULT 'ÑÑÑока_по_ÑмолÑаниÑ' HEADER [boolean| MATCH ] QUOTE 'Ñимвол_кавÑÑек' ESCAPE 'Ñимвол_ÑкÑаниÑованиÑ' FORCE_QUOTE { (имÑ_ÑÑолбÑа[, ...] ) | * } FORCE_NOT_NULL { (имÑ_ÑÑолбÑа[, ...] ) | * } FORCE_NULL { (имÑ_ÑÑолбÑа[, ...] ) | * } ON_ERRORобÑабоÑка_оÑибкиREJECT_LIMITмакÑималÑное_ÑиÑло_оÑибокENCODING 'имÑ_кодиÑовки' LOG_VERBOSITYÑÑовенÑ_деÑализаÑии
ÐпиÑание
COPY пеÑемеÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе Ð¼ÐµÐ¶Ð´Ñ ÑаблиÑами PostgreSQL и обÑÑнÑми Ñайлами в Ñайловой ÑиÑÑеме. COPY TO копиÑÑÐµÑ ÑодеÑжимое ÑаблиÑÑ Ð² Ñайл, а COPY FROM â из Ñайла в ÑаблиÑÑ (добавлÑÐµÑ Ð´Ð°Ð½Ð½Ñе к Ñем, ÑÑо Ñже ÑодеÑжалиÑÑ Ð² ÑаблиÑе). COPY TO Ð¼Ð¾Ð¶ÐµÑ Ñакже ÑкопиÑоваÑÑ ÑезÑлÑÑаÑÑ Ð·Ð°Ð¿ÑоÑа SELECT.
ÐÑли ÑказÑваеÑÑÑ ÑпиÑок ÑÑолбÑов, COPY TO копиÑÑÐµÑ Ð² Ñайл ÑолÑко даннÑе ÑказаннÑÑ
ÑÑолбÑов, а COPY FROM вÑÑавлÑÐµÑ ÐºÐ°Ð¶Ð´Ð¾Ðµ поле из Ñайла в ÑооÑвеÑÑÑвÑÑÑий ÐµÐ¼Ñ Ð¿Ð¾ поÑÑÐ´ÐºÑ ÑÑÐ¾Ð»Ð±ÐµÑ Ð¸Ð· Ñказанного ÑпиÑка. Ð ÑлÑÑае оÑÑÑÑÑÑÐ²Ð¸Ñ Ð² ÑÑом ÑпиÑке какиÑ
-либо ÑÑолбÑов ÑаблиÑÑ Ð¿Ñи COPY FROM они полÑÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.
COPY Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ñайла ÑказÑÐ²Ð°ÐµÑ ÑеÑвеÑÑ PostgreSQL ÑиÑаÑÑ Ð¸Ð»Ð¸ запиÑÑваÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑÑÐ¾Ñ Ñайл. ÐаданнÑй Ñайл должен бÑÑÑ Ð´Ð¾ÑÑÑпен полÑзоваÑÐµÐ»Ñ PostgreSQL (ÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ коÑоÑого ÑабоÑÐ°ÐµÑ ÑеÑвеÑ), и пÑÑÑ Ðº ÑÐ°Ð¹Ð»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ задаваÑÑÑÑ Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ ÑеÑвеÑа. Ðогда ÑказÑваеÑÑÑ Ð¿Ð°ÑамеÑÑ PROGRAM, ÑеÑÐ²ÐµÑ Ð²ÑполнÑÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½ÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸ ÑиÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе из ÑÑандаÑÑного вÑвода пÑогÑаммÑ, либо запиÑÑÐ²Ð°ÐµÑ Ð¸Ñ
в ÑÑандаÑÑнÑй ввод. Ðоманда должна опÑеделÑÑÑÑÑ Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ ÑеÑвеÑа и бÑÑÑ Ð´Ð¾ÑÑÑпной Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ PostgreSQL. Ðогда ÑказÑваеÑÑÑ STDIN или STDOUT, даннÑе пеÑедаÑÑÑÑ ÑеÑез Ñоединение клиенÑа Ñ ÑеÑвеÑом.
ÐаждÑй пÑоÑеÑÑ, вÑполнÑÑÑий опеÑаÑÐ¸Ñ COPY, бÑÐ´ÐµÑ Ð²ÑдаваÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñ
оде ÐµÑ Ð²ÑполнениÑ, оÑобÑажаемÑÑ Ð² пÑедÑÑавлении pg_stat_progress_copy. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 27.4.3.
ÐÑи возникновении оÑибок команда COPY по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑеÑÑваеÑÑÑ. Ðднако когда необÑ
одимо загÑÑзиÑÑ Ñайл Ñеликом, неÑмоÑÑÑ Ð½Ð° оÑибки, можно иÑполÑзоваÑÑ Ð¿Ñедложение ON_ERROR, ÑÑÐ¾Ð±Ñ ÑказÑваÑÑ, как обÑабоÑаÑÑ Ñо или иное поведение.
ÐаÑамеÑÑÑ
имÑ_ÑаблиÑÑÐÐ¼Ñ ÑÑÑеÑÑвÑÑÑей ÑаблиÑÑ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹).
имÑ_ÑÑолбÑаÐеобÑзаÑелÑнÑй ÑпиÑок ÑÑолбÑов, даннÑе коÑоÑÑÑ Ð±ÑдÑÑ ÐºÐ¾Ð¿Ð¸ÑоваÑÑÑÑ. ÐÑли ÑÑÐ¾Ñ ÑпиÑок оÑÑÑÑÑÑвÑеÑ, копиÑÑÑÑÑÑ Ð²Ñе ÑÑолбÑÑ ÑаблиÑÑ, за иÑклÑÑением генеÑиÑÑемÑÑ .
queryÐоманда
SELECT,VALUES,INSERT,UPDATE,DELETEилиMERGE, ÑезÑлÑÑаÑÑ ÐºÐ¾ÑоÑой бÑдÑÑ ÑкопиÑованÑ. ÐапÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ заклÑÑаÑÑÑÑ Ð² Ñкобки.ÐÐ»Ñ Ð·Ð°Ð¿ÑоÑов
INSERT,UPDATE,DELETEиMERGEдолжно задаваÑÑÑÑ Ð¿ÑедложениеRETURNINGи в Ñелевом оÑноÑении не должно бÑÑÑ ÑÑловного пÑавила, пÑавилаALSOили пÑавилаINSTEAD, ÑазвоÑаÑиваÑÑегоÑÑ Ð² неÑколÑко опеÑаÑоÑов.имÑ_ÑайлаÐÑÑÑ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ или вÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñайла. ÐÑÑÑ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñайла Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð°Ð±ÑолÑÑнÑм или оÑноÑиÑелÑнÑм, но пÑÑÑ Ð²ÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ должен бÑÑÑ ÑолÑко абÑолÑÑнÑм. ÐолÑзоваÑелÑм Windows ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑоÑмаÑ
E''и пÑодÑблиÑоваÑÑ ÐºÐ°Ð¶Ð´ÑÑ Ð¾Ð±ÑаÑнÑÑ ÑеÑÑÑ Ð² пÑÑи Ñайла.PROGRAMÐÑполнÑÐµÐ¼Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°.
COPY FROMÑиÑÐ°ÐµÑ ÑÑандаÑÑнÑй вÑвод командÑ, аCOPY TOзапиÑÑÐ²Ð°ÐµÑ Ð² ÐµÑ ÑÑандаÑÑнÑй ввод.ÐамеÑÑÑе, ÑÑо команда запÑÑкаеÑÑÑ ÑеÑез команднÑÑ Ð¾Ð±Ð¾Ð»Ð¾ÑкÑ, Ñак ÑÑо еÑли ÑÑебÑеÑÑÑ Ð¿ÐµÑедаÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо аÑгÑменÑÑ, поÑÑÑпаÑÑие из недовеÑенного иÑÑоÑника, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ аккÑÑаÑно избавиÑÑÑÑ Ð¾Ñ Ð²ÑÐµÑ ÑпеÑÑимволов, имеÑÑÐ¸Ñ Ð¾Ñобое знаÑение в оболоÑке, либо ÑкÑаниÑоваÑÑ Ð¸Ñ . Ðо ÑообÑажениÑм безопаÑноÑÑи лÑÑÑе огÑаниÑиÑÑÑÑ ÑикÑиÑованной ÑÑÑокой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸Ð»Ð¸ как минимÑм не позволÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑм вводиÑÑ Ð² Ð½ÐµÑ Ð¿ÑоизволÑное ÑодеÑжимое.
STDINУказÑваеÑ, ÑÑо даннÑе бÑдÑÑ Ð¿Ð¾ÑÑÑпаÑÑ Ð¸Ð· клиенÑÑкого пÑиложениÑ.
STDOUTУказÑваеÑ, ÑÑо даннÑе бÑдÑÑ Ð²ÑдаваÑÑÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑÐºÐ¾Ð¼Ñ Ð¿ÑиложениÑ.
booleanÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñй паÑамеÑÑ. ÐÐ»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑа можно напиÑаÑÑ
TRUE,ONили1, а Ð´Ð»Ñ Ð¾ÑклÑÑÐµÐ½Ð¸Ñ âFALSE,OFFили0. ÐнаÑениеbooleanможно опÑÑÑиÑÑ, в ÑÑом ÑлÑÑае подÑазÑмеваеÑÑÑTRUE.FORMATÐÑбиÑÐ°ÐµÑ ÑоÑÐ¼Ð°Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ запиÑи даннÑÑ :
text(ÑекÑÑовÑй),csv(знаÑениÑ, ÑазделÑннÑе запÑÑÑми, Comma Separated Values) илиbinary(двоиÑнÑй). Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбиÑаеÑÑÑ ÑоÑмаÑtext. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ФоÑмаÑÑ Ñайлов.FREEZEÐапÑоÑÑ ÐºÐ¾Ð¿Ð¸ÑÑÑÑ Ð´Ð°Ð½Ð½Ñе Ñ Ñже замоÑоженнÑми ÑÑÑоками, как поÑле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ
VACUUM FREEZE. ÐÑо позволÑÐµÑ ÑвелиÑиÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ Ð¿Ñи наÑалÑном добавлении даннÑÑ . СÑÑоки бÑдÑÑ Ð·Ð°Ð¼Ð¾ÑаживаÑÑÑÑ, ÑолÑко еÑли загÑÑÐ¶Ð°ÐµÐ¼Ð°Ñ ÑаблиÑа бÑла Ñоздана или опÑÑÑоÑена в ÑекÑÑей подÑÑанзакÑии, Ñ Ð½ÐµÐ¹ не ÑвÑÐ·Ð°Ð½Ñ Ð¾ÑкÑÑÑÑе кÑÑÑоÑÑ Ð¸ в данной ÑÑанзакÑии Ð½ÐµÑ Ð´ÑÑÐ³Ð¸Ñ Ñнимков. ÐÑполнÑÑÑCOPY FREEZEÑ ÑекÑиониÑованной или ÑÑоÑонней ÑаблиÑей в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½ÐµÐ»ÑзÑ. ÐопÑÑкаеÑÑÑ ÑолÑко иÑполÑзование ÑCOPY FROM.ÐамеÑÑÑе, ÑÑо вÑе дÑÑгие ÑеанÑÑ Ð±ÑдÑÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ видеÑÑ Ð´Ð°Ð½Ð½Ñе, как ÑолÑко они бÑдÑÑ ÑÑпеÑно загÑÑженÑ. ÐÑо наÑÑÑÐ°ÐµÑ Ð¿ÑинÑÑÑе пÑавила видимоÑÑи MVCC, Ñак ÑÑо полÑзоваÑели Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑÑ, какие пÑÐ¾Ð±Ð»ÐµÐ¼Ñ ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ.
DELIMITERÐадаÑÑ Ñимвол, ÑазделÑÑÑий ÑÑолбÑÑ Ð² ÑÑÑÐ¾ÐºÐ°Ñ Ñайла. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо Ñимвол ÑабÑлÑÑии в ÑекÑÑовом ÑоÑмаÑе и запÑÑÐ°Ñ Ð² ÑоÑмаÑе
CSV. ÐадаваемÑй Ñимвол должен бÑÑÑ Ð¾Ð´Ð½Ð¾Ð±Ð°Ð¹ÑовÑм. ÐÐ»Ñ ÑоÑмаÑаbinaryÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ допÑÑкаеÑÑÑ.NULLÐпÑеделÑÐµÑ ÑÑÑокÑ, задаÑÑÑÑ Ð·Ð½Ð°Ñение NULL. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð² ÑекÑÑовом ÑоÑмаÑе ÑÑо
\N(обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа и N), а в ÑоÑмаÑеCSVâ пÑÑÑÐ°Ñ ÑÑÑока без кавÑÑек. ÐÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð¸ в ÑекÑÑовом ÑоÑмаÑе, еÑли не ÑÑебÑеÑÑÑ ÑазлиÑаÑÑ Ð¿ÑÑÑÑе ÑÑÑоки и NULL. ÐÐ»Ñ ÑоÑмаÑаbinaryÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ допÑÑкаеÑÑÑ.ÐÑимеÑание
ÐÑи вÑполнении
COPY FROMлÑбÑе знаÑениÑ, ÑовпадаÑÑие Ñ ÑÑой ÑÑÑокой, ÑÐ¾Ñ ÑанÑÑÑÑÑ ÐºÐ°Ðº знаÑение NULL, Ñак ÑÑо пÑи пеÑеноÑе даннÑÑ Ð²Ð°Ð¶Ð½Ð¾ ÑбедиÑÑÑÑ Ð² Ñом, ÑÑо ÑÑо Ñа же ÑÑÑока, ÑÑо пÑименÑлаÑÑ Ð²COPY TO.DEFAULTÐадаÑÑ ÑÑÑокÑ, пÑедÑÑавлÑÑÑÑÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ. ÐаждÑй Ñаз, когда ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ ÑÑÑока вÑÑÑеÑаеÑÑÑ Ð²Ð¾ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð¼ Ñайле, вÑÑиÑлÑеÑÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÑооÑвеÑÑÑвÑÑÑего ÑÑолбÑа. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð¾Ð¿ÑÑкаеÑÑÑ ÑолÑко в команде
COPY FROMи ÑолÑко не Ð´Ð»Ñ ÑоÑмаÑаbinary.HEADERУказÑваеÑ, ÑÑо Ñайл ÑодеÑÐ¶Ð¸Ñ ÑÑÑÐ¾ÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ каждого ÑÑолбÑа в Ñайле. ÐÑи вÑводе пеÑÐ²Ð°Ñ ÑÑÑока бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð¸Ð¼ÐµÐ½Ð° ÑÑолбÑов из ÑаблиÑÑ. ÐÑи вводе пеÑÐ²Ð°Ñ ÑÑÑока оÑбÑаÑÑваеÑÑÑ, еÑли Ð´Ð»Ñ ÑÑого паÑамеÑÑа ÑÑÑановлено знаÑение
true(или ÑавнознаÑное логиÑеÑкое знаÑение). ÐÑли Ð´Ð»Ñ ÑÑого паÑамеÑÑа ÑÑÑановлено знаÑениеMATCH, имена ÑÑолбÑов (и Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑво) в ÑÑÑоке заголовка Ð´Ð¾Ð»Ð¶Ð½Ñ ÑовпадаÑÑ Ñ ÑакÑиÑеÑкими именами ÑÑолбÑов ÑаблиÑÑ Ð¿Ð¾ поÑÑдкÑ, инаÑе Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ð¾Ñибка. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ допÑÑкаеÑÑÑ Ð¿Ñи иÑполÑзовании ÑоÑмаÑаbinary. ÐаÑамеÑÑMATCHдейÑÑвиÑелен ÑолÑко Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´COPY FROM.QUOTEУказÑÐ²Ð°ÐµÑ Ñимвол кавÑÑек, иÑполÑзÑемÑй Ð´Ð»Ñ Ð·Ð°ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² кавÑÑки. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо Ñимвол двойнÑÑ ÐºÐ°Ð²ÑÑек. ÐадаваемÑй Ñимвол должен бÑÑÑ Ð¾Ð´Ð½Ð¾Ð±Ð°Ð¹ÑовÑм. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑолÑко Ð´Ð»Ñ ÑоÑмаÑа
CSV.ESCAPEÐадаÑÑ Ñимвол, коÑоÑÑй бÑÐ´ÐµÑ Ð²ÑводиÑÑÑÑ Ð¿ÐµÑед Ñимволом даннÑÑ , ÑовпавÑим Ñо знаÑением
QUOTE. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо ÑÐ¾Ñ Ð¶Ðµ Ñимвол, ÑÑо иQUOTE(Ñо еÑÑÑ, пÑи поÑвлении в даннÑÑ ÐºÐ°Ð²ÑÑек, они дÑблиÑÑÑÑÑÑ). ÐадаваемÑй Ñимвол должен бÑÑÑ Ð¾Ð´Ð½Ð¾Ð±Ð°Ð¹ÑовÑм. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð¾Ð¿ÑÑкаеÑÑÑ ÑолÑко Ð´Ð»Ñ ÑежимаCSV.FORCE_QUOTEÐÑинÑдиÑелÑно заклÑÑÐ°ÐµÑ Ð² кавÑÑки вÑе знаÑÐµÐ½Ð¸Ñ Ð½Ðµ
NULLв ÑказаннÑÑ ÑÑолбÑÐ°Ñ . ÐÑводимое знаÑениеNULLникогда не заклÑÑаеÑÑÑ Ð² кавÑÑки. ÐÑли Ñказано*, в кавÑÑки бÑдÑÑ Ð·Ð°ÐºÐ»ÑÑаÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð½ÐµNULLво вÑÐµÑ ÑÑолбÑÐ°Ñ . ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑолÑко командаCOPY TOи ÑолÑко Ð´Ð»Ñ ÑоÑмаÑаCSV.FORCE_NOT_NULLÐе ÑопоÑÑавлÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² ÑказаннÑÑ ÑÑолбÑÐ°Ñ Ñ Ð¼Ð°ÑкеÑом NULL. Ðо ÑмолÑаниÑ, когда маÑÐºÐµÑ Ð¿ÑÑÑ, ÑÑо ознаÑаеÑ, ÑÑо пÑÑÑÑе знаÑÐµÐ½Ð¸Ñ Ð±ÑдÑÑ ÑÑиÑÐ°Ð½Ñ ÐºÐ°Ðº ÑÑÑоки нÑлевой длинÑ, а не NULL, даже когда они не заклÑÑÐµÐ½Ñ Ð² кавÑÑки. ÐÑи Ñказании
*паÑамеÑÑ Ð¿ÑименÑеÑÑÑ ÐºÐ¾ вÑем ÑÑолбÑам. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð¾Ð¿ÑÑкаеÑÑÑ ÑолÑко в командеCOPY FROMи ÑолÑко Ð´Ð»Ñ ÑоÑмаÑаCSV.FORCE_NULLСопоÑÑавлÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² ÑказаннÑÑ ÑÑолбÑÐ°Ñ Ñ Ð¼Ð°ÑкеÑом NULL, даже еÑли они заклÑÑÐµÐ½Ñ Ð² кавÑÑки, и в ÑлÑÑае ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ ÑÑÑанавливаÑÑ Ð·Ð½Ð°Ñение
NULL. Ðо ÑмолÑаниÑ, когда ÑÑÐ¾Ñ Ð¼Ð°ÑÐºÐµÑ Ð¿ÑÑÑ, пÑÑÑÐ°Ñ ÑÑÑока в кавÑÑÐºÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¿ÑеобÑазовÑваÑÑÑÑ Ð² NULL. ÐÑи Ñказании*паÑамеÑÑ Ð¿ÑименÑеÑÑÑ ÐºÐ¾ вÑем ÑÑолбÑам. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð¾Ð¿ÑÑкаеÑÑÑ ÑолÑко в командеCOPY FROMи ÑолÑко Ð´Ð»Ñ ÑоÑмаÑаCSV.ON_ERRORУказÑваеÑ, как обÑабаÑÑваÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð¿Ñи пÑеобÑазовании Ð²Ñ Ð¾Ð´ÑÑÐ¸Ñ Ð·Ð½Ð°Ñений в Ñип даннÑÑ ÑÑолбÑа. ÐÑи знаÑении
stopпаÑамеÑÑаобÑабоÑка_оÑибкикоманда завеÑÑаеÑÑÑ Ñ Ð¾Ñибкой, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº пÑи знаÑенииignoreÐ²Ñ Ð¾Ð´ÑÑÐ°Ñ ÑÑÑока пÑопÑÑкаеÑÑÑ Ð¸ пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´ к ÑледÑÑÑей. ÐнаÑение по ÑмолÑаниÑ:stop.ÐнаÑение
ignoreможно пÑимениÑÑ ÑолÑко Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑCOPY FROM, еÑли ÑFORMATÑÑÐ¾Ð¸Ñ Ð·Ð½Ð°Ñениеtextилиcsv.ÐÑли бÑла пÑопÑÑена Ñ Ð¾ÑÑ Ð±Ñ Ð¾Ð´Ð½Ð° ÑÑÑоÑка, в конÑе командÑ
COPY FROMвÑводиÑÑÑ ÑообÑениеNOTICEÑ ÑиÑлом пÑопÑÑеннÑÑ ÑÑÑок. ÐÑи знаÑенииverboseпаÑамеÑÑаLOG_VERBOSITYÑообÑениеNOTICEвÑводиÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ пÑопÑÑенной ÑÑÑоки и ÑодеÑÐ¶Ð¸Ñ ÑÑÑÐ¾ÐºÑ Ð²Ñ Ð¾Ð´ÑÑего Ñайла и Ð¸Ð¼Ñ ÑÑолбÑа, где пÑеобÑазование завеÑÑилоÑÑ Ñ Ð¾Ñибкой. ÐÑи знаÑенииsilentÑообÑÐµÐ½Ð¸Ñ Ð¾ пÑопÑÑеннÑÑ ÑÑÑÐ¾ÐºÐ°Ñ Ð½Ðµ вÑводÑÑÑÑ.REJECT_LIMITÐадаÑÑ Ð¼Ð°ÐºÑималÑно допÑÑÑимое ÑиÑло оÑибок пÑи пÑеобÑазовании Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений ÑÑолбÑа к его ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ , еÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа
ON_ERRORÑÑÑановлено знаÑениеignore. ÐÑли ÑиÑло оÑибок пÑи обÑабоÑке Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений пÑевÑÑÐ°ÐµÑ Ñказанное знаÑение, командаCOPYзавеÑÑиÑÑÑ Ð¾Ñибкой, даже еÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑаON_ERRORÑÑÑановлено знаÑениеignore. ÐÑо пÑедложение должно иÑполÑзоваÑÑÑÑ ÑовмеÑÑно ÑON_ERROR=ignore, а знаÑениемакÑималÑного_ÑиÑла_оÑибокдолжно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм знаÑением Ñипаbigint. ÐÑли знаÑение паÑамеÑÑа не Ñказано,ON_ERROR=ignoreдопÑÑÐºÐ°ÐµÑ Ð½ÐµÐ¾Ð³ÑаниÑенное ÑиÑло оÑибок, а ÑÑо знаÑиÑ, ÑÑоCOPYбÑÐ´ÐµÑ Ð¿ÑопÑÑкаÑÑ Ð²Ñе некоÑÑекÑнÑе даннÑе.ENCODINGУказÑваеÑ, ÑÑо Ñайл Ð¸Ð¼ÐµÐµÑ ÐºÐ¾Ð´Ð¸ÑовкÑ
имÑ_кодиÑовки. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑÑен, вÑбиÑаеÑÑÑ ÑекÑÑÐ°Ñ ÐºÐ¾Ð´Ð¸Ñовка клиенÑа. ÐодÑобнее об ÑÑом говоÑиÑÑÑ Ð½Ð¸Ð¶Ðµ, в пÑимеÑаниÑÑ .LOG_VERBOSITYУказÑÐ²Ð°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑообÑений, вÑводимÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹
COPY. ÐозможнÑе знаÑениÑ:default,verboseилиsilent. ÐÑи знаÑенииverboseво вÑÐµÐ¼Ñ ÑабоÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð²ÑводÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑообÑениÑ. ÐнаÑениеsilentоÑклÑÑÐ°ÐµÑ ÐºÐ°Ðº дополниÑелÑнÑе, Ñак и обÑÑнÑе ÑообÑениÑ.Ðа даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÑо иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ
COPY FROMпÑи знаÑенииignoreпаÑамеÑÑаON_ERROR.WHEREÐеобÑзаÑелÑное пÑедложение
WHEREÐ¸Ð¼ÐµÐµÑ Ð¾Ð±ÑÑÑ ÑоÑмÑWHERE
ÑÑловие, где
ÑÑловиеâ лÑбое вÑÑажение, вÑдаÑÑее ÑезÑлÑÑÐ°Ñ Ñипаboolean. СÑÑоки, не ÑдовлеÑвоÑÑÑÑие ÑÑÐ¾Ð¼Ñ ÑÑловиÑ, добавлÑÑÑÑÑ Ð² ÑаблиÑÑ Ð½Ðµ бÑдÑÑ. СÑÑока ÑдовлеÑвоÑÑÐµÑ ÑÑловиÑ, еÑли оно возвÑаÑÐ°ÐµÑ true пÑи подÑÑановке вмеÑÑо ÑÑÑлок на пеÑеменнÑе ÑакÑиÑеÑÐºÐ¸Ñ Ð·Ð½Ð°Ñений из ÑÑой ÑÑÑоки.РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð²ÑÑажениÑ
WHEREне могÑÑ Ð²ÐºÐ»ÑÑаÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑÑ, а пÑи вÑÑиÑлении вÑÑажений не Ð²Ð¸Ð´Ð½Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ, коÑоÑÑе вноÑÐ¸Ñ Ñама командаCOPY(ÑÑо игÑÐ°ÐµÑ ÑолÑ, когда в Ð½Ð¸Ñ Ð²ÑзÑваÑÑÑÑ ÑÑнкÑии Ñ Ñ Ð°ÑакÑеÑиÑÑикойVOLATILE).
ÐÑÐ²Ð¾Ð´Ð¸Ð¼Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
Ð ÑлÑÑае ÑÑпеÑного завеÑÑениÑ, COPY возвÑаÑÐ°ÐµÑ Ð¼ÐµÑÐºÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² виде
COPY ÑиÑло
ÐдеÑÑ ÑиÑло â колиÑеÑÑво ÑкопиÑованнÑÑ
запиÑей.
ÐÑимеÑание
psql вÑÐ²Ð¾Ð´Ð¸Ñ ÑÑÑ Ð¼ÐµÑкÑ, ÑолÑко еÑли вÑполнÑлаÑÑ Ð½Ðµ команда COPY ... TO STDOUT или ÐµÑ Ð°Ð½Ð°Ð»Ð¾Ð³ в psql, меÑакоманда \copy ... to stdout. ÐÑо Ñделано Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¼ÐµÑка ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ðµ ÑмеÑалаÑÑ Ñ Ð´Ð°Ð½Ð½Ñми, вÑведеннÑми пеÑед ней.
ÐÑимеÑаниÑ
ÐÐ¾Ð¼Ð°Ð½Ð´Ñ COPY TO можно иÑполÑзоваÑÑ Ñ Ð¿ÑоÑÑÑми ÑаблиÑами и маÑеÑиализованнÑми пÑедÑÑавлениÑми, наполненнÑми даннÑми. ÐапÑимеÑ, COPY копиÑÑÐµÑ Ñе же ÑÑÑоки, коÑоÑÑе вÑдаÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ ÑаблиÑа TOSELECT * FROM ONLY . Ðднако команда напÑÑмÑÑ Ð½Ðµ поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð´ÑÑгие ÑÐ¸Ð¿Ñ Ð¾ÑноÑений, Ñакие как ÑекÑиониÑованнÑе ÑаблиÑÑ, наÑледÑемÑе доÑеÑние ÑаблиÑÑ Ð¸Ð»Ð¸ обÑÑнÑе пÑедÑÑавлениÑ. ЧÑÐ¾Ð±Ñ ÑкопиÑоваÑÑ Ð²Ñе ÑÑÑоки ÑакиÑ
оÑноÑений, иÑполÑзÑйÑе ÑаблиÑаCOPY (SELECT * FROM .ÑаблиÑа) TO
COPY FROM можно пÑименÑÑÑ Ñ Ð¾Ð±ÑÑнÑми, ÑÑоÑонними и ÑекÑиониÑованнÑми ÑаблиÑами или пÑедÑÑавлениÑми, в коÑоÑÑÑ
ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ ÑÑиггеÑÑ INSTEAD OF INSERT.
Ð ÑаблиÑе, даннÑе коÑоÑой ÑиÑÐ°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° COPY TO, ÑÑебÑеÑÑÑ Ð¸Ð¼ÐµÑÑ Ð¿Ñаво на вÑбоÑÐºÑ Ð´Ð°Ð½Ð½ÑÑ
, а в ÑаблиÑе, кÑда вÑÑавлÑÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ COPY FROM, ÑÑебÑеÑÑÑ Ð¿Ñаво на добавление. ÐÑи ÑÑом, еÑли в команде пеÑеÑиÑлÑÑÑÑÑ Ð¸Ð·Ð±ÑаннÑе ÑÑолбÑÑ, доÑÑаÑоÑно имеÑÑ Ð¿Ñава ÑолÑко Ð´Ð»Ñ Ð½Ð¸Ñ
.
ÐÑли Ð´Ð»Ñ ÑаблиÑÑ Ð²ÐºÐ»ÑÑена заÑиÑа на ÑÑовне ÑÑÑок, ÑооÑвеÑÑÑвÑÑÑие полиÑики SELECT бÑдÑÑ Ð¿ÑименÑÑÑÑÑ Ð¸ к опеÑаÑоÑам COPY . ÐпеÑаÑоÑÑ ÑаблиÑа TOCOPY FROM Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ñ Ð·Ð°ÑиÑой ÑÑÑок в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ поддеÑживаÑÑÑÑ. ÐмеÑÑо ниÑ
ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑавнознаÑнÑе опеÑаÑоÑÑ INSERT.
ФайлÑ, ÑказаннÑе в команде COPY, ÑиÑаÑÑÑÑ Ð¸Ð»Ð¸ запиÑÑваÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑеÑвеÑом, не клиенÑÑким пÑиложением. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑаÑполагаÑÑÑÑ Ð½Ð° ÑеÑвеÑе или бÑÑÑ Ð´Ð¾ÑÑÑпнÑми ÑеÑвеÑÑ, а не клиенÑÑ. Ðни Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð½Ð° ÑÑение или запиÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ PostgreSQL (полÑзоваÑелÑ, Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ коÑоÑого ÑабоÑÐ°ÐµÑ ÑеÑвеÑ), не клиенÑÑ. ÐналогиÑно, команда, ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿Ð°ÑамеÑÑом PROGRAM, вÑполнÑеÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑеÑвеÑом, а не клиенÑÑким пÑиложением, и должна бÑÑÑ Ð´Ð¾ÑÑÑпна на вÑполнение полÑзоваÑÐµÐ»Ñ PostgreSQL. ÐÑполнÑÑÑ COPY Ñ Ñказанием Ñайла или внеÑней ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
или Ñленам Ñолей pg_read_server_files, pg_write_server_files или pg_execute_server_program, Ñак как ÑÑо позволÑÐµÑ ÑиÑаÑÑ/запиÑÑваÑÑ Ð»ÑбÑе ÑÐ°Ð¹Ð»Ñ Ð¸ запÑÑкаÑÑ Ð»ÑбÑе пÑогÑаммÑ, к коÑоÑÑм Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑп ÑеÑвеÑ.
Ðе пÑÑайÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ COPY Ñ Ñеализованной в psql меÑакомандой \copy. ÐеÑакоманда \copy вÑзÑÐ²Ð°ÐµÑ COPY FROM STDIN или COPY TO STDOUT, а заÑем ÑабоÑÐ°ÐµÑ Ñ Ð´Ð°Ð½Ð½Ñми в Ñайле, доÑÑÑпном клиенÑÑ psql. Таким обÑазом, когда пÑименÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° \copy, доÑÑÑпноÑÑÑ Ñайла и пÑава доÑÑÑпа завиÑÑÑ Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñа, а не Ð¾Ñ ÑеÑвеÑа.
ÐÑÑÑ Ñайла, ÑказÑваемÑй в COPY, ÑекомендÑеÑÑÑ Ð²Ñегда задаваÑÑ ÐºÐ°Ðº абÑолÑÑнÑй, а не оÑноÑиÑелÑнÑй. ÐÑо обÑзаÑелÑное ÑÑловие Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ COPY TO, но COPY FROM позволÑÐµÑ Ð¿ÑоÑиÑаÑÑ Ñайл, заданнÑй и оÑноÑиÑелÑнÑм пÑÑÑм. Такой пÑÑÑ Ð±ÑÐ´ÐµÑ Ð¸Ð½ÑеÑпÑеÑиÑоваÑÑÑÑ Ð¾ÑноÑиÑелÑно ÑабоÑего каÑалога ÑеÑвеÑного пÑоÑеÑÑа (обÑÑно ÑÑо каÑалог даннÑÑ
клаÑÑеÑа), а не ÑабоÑего каÑалога клиенÑа.
ÐÑполнение ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² PROGRAM Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð³ÑаниÑено и дÑÑгими ÑабоÑаÑÑими в ÐС меÑ
анизмами конÑÑÐ¾Ð»Ñ Ð´Ð¾ÑÑÑпа, напÑÐ¸Ð¼ÐµÑ SELinux.
COPY FROM вÑзÑÐ²Ð°ÐµÑ Ð²Ñе ÑÑиггеÑÑ Ð¸ обÑабаÑÑÐ²Ð°ÐµÑ Ð²Ñе огÑаниÑениÑ-пÑовеÑки в Ñелевой ÑаблиÑе. Ðднако пÑавила пÑи загÑÑзке даннÑÑ
не вÑзÑваÑÑÑÑ.
ÐÐ»Ñ ÑÑолбÑов иденÑиÑикаÑии команда COPY FROM вÑегда пеÑеноÑÐ¸Ñ Ð·Ð½Ð°ÑениÑ, ÑодеÑжаÑиеÑÑ Ð²Ð¾ вÑ
однÑÑ
даннÑÑ
, как команда INSERT Ñ Ñказанием OVERRIDING SYSTEM VALUE.
ÐÑи вводе и вÑводе даннÑÑ
COPY ÑÑиÑÑваеÑÑÑ DateStyle. ÐÐ»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеноÑимоÑÑи на дÑÑгие инÑÑаллÑÑии PostgreSQL, в коÑоÑÑÑ
могÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð½ÐµÑÑандаÑÑнÑе знаÑÐµÐ½Ð¸Ñ DateStyle, знаÑение DateStyle ÑледÑÐµÑ ÑÑÑановиÑÑ ÑавнÑм ISO до вÑзова COPY TO. Также ÑекомендÑеÑÑÑ Ð½Ðµ вÑгÑÑжаÑÑ Ð´Ð°Ð½Ð½Ñе Ñ IntervalStyle ÑавнÑм sql_standard, Ñак как ÑеÑÐ²ÐµÑ Ñ Ð´ÑÑгим знаÑением IntervalStyle Ð¼Ð¾Ð¶ÐµÑ Ð½ÐµÐ¿ÑавилÑно воÑпÑинимаÑÑ Ð¾ÑÑиÑаÑелÑнÑе инÑеÑÐ²Ð°Ð»Ñ Ð² ÑакиÑ
даннÑÑ
.
ÐÑ
однÑе даннÑе инÑеÑпÑеÑиÑÑÑÑÑÑ ÑоглаÑно кодиÑовке, заданной паÑамеÑÑом ENCODING, или ÑекÑÑей кодиÑовке клиенÑа, а вÑÑ
однÑе кодиÑÑÑÑÑÑ Ð² кодиÑовке ENCODING или ÑекÑÑей кодиÑовке клиенÑа, даже еÑли даннÑе не пÑоÑ
одÑÑ ÑеÑез клиенÑа, а ÑÑиÑÑваÑÑÑÑ Ð¸Ð»Ð¸ запиÑÑваÑÑÑÑ Ð² Ñайл непоÑÑедÑÑвенно ÑеÑвеÑом.
Ðо вÑÐµÐ¼Ñ ÑабоÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° COPY FROM вÑÑавлÑÐµÑ Ð²Ñ
одÑÑие ÑÑÑоки в ÑаблиÑÑ. Ð ÑлÑÑае ÑÐ±Ð¾Ñ ÑÑи ÑÑÑоки оÑÑаÑÑÑÑ Ð² ÑдалÑнном ÑоÑÑоÑнии: они не бÑдÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñми и доÑÑÑпнÑми, но бÑдÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ Ð¼ÐµÑÑо на диÑке. ÐÑли Ñбой пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿Ñи копиÑовании болÑÑого обÑÑма даннÑÑ
, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº знаÑиÑелÑнÑм поÑеÑÑм диÑкового пÑоÑÑÑанÑÑва. ÐÑи желании веÑнÑÑÑ Ð¿Ð¾ÑеÑÑннÑй обÑÑм, ÑÑо можно ÑделаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM.
FORCE_NULL и FORCE_NOT_NULL можно пÑимениÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно к Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑÑолбÑÑ. Ð ÑезÑлÑÑаÑе NULL-знаÑÐµÐ½Ð¸Ñ Ð² кавÑÑкаÑ
бÑдÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² NULL, а NULL-знаÑÐµÐ½Ð¸Ñ Ð±ÐµÐ· кавÑÑек â в пÑÑÑÑе ÑÑÑоки.
ФоÑмаÑÑ Ñайлов
ТекÑÑовÑй ÑоÑмаÑ
Ðогда пÑименÑеÑÑÑ ÑоÑÐ¼Ð°Ñ text, ÑиÑаемÑе или запиÑÑваемÑе даннÑе пÑедÑÑавлÑÑÑ Ñобой ÑекÑÑовÑй Ñайл, ÑÑÑока в коÑоÑом ÑооÑвеÑÑÑвÑÐµÑ ÑÑÑоке ÑаблиÑÑ. СÑолбÑÑ Ð² ÑÑÑоке ÑазделÑÑÑÑÑ Ñимволом-ÑазделиÑелем. ÐнаÑÐµÐ½Ð¸Ñ ÑамиÑ
ÑÑолбÑов â ÑекÑÑовÑе ÑÑÑоки, вÑдаваемÑе ÑÑнкÑией вÑвода, либо воÑпÑинимаемÑе ÑÑнкÑией ввода, ÑооÑвеÑÑÑвÑÑÑей ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
ÑÑолбÑа. ÐаданнÑй маÑÐºÐµÑ NULL вÑводиÑÑÑ Ð¸ ÑÑиÑÑваеÑÑÑ Ð²Ð¼ÐµÑÑо ÑÑолбÑов Ñо знаÑением NULL. COPY FROM вÑдаÑÑ Ð¾ÑибкÑ, еÑли в лÑбой из ÑÑÑок во вÑ
одном Ñайле оказÑваеÑÑÑ Ð±Ð¾Ð»ÑÑе или менÑÑе ÑÑолбÑов, Ñем ожидаеÑÑÑ.
ÐÐ¾Ð½ÐµÑ Ð´Ð°Ð½Ð½ÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑаÑÑÑÑ ÑÑÑокой, ÑодеÑжаÑей ÑолÑко обÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ Ð¸ ÑоÑÐºÑ (\.). ÐаÑÐºÐµÑ ÐºÐ¾Ð½Ñа даннÑÑ
не ÑÑебÑеÑÑÑ Ð¿Ñи ÑÑении из Ñайла, Ñак как его ÑÐ¾Ð»Ñ Ð²Ð¿Ð¾Ð»Ð½Ðµ вÑполнÑÐµÑ ÐºÐ¾Ð½ÐµÑ Ñайла; в ÑÑом конÑекÑÑе он ÑоÑ
ÑанÑеÑÑÑ ÑолÑко Ð´Ð»Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑи. Ðднако psql иÑполÑзÑÐµÑ \. Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑии COPY FROM STDIN (Ñо еÑÑÑ Ð¿Ñи ÑÑении внÑÑÑенниÑ
даннÑÑ
COPY в SQL-ÑкÑипÑе). Ð ÑÑом ÑлÑÑае необÑ
одимо пÑавило, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð²ÐµÑÑиÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð´Ð¾ конÑа ÑкÑипÑа.
Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ (\) в даннÑÑ
COPY позволÑÑÑ ÑкÑаниÑоваÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ
, коÑоÑÑе без ниÑ
ÑÑиÑалиÑÑ Ð±Ñ ÑазделиÑелÑми ÑÑÑок или ÑÑолбÑов. Ð ÑаÑÑноÑÑи, пÑедваÑÑÑÑÑÑ Ð¾Ð±ÑаÑной коÑой Ð´Ð¾Ð»Ð¶Ð½Ñ ÑледÑÑÑие ÑимволÑ, когда они оказÑваÑÑÑÑ Ð² знаÑении ÑÑолбÑа: Ñама обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа, пеÑевод ÑÑÑоки, возвÑÐ°Ñ ÐºÐ°ÑеÑки и ÑекÑÑий ÑазделиÑелÑ.
ÐаÑÐºÐµÑ NULL пеÑедаÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ðµ COPY TO как еÑÑÑ, без Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑной коÑой; COPY FROM, Ñо Ñвоей ÑÑоÑонÑ, иÑÐµÑ Ð²Ð¾ вводимÑÑ
даннÑÑ
маÑкеÑÑ NULL до ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑнÑÑ
коÑÑÑ
. Таким обÑазом, маÑÐºÐµÑ NULL, напÑÐ¸Ð¼ÐµÑ Ñакой как \N, оÑлиÑаеÑÑÑ Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ \N в даннÑÑ
(оно должно пÑедÑÑавлÑÑÑÑÑ Ð² виде \\N).
Ðоманда COPY FROM ÑаÑпознаÑÑ ÑледÑÑÑие ÑпеÑпоÑледоваÑелÑноÑÑи:
| ÐоÑледоваÑелÑноÑÑÑ | ÐÑедÑÑавлÑÐµÑ |
|---|---|
\b | Ðабой (ASCII 8) |
\f | ÐодаÑа ÑоÑÐ¼Ñ (ASCII 12) |
\n | ÐÐ¾Ð²Ð°Ñ ÑÑÑока (ASCII 10) |
\r | ÐозвÑÐ°Ñ ÐºÐ°ÑеÑки (ASCII 13) |
\t | ТабÑлÑÑÐ¸Ñ (ASCII 9) |
\v | ÐеÑÑикалÑÐ½Ð°Ñ ÑабÑлÑÑÐ¸Ñ (ASCII 11) |
\ÑиÑÑÑ | ÐбÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ Ñ Ð¿Ð¾ÑледÑÑÑими 1â3 воÑÑмеÑиÑнÑми ÑиÑÑами пÑедÑÑавлÑÐµÑ Ð±Ð°Ð¹Ñ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм ÑиÑловÑм кодом |
\xÑиÑÑÑ | ÐбÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ Ñ Ð¿Ð¾ÑледÑÑÑим x и 1-2 ÑеÑÑнадÑаÑеÑиÑнÑми ÑиÑÑами пÑедÑÑавлÑÐµÑ Ð±Ð°Ð¹Ñ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм ÑиÑловÑм кодом |
РнаÑÑоÑÑее вÑÐµÐ¼Ñ COPY TO никогда не вÑÐ²Ð¾Ð´Ð¸Ñ ÑпеÑпоÑледоваÑелÑноÑÑи Ñ Ð²Ð¾ÑÑмеÑиÑнÑми или ÑеÑÑнадÑаÑеÑиÑнÑми кодами, однако вÑÐ²Ð¾Ð´Ð¸Ñ Ð´ÑÑгие вÑÑепеÑеÑиÑленнÑе ÑпеÑпоÑледоваÑелÑноÑÑи вмеÑÑо ÑпÑавлÑÑÑиÑ
Ñимволов.
ÐÑбой дÑÑгой Ñимвол поÑле обÑаÑной коÑой, оÑÑÑÑÑÑвÑÑÑий в пÑиведÑнной вÑÑе ÑаблиÑе, бÑÐ´ÐµÑ Ð¿ÑедÑÑавлÑÑÑ ÑебÑ. Ðднако опаÑайÑеÑÑ Ð¸Ð·Ð»Ð¸Ñнего Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑнÑÑ
коÑÑÑ
, Ñак как ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к ÑлÑÑÐ°Ð¹Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑÑоки, обознаÑаÑÑей маÑÐºÐµÑ ÐºÐ¾Ð½Ñа даннÑÑ
(\.) или маÑÐºÐµÑ NULL (\N по ÑмолÑаниÑ). ÐÑи ÑÑÑоки бÑдÑÑ Ð²Ð¾ÑпÑинÑÑÑ Ð¿Ñежде, Ñем обÑабоÑаÑÑÑÑ ÑпеÑпоÑледоваÑелÑноÑÑи Ñ Ð¾Ð±ÑаÑной коÑой.
РпÑиложениÑÑ
, генеÑиÑÑÑÑиÑ
даннÑе Ð´Ð»Ñ COPY, наÑÑоÑÑелÑно ÑекомендÑеÑÑÑ Ð¿ÑеобÑазоваÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ ÑÑÑоки и возвÑаÑа каÑеÑки в поÑледоваÑелÑноÑÑи \n и \r, ÑооÑвеÑÑÑвенно. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑедÑÑавиÑÑ Ð²Ð¾Ð·Ð²ÑÐ°Ñ ÐºÐ°ÑеÑки в даннÑÑ
как обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ Ð¸ возвÑÐ°Ñ ÐºÐ°ÑеÑки, а пеÑевод ÑÑÑоки как обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ Ð¸ пеÑевод ÑÑÑоки, однако ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ поддеÑживаÑÑÑÑ Ð² бÑдÑÑиÑ
веÑÑиÑÑ
. Такие ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ñакже подвеÑÐ¶ÐµÐ½Ñ Ð¸ÑкажениÑм, еÑли Ñайл Ñ Ð²Ñводом COPY пеÑеноÑиÑÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑазнÑми ÑиÑÑемами (напÑимеÑ, Ñ Unix в Windows и наобоÑоÑ).
ÐÑе поÑледоваÑелÑноÑÑи Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑой обÑабаÑÑваÑÑÑÑ Ð¿Ð¾Ñле пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð¸Ñовки. ÐайÑÑ, заданнÑе в ÑÐ°ÐºÐ¸Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑÑÑ Ð²Ð¾ÑÑмеÑиÑнÑми или ÑеÑÑнадÑаÑеÑиÑнÑми ÑиÑÑами, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑедÑÑавлÑÑÑ Ð´Ð¾Ð¿ÑÑÑимÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² кодиÑовке Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .
COPY TO завеÑÑÐ°ÐµÑ ÐºÐ°Ð¶Ð´ÑÑ ÑÑÑÐ¾ÐºÑ Ñимволом новой ÑÑÑоки в ÑÑиле Unix («\n»). СеÑвеÑÑ, ÑабоÑаÑÑие в Microsoft Windows, вмеÑÑо ÑÑого вÑводÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð²Ð¾Ð·Ð²ÑÐ°Ñ ÐºÐ°ÑеÑки/Ð½Ð¾Ð²Ð°Ñ ÑÑÑока («\r\n»), но ÑолÑко пÑи вÑводе COPY в Ñайл на ÑеÑвеÑе; Ð´Ð»Ñ ÑоглаÑованноÑÑи на ÑазнÑÑ
плаÑÑоÑмаÑ
, COPY TO STDOUT вÑегда пеÑедаÑÑ Â«\n», вне завиÑимоÑÑи Ð¾Ñ Ð¿Ð»Ð°ÑÑоÑÐ¼Ñ ÑеÑвеÑа. COPY FROM Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾ÑпÑинимаÑÑ ÑÑÑоки, завеÑÑаÑÑиеÑÑ Ñимволами Ð½Ð¾Ð²Ð°Ñ ÑÑÑока, пеÑевод каÑеÑки, либо возвÑÐ°Ñ ÐºÐ°ÑеÑки+Ð½Ð¾Ð²Ð°Ñ ÑÑÑока. ЧÑÐ¾Ð±Ñ ÑменÑÑиÑÑ ÑиÑк оÑибки из-за неÑкÑаниÑованнÑÑ
Ñимволов новой ÑÑÑоки и возвÑаÑа каÑеÑки, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±Ñли бÑÑÑ Ð´Ð°Ð½Ð½Ñми, COPY FROM ÑигнализиÑÑÐµÑ Ð¾ пÑоблеме, еÑли конÑÑ ÑÑÑок во вÑ
однÑÑ
даннÑÑ
ÑазлиÑаÑÑÑÑ.
ФоÑÐ¼Ð°Ñ CSV
ÐÑÐ¾Ñ ÑоÑÐ¼Ð°Ñ Ð¿ÑименÑеÑÑÑ Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾ÑÑа и ÑкÑпоÑÑа даннÑÑ
в виде ÑпиÑка знаÑений, ÑазделÑннÑÑ
запÑÑÑми (CSV), Ñ ÐºÐ¾ÑоÑÑм могÑÑ ÑабоÑаÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ дÑÑгие пÑогÑаммÑ, напÑÐ¸Ð¼ÐµÑ ÑлекÑÑоннÑе ÑаблиÑÑ. ÐмеÑÑо пÑавил ÑкÑаниÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°Ñений, введÑннÑÑ
в PostgreSQL Ð´Ð»Ñ ÑекÑÑового ÑоÑмаÑа, ÑÑÐ¾Ñ ÑоÑÐ¼Ð°Ñ Ð¸ÑполÑзÑÐµÑ ÑÑандаÑÑнÑй меÑ
анизм ÑкÑаниÑÐ¾Ð²Ð°Ð½Ð¸Ñ CSV.
ÐнаÑÐµÐ½Ð¸Ñ Ð² каждой запиÑи ÑазделÑÑÑÑÑ Ñимволами DELIMITER. ÐÑли знаÑение ÑодеÑÐ¶Ð¸Ñ Ñимвол ÑазделиÑелÑ, Ñимвол QUOTE, маÑÐºÐµÑ NULL, Ñимвол возвÑаÑа каÑеÑки или пеÑевода ÑÑÑоки, Ñо вÑÑ Ð·Ð½Ð°Ñение дополнÑÑÑÑ ÑпеÑеди и Ñзади Ñимволами QUOTE, а лÑбое вÑ
ождение Ñимвола QUOTE или ÑпеÑÑимвола (ESCAPE) в даннÑÑ
пÑедваÑÑеÑÑÑ ÑпеÑÑимволом. С Ñказанием FORCE_QUOTE в кавÑÑки бÑдÑÑ Ð¿ÑинÑдиÑелÑно заклÑÑаÑÑÑÑ Ð»ÑбÑе знаÑÐµÐ½Ð¸Ñ Ð½Ðµ NULL в ÑказаннÑÑ
ÑÑолбÑаÑ
.
Ð ÑоÑмаÑе CSV оÑÑÑÑÑÑвÑÐµÑ ÑÑандаÑÑнÑй ÑпоÑоб оÑлиÑиÑÑ Ð·Ð½Ð°Ñение NULL Ð¾Ñ Ð¿ÑÑÑой ÑÑÑоки. Ð PostgreSQL команда COPY ÑеÑÐ°ÐµÑ ÑÑо Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ°Ð²ÑÑек. ÐнаÑение NULL вÑводиÑÑÑ Ð² виде ÑÑÑоки, задаваемой паÑамеÑÑом NULL, и не заклÑÑаеÑÑÑ Ð² кавÑÑки, Ñогда как знаÑение не NULL, Ñо ÑÑÑокой, задаваемой паÑамеÑÑом NULL, заклÑÑаеÑÑÑ. ÐапÑимеÑ, Ñ Ð¿Ð°ÑамеÑÑами по ÑмолÑÐ°Ð½Ð¸Ñ NULL запиÑÑваеÑÑÑ Ð² виде пÑÑÑой ÑÑÑоки без кавÑÑек, Ñогда как пÑÑÑÐ°Ñ ÑÑÑока запиÑÑваеÑÑÑ Ð² двойнÑÑ
кавÑÑкаÑ
(""). ÐÑи ÑÑении знаÑений дейÑÑвÑÑÑ Ð¿Ð¾Ñ
ожие пÑавила. Указание FORCE_NOT_NULL позволÑÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑÑавнений на NULL во вÑ
однÑÑ
даннÑÑ
в заданнÑÑ
ÑÑолбÑаÑ
, а FORCE_NULL â пÑеобÑазовÑваÑÑ Ð² NULL маÑкеÑÑ NULL, даже заклÑÑÑннÑе в кавÑÑки.
Так как обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа не ÑвлÑеÑÑÑ ÑпеÑиалÑнÑм Ñимволом в ÑоÑмаÑе CSV, маÑÐºÐµÑ ÐºÐ¾Ð½Ñа даннÑÑ
, иÑполÑзÑемÑй в ÑекÑÑовом Ñежиме (\.), пÑи ÑÑении даннÑÑ
в ÑоÑмаÑе CSV обÑÑно не воÑпÑинимаеÑÑÑ ÐºÐ°Ðº ÑпеÑиалÑнÑй. ÐÑклÑÑением ÑвлÑеÑÑÑ ÑиÑÑаÑиÑ, когда psql завеÑÑÐ°ÐµÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ COPY FROM STDIN (Ñо еÑÑÑ ÑÑение внÑÑÑенниÑ
даннÑÑ
COPY в SQL-ÑкÑипÑе) пÑи вÑÑÑеÑе ÑÑÑоки, ÑодеÑжаÑей ÑолÑко \. â незавиÑимо Ð¾Ñ Ñого, иÑполÑзÑеÑÑÑ ÑекÑÑовÑй или CSV Ñежим.
ÐÑимеÑание
Ð PostgreSQL до веÑÑии 18 \. без кавÑÑек вÑегда ÑаÑпознавалÑÑ ÐºÐ°Ðº маÑÐºÐµÑ ÐºÐ¾Ð½Ñа даннÑÑ
, даже пÑи ÑÑении из оÑделÑного Ñайла. ÐÐ»Ñ ÑовмеÑÑимоÑÑи Ñ Ð±Ð¾Ð»ÐµÐµ ÑÑаÑÑми веÑÑиÑми команда COPY TO бÑÐ´ÐµÑ Ð·Ð°ÐºÐ»ÑÑаÑÑ \. в кавÑÑки, еÑли он наÑ
одиÑÑÑ Ð½Ð° оÑделÑной ÑÑÑоке, Ñ
оÑÑ Ð² ÑÑом болÑÑе Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи.
ÐÑимеÑание
Ð ÑоÑмаÑе CSV вÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑвлÑÑÑÑÑ Ð·Ð½Ð°ÑимÑми. ÐаклÑÑÑнное в кавÑÑки знаÑение, дополненное пÑобелами или лÑбÑми дÑÑгими Ñимволами, кÑоме DELIMITER, бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð¸ ÑÑи ÑимволÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº оÑибкам пÑи импоÑÑе даннÑÑ
из ÑиÑÑемÑ, дополнÑÑÑей ÑÑÑоки CSV пÑобелÑнÑми Ñимволами до некоÑоÑой ÑикÑиÑованной ÑиÑинÑ. Ð ÑлÑÑае Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ Ñакой пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð½ÐµÐ¾Ð±Ñ
одимо обÑабоÑаÑÑ Ñайл CSV и ÑдалиÑÑ Ð¸Ð· него замÑкаÑÑие пÑобелÑнÑе ÑимволÑ, пÑежде Ñем загÑÑжаÑÑ Ð´Ð°Ð½Ð½Ñе из него в PostgreSQL.
ÐÑимеÑание
ÐбÑабоÑÑик ÑоÑмаÑа CSV воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¸ генеÑиÑÑÐµÑ ÑÐ°Ð¹Ð»Ñ CSV Ñо знаÑениÑми в кавÑÑкаÑ
, коÑоÑÑе могÑÑ ÑодеÑжаÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð²Ð¾Ð·Ð²ÑаÑа каÑеÑки и пеÑевода ÑÑÑоки. Таким обÑазом, ÑиÑло ÑÑÑок в ÑÑиÑ
ÑайлаÑ
не ÑÑÑого Ñавно ÑиÑÐ»Ñ ÑÑÑок в ÑаблиÑе, как в ÑайлаÑ
ÑекÑÑового ÑоÑмаÑа.
ÐÑимеÑание
Ðногие пÑогÑÐ°Ð¼Ð¼Ñ Ð³ÐµÐ½ÐµÑиÑÑÑÑ ÑÑÑаннÑе и иногда непÑиемлемÑе ÑÐ°Ð¹Ð»Ñ CSV, Ñак ÑÑо ÑÑÐ¾Ñ ÑоÑÐ¼Ð°Ñ Ð¸ÑполÑзÑеÑÑÑ ÑкоÑее по ÑоглаÑениÑ, Ñем по ÑÑандаÑÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¼ могÑÑ Ð²ÑÑÑеÑиÑÑÑÑ ÑайлÑ, коÑоÑÑе невозможно импоÑÑиÑоваÑÑ, иÑполÑзÑÑ ÑÑÐ¾Ñ Ð¼ÐµÑ
анизм, а COPY Ð¼Ð¾Ð¶ÐµÑ ÑÑоÑмиÑоваÑÑ Ñакие ÑайлÑ, ÑÑо иÑ
не ÑмогÑÑ Ð¾Ð±ÑабоÑаÑÑ Ð´ÑÑгие пÑогÑаммÑ.
ÐвоиÑнÑй ÑоÑмаÑ
ÐÑи вÑбоÑе ÑоÑмаÑа binary вÑе даннÑе ÑоÑ
ÑанÑÑÑÑÑ/ÑÑиÑÑваÑÑÑÑ Ð² двоиÑном, а не ÑекÑÑовом виде. Ðногда ÑÑÐ¾Ñ ÑоÑÐ¼Ð°Ñ Ð¾Ð±ÑабаÑÑваеÑÑÑ Ð±ÑÑÑÑее, Ñем ÑекÑÑовÑй и CSV, но он Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð½ÐµÐ¿ÐµÑеноÑимÑм Ð¼ÐµÐ¶Ð´Ñ ÑазнÑми маÑиннÑми аÑÑ
иÑекÑÑÑами и веÑÑиÑми PostgreSQL. ÐÑоме Ñого, двоиÑнÑй ÑоÑÐ¼Ð°Ñ ÑилÑно завиÑÐ¸Ñ Ð¾Ñ Ñипов даннÑÑ
; напÑимеÑ, он не позволÑÐµÑ Ð²ÑвеÑÑи даннÑе из ÑÑолбÑа smallint, а заÑем пÑоÑиÑаÑÑ Ð¸Ñ
в ÑÑÐ¾Ð»Ð±ÐµÑ integer, Ñ
оÑÑ Ñ ÑекÑÑовÑм ÑоÑмаÑом ÑÑо вполне возможно.
ФоÑÐ¼Ð°Ñ binary вклÑÑÐ°ÐµÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñайла, Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ более запиÑей, ÑодеÑжаÑиÑ
даннÑе ÑÑÑок, и оконÑание Ñайла. ÐÐ»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð² и даннÑÑ
пÑинÑÑ ÑеÑевой поÑÑдок байÑ.
ÐÑимеÑание
Ð PostgreSQL до веÑÑии 7.4 иÑполÑзовалÑÑ Ð´ÑÑгой двоиÑнÑй ÑоÑмаÑ.
Ðаголовок Ñайла
Ðаголовок Ñайла ÑодеÑÐ¶Ð¸Ñ 15 Ð±Ð°Ð¹Ñ ÑикÑиÑованнÑÑ Ð¿Ð¾Ð»ÐµÐ¹, за коÑоÑÑми ÑледÑÐµÑ Ð¾Ð±Ð»Ð°ÑÑÑ ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° пеÑеменной длинÑ. ФикÑиÑованнÑе полÑ:
- СигнаÑÑÑа
ÐоÑледоваÑелÑноÑÑÑ Ð¸Ð· 11 байÑ
PGCOPY\n\377\r\n\0â замеÑÑÑе, ÑÑо нÑлевой Ð±Ð°Ð¹Ñ ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑной ÑаÑÑÑÑ ÑигнаÑÑÑÑ. (ÐÑа ÑигнаÑÑÑа позволÑÐµÑ Ð»ÐµÐ³ÐºÐ¾ вÑÑвиÑÑ ÑайлÑ, иÑпоÑÑеннÑе пÑи пеÑедаÑе, не ÑÐ¾Ñ ÑанÑÑÑей вÑе 8 Ð±Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ . Ðна измениÑÑÑ Ð¿Ñи пÑÐ¾Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ð¸ ÑеÑез ÑилÑÑÑÑ, менÑÑÑие конÑÑ ÑÑÑок, оÑбÑаÑÑваÑÑие нÑлевÑе байÑÑ Ð¸Ð»Ð¸ ÑÑаÑÑие биÑÑ, либо добавлÑÑÑие ÑÑÑноÑÑÑ.)- Ðоле Ñлагов
ÐаÑка из 32 биÑ, обознаÑаÑÑÐ°Ñ Ð²Ð°Ð¶Ð½Ñе аÑпекÑÑ ÑоÑмаÑа Ñайла. ÐиÑÑ Ð½ÑмеÑÑÑÑÑÑ Ð¾Ñ 0 (LSB) до 31 (MSB). УÑÑиÑе, ÑÑо ÑÑо поле Ñ ÑаниÑÑÑ Ð² ÑеÑевом поÑÑдке Ð±Ð°Ð¹Ñ (наиболее знаÑаÑий Ð±Ð°Ð¹Ñ Ð¿ÐµÑвÑй), как и вÑе ÑелоÑиÑленнÑе Ð¿Ð¾Ð»Ñ Ð² ÑÑом ÑоÑмаÑе. ÐиÑÑ 16â31 заÑезеÑвиÑÐ¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÐºÑиÑиÑнÑÑ Ð¾ÑобенноÑÑей ÑоÑмаÑа; обÑабоÑÑик должен пÑеÑваÑÑ ÑÑение, вÑÑÑеÑив лÑбой неожиданнÑй Ð±Ð¸Ñ Ð² ÑÑом диапазоне. ÐиÑÑ 0â15 заÑезеÑвиÑÐ¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¾ÑобенноÑÑей, ÑвÑзаннÑÑ Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑÑÑ; обÑабоÑÑик Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоÑÑо игноÑиÑоваÑÑ Ð»ÑбÑе неожиданнÑе биÑÑ Ð² ÑÑом диапазоне. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¾Ð¿ÑеделÑн ÑолÑко один биÑовÑй Ñлаг, оÑÑалÑнÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑÐ°Ð²Ð½Ñ 0:
- ÐÐ¸Ñ 16
ÐÑи 1 в даннÑе вклÑÑаеÑÑÑ OID, пÑи 0 â не вклÑÑаеÑÑÑ. СиÑÑемнÑе ÑÑолбÑÑ oid в PostgreSQL болÑÑе не поддеÑживаÑÑÑÑ, но ÑÑÐ¾Ñ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑÐ¾Ñ Ð²ÑÑ ÐµÑÑ ÑÐ¾Ñ ÑанÑеÑÑÑ.
- Ðлина облаÑÑи ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ°
Целое 32-биÑное ÑиÑло, опÑеделÑÑÑее Ð´Ð»Ð¸Ð½Ñ Ð² байÑÐ°Ñ Ð¾ÑÑалÑного заголовка, не вклÑÑÐ°Ñ Ñамо ÑÑо знаÑение. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑодеÑÐ¶Ð¸Ñ 0, и ÑÑÐ°Ð·Ñ Ð·Ð° ним ÑледÑÐµÑ Ð¿ÐµÑÐ²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ. ÐÑи бÑдÑÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸ÑÑ ÑоÑмаÑа в заголовок могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе даннÑе. ÐбÑабоÑÑик должен пÑоÑÑо пÑопÑÑкаÑÑ Ð²Ñе ÑаÑÑиÑеннÑе даннÑе заголовка, о коÑоÑÑÑ ÐµÐ¼Ñ Ð½Ð¸Ñего не извеÑÑно.
ÐблаÑÑÑ ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° пÑедÑÑмоÑÑена Ð´Ð»Ñ ÑазмеÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑи ÑамоопÑеделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð². Ðоле Ñлагов не должно ÑодеÑжаÑÑ Ñказаний о Ñом, ÑÑо ÑодеÑжиÑÑÑ Ð² облаÑÑи ÑаÑÑиÑениÑ. ТоÑное ÑодеÑжимое облаÑÑи ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð¿Ñеделено в бÑдÑÑÐ¸Ñ Ð²ÐµÑÑиÑÑ .
ÐÑи Ñаком Ð¿Ð¾Ð´Ñ Ð¾Ð´Ðµ возможно как обÑаÑно-ÑовмеÑÑимое дополнение заголовка (добавиÑÑ Ð±Ð»Ð¾ÐºÐ¸ ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° или ÑÑÑановиÑÑ Ð¼Ð»Ð°Ð´Ñие биÑÑ Ñлагов), Ñак и не обÑаÑно-ÑовмеÑÑимое (ÑÑÑановиÑÑ ÑÑаÑÑие биÑÑ Ñлагов, ÑигнализиÑÑÑÑие о подобном изменении, и добавиÑÑ Ð²ÑпомогаÑелÑнÑе даннÑе в облаÑÑÑ ÑаÑÑиÑениÑ, еÑли ÑÑо поÑÑебÑеÑÑÑ).
ÐапиÑи
ÐÐ°Ð¶Ð´Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð½Ð°ÑинаеÑÑÑ Ñ 16-биÑного Ñелого ÑиÑла, опÑеделÑÑÑего колиÑеÑÑво полей в запиÑи. (РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð²Ð¾ вÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ðµ ÑиÑло полей, но Ñак Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ вÑегда.) ÐаÑем, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ Ð² запиÑи ÑказÑваеÑÑÑ 32-биÑÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° полÑ, за коÑоÑой ÑледÑÐµÑ ÑÑо колиÑеÑÑво Ð±Ð°Ð¹Ñ Ñ Ð´Ð°Ð½Ð½Ñми полÑ. (ÐнаÑение Ð´Ð»Ð¸Ð½Ñ Ð½Ðµ вклÑÑÐ°ÐµÑ Ñвой ÑазмеÑ, и Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñавно нÑлÑ.) РкаÑеÑÑве оÑобого ваÑианÑа, -1 обознаÑаеÑ, ÑÑо в поле ÑодеÑжиÑÑÑ NULL. Ð ÑлÑÑае Ñ NULL за длиной не ÑледÑÑÑ Ð±Ð°Ð¹ÑÑ Ð´Ð°Ð½Ð½ÑÑ .
ÐÑÑавнивание или какие-либо дополниÑелÑнÑе даннÑе Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾Ð»Ñми не вÑÑавлÑÑÑÑÑ.
РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿ÑедполагаеÑÑÑ, ÑÑо вÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² Ñайле двоиÑного ÑоÑмаÑа ÑодеÑжаÑÑÑ Ð² двоиÑном ÑоÑмаÑе (ÑоÑмаÑе под кодом 1). Ðозможно, в бÑдÑÑем ÑаÑÑиÑении в заголовок бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ поле, позволÑÑÑее задаваÑÑ Ð´ÑÑгие ÐºÐ¾Ð´Ñ ÑоÑмаÑов Ð´Ð»Ñ ÑазнÑÑ ÑÑолбÑов.
ЧÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ Ð¿Ð¾Ð´Ñ
одÑÑий двоиÑнÑй ÑоÑÐ¼Ð°Ñ Ð´Ð»Ñ ÑакÑиÑеÑкиÑ
даннÑÑ
, обÑаÑиÑеÑÑ Ðº иÑÑ
Ð¾Ð´Ð½Ð¾Ð¼Ñ ÐºÐ¾Ð´Ñ PostgreSQL, в ÑаÑÑноÑÑи, к ÑÑнкÑиÑм *send и *recv Ð´Ð»Ñ Ñипов даннÑÑ
каждого ÑÑолбÑа (обÑÑно ÑÑи ÑÑнкÑии наÑ
одÑÑÑÑ Ð² каÑалоге src/backend/utils/adt/ в деÑеве иÑÑ
одного кода).
ÐÑли в Ñайл вклÑÑаеÑÑÑ OID, поле OID ÑледÑÐµÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ за ÑиÑлом, опÑеделÑÑÑим колиÑеÑÑво полей. ÐÑо поле не оÑлиÑаеÑÑÑ Ð¾Ñ Ð´ÑÑÐ³Ð¸Ñ Ð½Ð¸Ñем, кÑоме Ñого, ÑÑо оно не ÑÑиÑÑваеÑÑÑ Ð² колиÑеÑÑве полей. ÐамеÑÑÑе, ÑÑо в ÑекÑÑÐ¸Ñ Ð²ÐµÑÑиÑÑ PostgreSQL ÑиÑÑемнÑе ÑÑолбÑÑ oid не поддеÑживаÑÑÑÑ.
ÐконÑание Ñайла
ÐконÑание Ñайла ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· 16-биÑного Ñелого, ÑодеÑжаÑего -1. ÐÑо позволÑÐµÑ Ð»ÐµÐ³ÐºÐ¾ оÑлиÑиÑÑ ÐµÐ³Ð¾ Ð¾Ñ ÑÑÑÑÑика полей в запиÑи.
ÐбÑабоÑÑик, ÑиÑаÑÑий Ñайл, должен вÑдаÑÑ Ð¾ÑибкÑ, еÑли ÑиÑло полей в запиÑи не Ñавно -1 или Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ð¼Ñ ÑиÑÐ»Ñ ÑÑолбÑов. ÐÑо обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¿ÑовеÑÐºÑ ÑÐ¸Ð½Ñ ÑонизаÑии даннÑÑ .
ÐÑимеÑÑ
Ð ÑледÑÑÑем пÑимеÑе ÑаблиÑа пеÑедаÑÑÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ Ñ ÑазделиÑелем полей «веÑÑикалÑÐ½Ð°Ñ ÑеÑÑа» (|):
COPY country TO STDOUT (DELIMITER '|');
ÐопиÑование даннÑÑ
из Ñайла в ÑаблиÑÑ country:
COPY country FROM '/usr1/proj/bray/sql/country_data';
ÐопиÑование в Ñайл ÑолÑко даннÑÑ ÑÑÑан, название коÑоÑÑÑ Ð½Ð°ÑинаеÑÑÑ Ñ 'A':
COPY (SELECT * FROM country WHERE country_name LIKE 'A%') TO '/usr1/proj/bray/sql/a_list_countries.copy';
ÐÐ»Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² ÑжаÑÑй Ñайл можно напÑавиÑÑ Ð²Ñвод ÑеÑез внеÑнÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ ÑжаÑиÑ:
COPY country TO PROGRAM 'gzip > /usr1/proj/bray/sql/country_data.gz';
ÐÑÐ¸Ð¼ÐµÑ Ð´Ð°Ð½Ð½ÑÑ
, подÑ
одÑÑиÑ
Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² ÑаблиÑÑ Ð¸Ð· STDIN:
AF AFGHANISTAN AL ALBANIA DZ ALGERIA ZM ZAMBIA ZW ZIMBABWE
ÐÑимеÑание: пÑÐ¾Ð±ÐµÐ»Ñ Ð² каждой ÑÑÑоке на Ñамом деле обознаÑаÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑабÑлÑÑии.
Ðиже пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ñе же даннÑе, но вÑведеннÑе в двоиÑном ÑоÑмаÑе. ÐаннÑе Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð¿Ð¾Ñле обÑабоÑки Unix-ÑÑилиÑой od -c. ТаблиÑа ÑодеÑÐ¶Ð¸Ñ ÑÑи ÑÑолбÑа; пеÑвÑй Ð¸Ð¼ÐµÐµÑ Ñип char(2), вÑоÑой â text, а ÑÑеÑий â integer. ÐоÑледний ÑÑÐ¾Ð»Ð±ÐµÑ Ð²Ð¾ вÑеÑ
ÑÑÑокаÑ
ÑодеÑÐ¶Ð¸Ñ NULL.
0000000 P G C O P Y \n 377 \r \n \0 \0 \0 \0 \0 \0 0000020 \0 \0 \0 \0 003 \0 \0 \0 002 A F \0 \0 \0 013 A 0000040 F G H A N I S T A N 377 377 377 377 \0 003 0000060 \0 \0 \0 002 A L \0 \0 \0 007 A L B A N I 0000100 A 377 377 377 377 \0 003 \0 \0 \0 002 D Z \0 \0 \0 0000120 007 A L G E R I A 377 377 377 377 \0 003 \0 \0 0000140 \0 002 Z M \0 \0 \0 006 Z A M B I A 377 377 0000160 377 377 \0 003 \0 \0 \0 002 Z W \0 \0 \0 \b Z I 0000200 M B A B W E 377 377 377 377 377 377
СовмеÑÑимоÑÑÑ
ÐпеÑаÑÐ¾Ñ COPY оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе SQL.
Ðо веÑÑии PostgreSQL 9.0 иÑполÑзовалÑÑ Ð¸ по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑледÑÑÑий ÑинÑакÑиÑ:
COPYимÑ_ÑаблиÑÑ[ (имÑ_ÑÑолбÑа[, ...] ) ] FROM { 'имÑ_Ñайла' | STDIN } [ [ WITH ] [ BINARY ] [ DELIMITER [ AS ] 'Ñимвол_ÑазделиÑелÑ' ] [ NULL [ AS ] 'маÑкеÑ_NULL' ] [ CSV [ HEADER ] [ QUOTE [ AS ] 'Ñимвол_кавÑÑек' ] [ ESCAPE [ AS ] 'Ñимвол_ÑкÑаниÑованиÑ' ] [ FORCE NOT NULLимÑ_ÑÑолбÑа[, ...] ] ] ] COPY {имÑ_ÑаблиÑÑ[ (имÑ_ÑÑолбÑа[, ...] ) ] | (запÑоÑ) } TO { 'имÑ_Ñайла' | STDOUT } [ [ WITH ] [ BINARY ] [ DELIMITER [ AS ] 'Ñимвол_ÑазделиÑелÑ' ] [ NULL [ AS ] 'маÑкеÑ_NULL' ] [ CSV [ HEADER ] [ QUOTE [ AS ] 'Ñимвол_кавÑÑек' ] [ ESCAPE [ AS ] 'Ñимвол_ÑкÑаниÑованиÑ' ] [ FORCE QUOTE {имÑ_ÑÑолбÑа[, ...] | * } ] ] ]
ÐамеÑÑÑе, ÑÑо в ÑÑом ÑинÑакÑиÑе клÑÑевÑе Ñлова BINARY и CSV обÑабаÑÑваÑÑÑÑ ÐºÐ°Ðº незавиÑимÑе, а не как аÑгÑменÑÑ Ð¿Ð°ÑамеÑÑа FORMAT.
Ðо веÑÑии PostgreSQL 7.3 иÑполÑзовалÑÑ Ð¸ по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑледÑÑÑий ÑинÑакÑиÑ:
COPY [ BINARY ]имÑ_ÑаблиÑÑFROM { 'имÑ_Ñайла' | STDIN } [ [USING] DELIMITERS 'Ñимвол_ÑазделиÑелÑ' ] [ WITH NULL AS 'маÑкеÑ_NULL' ] COPY [ BINARY ]имÑ_ÑаблиÑÑTO { 'имÑ_Ñайла' | STDOUT } [ [USING] DELIMITERS 'Ñимвол_ÑазделиÑелÑ' ] [ WITH NULL AS 'маÑкеÑ_NULL' ]