COPY
COPY â копиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе Ð¼ÐµÐ¶Ð´Ñ Ñайлом и ÑаблиÑей
СинÑакÑиÑ
COPYимÑ_ÑаблиÑÑ[ (имÑ_ÑÑолбÑа[, ...] ) ] FROM { 'имÑ_Ñайла' | PROGRAM 'команда' | STDIN } [ [ WITH ] (паÑамеÑÑ[, ...] ) ] [ WHEREÑÑловие] COPY {имÑ_ÑаблиÑÑ[ (имÑ_ÑÑолбÑа[, ...] ) ] | (query) } TO { 'имÑ_Ñайла' | PROGRAM 'команда' | STDOUT } [ [ WITH ] (паÑамеÑÑ[, ...] ) ] ÐдеÑÑ Ð´Ð¾Ð¿ÑÑкаеÑÑÑпаÑамеÑÑ: FORMATимÑ_ÑоÑмаÑаFREEZE [boolean] DELIMITER 'Ñимвол_ÑазделиÑелÑ' NULL 'маÑкеÑ_NULL' HEADER [boolean] QUOTE 'Ñимвол_кавÑÑек' ESCAPE 'Ñимвол_ÑкÑаниÑованиÑ' FORCE_QUOTE { (имÑ_ÑÑолбÑа[, ...] ) | * } FORCE_NOT_NULL (имÑ_ÑÑолбÑа[, ...] ) FORCE_NULL (имÑ_ÑÑолбÑа[, ...] ) ENCODING 'имÑ_кодиÑовки'
ÐпиÑание
COPY пеÑемеÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе Ð¼ÐµÐ¶Ð´Ñ ÑаблиÑами Postgres Pro и обÑÑнÑми Ñайлами в Ñайловой ÑиÑÑеме. COPY TO копиÑÑÐµÑ ÑодеÑжимое ÑаблиÑÑ Ð² Ñайл, а COPY FROM â из Ñайла в ÑаблиÑÑ (добавлÑÐµÑ Ð´Ð°Ð½Ð½Ñе к Ñем, ÑÑо Ñже ÑодеÑжалиÑÑ Ð² ÑаблиÑе). COPY TO Ð¼Ð¾Ð¶ÐµÑ Ñакже ÑкопиÑоваÑÑ ÑезÑлÑÑаÑÑ Ð·Ð°Ð¿ÑоÑа SELECT.
ÐÑли ÑказÑваеÑÑÑ ÑпиÑок ÑÑолбÑов, COPY TO копиÑÑÐµÑ Ð² Ñайл ÑолÑко даннÑе ÑказаннÑÑ
ÑÑолбÑов, а COPY FROM вÑÑавлÑÐµÑ ÐºÐ°Ð¶Ð´Ð¾Ðµ поле из Ñайла в ÑооÑвеÑÑÑвÑÑÑий ÐµÐ¼Ñ Ð¿Ð¾ поÑÑÐ´ÐºÑ ÑÑÐ¾Ð»Ð±ÐµÑ Ð¸Ð· Ñказанного ÑпиÑка. Ð ÑлÑÑае оÑÑÑÑÑÑÐ²Ð¸Ñ Ð² ÑÑом ÑпиÑке какиÑ
-либо ÑÑолбÑов ÑаблиÑÑ Ð¿Ñи COPY FROM они полÑÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.
COPY Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ñайла ÑказÑÐ²Ð°ÐµÑ ÑеÑвеÑÑ Postgres Pro ÑиÑаÑÑ Ð¸Ð»Ð¸ запиÑÑваÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑÑÐ¾Ñ Ñайл. ÐаданнÑй Ñайл должен бÑÑÑ Ð´Ð¾ÑÑÑпен полÑзоваÑÐµÐ»Ñ Postgres Pro (ÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ коÑоÑого ÑабоÑÐ°ÐµÑ ÑеÑвеÑ), и пÑÑÑ Ðº ÑÐ°Ð¹Ð»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ задаваÑÑÑÑ Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ ÑеÑвеÑа. Ðогда ÑказÑваеÑÑÑ Ð¿Ð°ÑамеÑÑ PROGRAM, ÑеÑÐ²ÐµÑ Ð²ÑполнÑÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½ÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸ ÑиÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе из ÑÑандаÑÑного вÑвода пÑогÑаммÑ, либо запиÑÑÐ²Ð°ÐµÑ Ð¸Ñ
в ÑÑандаÑÑнÑй ввод. Ðоманда должна опÑеделÑÑÑÑÑ Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ ÑеÑвеÑа и бÑÑÑ Ð´Ð¾ÑÑÑпной Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Postgres Pro. Ðогда ÑказÑваеÑÑÑ STDIN или STDOUT, даннÑе пеÑедаÑÑÑÑ ÑеÑез Ñоединение клиенÑа Ñ ÑеÑвеÑом.
ÐаÑамеÑÑÑ
имÑ_ÑаблиÑÑÐÐ¼Ñ ÑÑÑеÑÑвÑÑÑей ÑаблиÑÑ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹).
имÑ_ÑÑолбÑаÐеобÑзаÑелÑнÑй ÑпиÑок ÑÑолбÑов, даннÑе коÑоÑÑÑ Ð±ÑдÑÑ ÐºÐ¾Ð¿Ð¸ÑоваÑÑÑÑ. ÐÑли ÑÑÐ¾Ñ ÑпиÑок оÑÑÑÑÑÑвÑеÑ, копиÑÑÑÑÑÑ Ð²Ñе ÑÑолбÑÑ ÑаблиÑÑ, за иÑклÑÑением генеÑиÑÑемÑÑ .
queryÐоманда SELECT, VALUES, INSERT, UPDATE или DELETE, ÑезÑлÑÑаÑÑ ÐºÐ¾ÑоÑой бÑдÑÑ ÑкопиÑованÑ. ÐамеÑÑÑе, ÑÑо запÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ заклÑÑаÑÑÑÑ Ð² Ñкобки.
ÐÐ»Ñ Ð·Ð°Ð¿ÑоÑов
INSERT,UPDATEиDELETEдолжно задаваÑÑÑÑ Ð¿Ñедложение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Ñ ÑекÑиониÑованной ÑаблиÑей в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½ÐµÐ»ÑзÑ.ÐамеÑÑÑе, ÑÑо вÑе дÑÑгие ÑеанÑÑ Ð±ÑдÑÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ видеÑÑ Ð´Ð°Ð½Ð½Ñе, как ÑолÑко они бÑдÑÑ ÑÑпеÑно загÑÑженÑ. ÐÑо наÑÑÑÐ°ÐµÑ Ð¿ÑинÑÑÑе пÑавила видимоÑÑи MVCC, Ñак ÑÑо полÑзоваÑели, вклÑÑаÑÑие ÑÑÐ¾Ñ Ñежим, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑÑ, какие пÑÐ¾Ð±Ð»ÐµÐ¼Ñ ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ.
DELIMITERÐадаÑÑ Ñимвол, ÑазделÑÑÑий ÑÑолбÑÑ Ð² ÑÑÑÐ¾ÐºÐ°Ñ Ñайла. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо Ñимвол ÑабÑлÑÑии в ÑекÑÑовом ÑоÑмаÑе и запÑÑÐ°Ñ Ð² ÑоÑмаÑе
CSV. ÐадаваемÑй Ñимвол должен бÑÑÑ Ð¾Ð´Ð½Ð¾Ð±Ð°Ð¹ÑовÑм. ÐÐ»Ñ ÑоÑмаÑаbinaryÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ допÑÑкаеÑÑÑ.NULLÐпÑеделÑÐµÑ ÑÑÑокÑ, задаÑÑÑÑ Ð·Ð½Ð°Ñение NULL. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð² ÑекÑÑовом ÑоÑмаÑе ÑÑо
\N(обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа и N), а в ÑоÑмаÑеCSVâ пÑÑÑÐ°Ñ ÑÑÑока без кавÑÑек. ÐÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð¸ в ÑекÑÑовом ÑоÑмаÑе, еÑли не ÑÑебÑеÑÑÑ ÑазлиÑаÑÑ Ð¿ÑÑÑÑе ÑÑÑоки и NULL. ÐÐ»Ñ ÑоÑмаÑаbinaryÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ допÑÑкаеÑÑÑ.ÐÑимеÑание
ÐÑи вÑполнении
COPY FROMлÑбÑе знаÑениÑ, ÑовпадаÑÑие Ñ ÑÑой ÑÑÑокой, ÑÐ¾Ñ ÑанÑÑÑÑÑ ÐºÐ°Ðº знаÑение NULL, Ñак ÑÑо пÑи пеÑеноÑе даннÑÑ Ð²Ð°Ð¶Ð½Ð¾ ÑбедиÑÑÑÑ Ð² Ñом, ÑÑо ÑÑо Ñа же ÑÑÑока, ÑÑо пÑименÑлаÑÑ Ð²COPY TO.HEADERУказÑваеÑ, ÑÑо Ñайл ÑодеÑÐ¶Ð¸Ñ ÑÑÑÐ¾ÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ ÑÑолбÑов. ÐÑи вÑводе пеÑÐ²Ð°Ñ ÑÑÑока Ñайла бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð¸Ð¼ÐµÐ½Ð° ÑÑолбÑов ÑаблиÑÑ, а пÑи вводе пеÑÐ²Ð°Ñ ÑÑÑока пÑоÑÑо игноÑиÑÑеÑÑÑ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð¾Ð¿ÑÑкаеÑÑÑ ÑолÑко Ð´Ð»Ñ ÑоÑмаÑа
CSV.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.ENCODINGУказÑваеÑ, ÑÑо Ñайл Ð¸Ð¼ÐµÐµÑ ÐºÐ¾Ð´Ð¸ÑовкÑ
имÑ_кодиÑовки. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑÑен, вÑбиÑаеÑÑÑ ÑекÑÑÐ°Ñ ÐºÐ¾Ð´Ð¸Ñовка клиенÑа. ÐодÑобнее об ÑÑом говоÑиÑÑÑ Ð½Ð¸Ð¶Ðµ, в пÑимеÑаниÑÑ .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, ÑиÑаÑÑÑÑ Ð¸Ð»Ð¸ запиÑÑваÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑеÑвеÑом, не клиенÑÑким пÑиложением. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑаÑполагаÑÑÑÑ Ð½Ð° ÑеÑвеÑе или бÑÑÑ Ð´Ð¾ÑÑÑпнÑми ÑеÑвеÑÑ, а не клиенÑÑ. Ðни Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð½Ð° ÑÑение или запиÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Postgres Pro (полÑзоваÑелÑ, Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ коÑоÑого ÑабоÑÐ°ÐµÑ ÑеÑвеÑ), не клиенÑÑ. ÐналогиÑно, команда, ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿Ð°ÑамеÑÑом PROGRAM, вÑполнÑеÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑеÑвеÑом, а не клиенÑÑким пÑиложением, и должна бÑÑÑ Ð´Ð¾ÑÑÑпна на вÑполнение полÑзоваÑÐµÐ»Ñ Postgres Pro. ÐÑполнÑÑÑ 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. ÐÐ»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеноÑимоÑÑи на дÑÑгие инÑÑаллÑÑии Postgres Pro, в коÑоÑÑÑ
могÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð½ÐµÑÑандаÑÑнÑе знаÑÐµÐ½Ð¸Ñ DateStyle, знаÑение DateStyle ÑледÑÐµÑ ÑÑÑановиÑÑ ÑавнÑм ISO до вÑзова COPY TO. Также ÑекомендÑеÑÑÑ Ð½Ðµ вÑгÑÑжаÑÑ Ð´Ð°Ð½Ð½Ñе Ñ IntervalStyle ÑавнÑм sql_standard, Ñак как ÑеÑÐ²ÐµÑ Ñ Ð´ÑÑгим знаÑением IntervalStyle Ð¼Ð¾Ð¶ÐµÑ Ð½ÐµÐ¿ÑавилÑно воÑпÑинимаÑÑ Ð¾ÑÑиÑаÑелÑнÑе инÑеÑÐ²Ð°Ð»Ñ Ð² ÑакиÑ
даннÑÑ
.
ÐÑ
однÑе даннÑе инÑеÑпÑеÑиÑÑÑÑÑÑ ÑоглаÑно кодиÑовке, заданной паÑамеÑÑом ENCODING, или ÑекÑÑей кодиÑовке клиенÑа, а вÑÑ
однÑе кодиÑÑÑÑÑÑ Ð² кодиÑовке ENCODING или ÑекÑÑей кодиÑовке клиенÑа, даже еÑли даннÑе не пÑоÑ
одÑÑ ÑеÑез клиенÑа, а ÑÑиÑÑваÑÑÑÑ Ð¸Ð»Ð¸ запиÑÑваÑÑÑÑ Ð² Ñайл непоÑÑедÑÑвенно ÑеÑвеÑом.
COPY пÑекÑаÑÐ°ÐµÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð¿Ñи пеÑвой оÑибке. ÐÑо не должно пÑиводиÑÑ Ðº пÑоблемам в ÑлÑÑае Ñ COPY TO, но поÑле COPY FROM в Ñелевой ÑаблиÑе оÑÑаÑÑÑÑ Ñанее полÑÑеннÑе ÑÑÑоки. ÐÑи ÑÑÑоки не бÑдÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñми и доÑÑÑпнÑми, но бÑдÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ Ð¼ÐµÑÑо на диÑке. ÐÑли Ñбой пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿Ñи копиÑовании болÑÑого обÑÑма даннÑÑ
, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº знаÑиÑелÑнÑм поÑеÑÑм диÑкового пÑоÑÑÑанÑÑва. ÐÑи желании веÑнÑÑÑ Ð¿Ð¾ÑеÑÑннÑй обÑÑм, ÑÑо можно ÑделаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM.
FORCE_NULL и FORCE_NOT_NULL можно пÑимениÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно к Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑÑолбÑÑ. Ð ÑезÑлÑÑаÑе NULL-знаÑÐµÐ½Ð¸Ñ Ð² кавÑÑкаÑ
бÑдÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² NULL, а NULL-знаÑÐµÐ½Ð¸Ñ Ð±ÐµÐ· кавÑÑек â в пÑÑÑÑе ÑÑÑоки.
Postgres Pro не пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð½ÑлевÑе байÑÑ Ð² даннÑÑ
. ÐÑли Ð²Ñ Ñ
оÑиÑе импоÑÑиÑоваÑÑ Ñакие даннÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ COPY FROM, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ Ð² паÑамеÑÑе конÑигÑÑаÑии nul_byte_replacement_on_import ASCII-Ñимвол Ð´Ð»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ Ð½ÑлевÑÑ
байÑов на леÑÑ.
ФоÑмаÑÑ Ñайлов
ТекÑÑовÑй ÑоÑмаÑ
Ðогда пÑименÑеÑÑÑ ÑоÑÐ¼Ð°Ñ text, ÑиÑаемÑе или запиÑÑваемÑе даннÑе пÑедÑÑавлÑÑÑ Ñобой ÑекÑÑовÑй Ñайл, ÑÑÑока в коÑоÑом ÑооÑвеÑÑÑвÑÐµÑ ÑÑÑоке ÑаблиÑÑ. СÑолбÑÑ Ð² ÑÑÑоке ÑазделÑÑÑÑÑ Ñимволом-ÑазделиÑелем. ÐнаÑÐµÐ½Ð¸Ñ ÑамиÑ
ÑÑолбÑов â ÑекÑÑовÑе ÑÑÑоки, вÑдаваемÑе ÑÑнкÑией вÑвода, либо воÑпÑинимаемÑе ÑÑнкÑией ввода, ÑооÑвеÑÑÑвÑÑÑей ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
ÑÑолбÑа. ÐаданнÑй маÑÐºÐµÑ NULL вÑводиÑÑÑ Ð¸ ÑÑиÑÑваеÑÑÑ Ð²Ð¼ÐµÑÑо ÑÑолбÑов Ñо знаÑением NULL. COPY FROM вÑдаÑÑ Ð¾ÑибкÑ, еÑли в лÑбой из ÑÑÑок во вÑ
одном Ñайле оказÑваеÑÑÑ Ð±Ð¾Ð»ÑÑе или менÑÑе ÑÑолбÑов, Ñем ожидаеÑÑÑ.
ÐÐ¾Ð½ÐµÑ Ð´Ð°Ð½Ð½ÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑаÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑокой, ÑодеÑжаÑей ÑолÑко обÑаÑнÑÑ ÐºÐ¾ÑÑÑ Ð¸ ÑоÑÐºÑ (\.). ÐаÑÐºÐµÑ ÐºÐ¾Ð½Ñа даннÑÑ
не ÑÑебÑеÑÑÑ Ð¿Ñи ÑÑении из Ñайла, Ñак как его ÑÐ¾Ð»Ñ Ð²Ð¿Ð¾Ð»Ð½Ðµ вÑполнÑÐµÑ ÐºÐ¾Ð½ÐµÑ Ñайла; он необÑ
одим ÑолÑко пÑи пеÑедаÑе даннÑÑ
в/из клиенÑÑкого пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ пÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð¾Ð±Ð¼ÐµÐ½Ð° до веÑÑии 3.0.
Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ (\) в даннÑÑ
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), Ñ ÐºÐ¾ÑоÑÑм могÑÑ ÑабоÑаÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ дÑÑгие пÑогÑаммÑ, напÑÐ¸Ð¼ÐµÑ ÑлекÑÑоннÑе ÑаблиÑÑ. ÐмеÑÑо пÑавил ÑкÑаниÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°Ñений, введÑннÑÑ
в Postgres Pro Ð´Ð»Ñ ÑекÑÑового ÑоÑмаÑа, ÑÑÐ¾Ñ ÑоÑÐ¼Ð°Ñ Ð¸ÑполÑзÑÐµÑ ÑÑандаÑÑнÑй меÑ
анизм ÑкÑаниÑÐ¾Ð²Ð°Ð½Ð¸Ñ CSV.
ÐнаÑÐµÐ½Ð¸Ñ Ð² каждой запиÑи ÑазделÑÑÑÑÑ Ñимволами DELIMITER. ÐÑли знаÑение ÑодеÑÐ¶Ð¸Ñ Ñимвол ÑазделиÑелÑ, Ñимвол QUOTE, маÑÐºÐµÑ NULL, Ñимвол возвÑаÑа каÑеÑки или пеÑевода ÑÑÑоки, Ñо вÑÑ Ð·Ð½Ð°Ñение дополнÑÑÑÑ ÑпеÑеди и Ñзади Ñимволами QUOTE, а лÑбое вÑ
ождение Ñимвола QUOTE или ÑпеÑÑимвола (ESCAPE) в даннÑÑ
пÑедваÑÑеÑÑÑ ÑпеÑÑимволом. С Ñказанием FORCE_QUOTE в кавÑÑки бÑдÑÑ Ð¿ÑинÑдиÑелÑно заклÑÑаÑÑÑÑ Ð»ÑбÑе знаÑÐµÐ½Ð¸Ñ Ð½Ðµ NULL в ÑказаннÑÑ
ÑÑолбÑаÑ
.
Ð ÑоÑмаÑе CSV оÑÑÑÑÑÑвÑÐµÑ ÑÑандаÑÑнÑй ÑпоÑоб оÑлиÑиÑÑ Ð·Ð½Ð°Ñение NULL Ð¾Ñ Ð¿ÑÑÑой ÑÑÑоки. Ð Postgres Pro команда COPY ÑеÑÐ°ÐµÑ ÑÑо Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ°Ð²ÑÑек. ÐнаÑение NULL вÑводиÑÑÑ Ð² виде ÑÑÑоки, задаваемой паÑамеÑÑом NULL, и не заклÑÑаеÑÑÑ Ð² кавÑÑки, Ñогда как знаÑение не NULL, Ñо ÑÑÑокой, задаваемой паÑамеÑÑом NULL, заклÑÑаеÑÑÑ. ÐапÑимеÑ, Ñ Ð¿Ð°ÑамеÑÑами по ÑмолÑÐ°Ð½Ð¸Ñ NULL запиÑÑваеÑÑÑ Ð² виде пÑÑÑой ÑÑÑоки без кавÑÑек, Ñогда как пÑÑÑÐ°Ñ ÑÑÑока запиÑÑваеÑÑÑ Ð² двойнÑÑ
кавÑÑкаÑ
(""). ÐÑи ÑÑении знаÑений дейÑÑвÑÑÑ Ð¿Ð¾Ñ
ожие пÑавила. Указание FORCE_NOT_NULL позволÑÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑÑавнений на NULL во вÑ
однÑÑ
даннÑÑ
в заданнÑÑ
ÑÑолбÑаÑ
, а FORCE_NULL â пÑеобÑазовÑваÑÑ Ð² NULL маÑкеÑÑ NULL, даже заклÑÑÑннÑе в кавÑÑки.
Так как обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа не ÑвлÑеÑÑÑ ÑпеÑÑимволом в ÑоÑмаÑе CSV, маÑÐºÐµÑ ÐºÐ¾Ð½Ñа даннÑÑ
\. Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ знаÑением даннÑÑ
. Ðо избежание оÑибок инÑеÑпÑеÑаÑии даннÑе \., вÑводимÑе в виде единÑÑвенного ÑлеменÑа ÑÑÑоки, авÑомаÑиÑеÑки заклÑÑаÑÑÑÑ Ð² кавÑÑки пÑи вÑводе, а пÑи вводе ÑÑÐ¾Ñ Ð¼Ð°ÑкеÑ, заклÑÑÑннÑй в кавÑÑки, не воÑпÑинимаеÑÑÑ ÐºÐ°Ðº маÑÐºÐµÑ ÐºÐ¾Ð½Ñа даннÑÑ
. ÐÑи загÑÑзке Ñайла, Ñозданного дÑÑгой пÑогÑаммой, в коÑоÑом в единÑÑвенном ÑÑолбÑе без кавÑÑек оказалоÑÑ Ð·Ð½Ð°Ñение \., поÑÑебÑеÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно заклÑÑиÑÑ ÑÑо знаÑение в кавÑÑки.
ÐÑимеÑание
Ð ÑоÑмаÑе CSV вÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑвлÑÑÑÑÑ Ð·Ð½Ð°ÑимÑми. ÐаклÑÑÑнное в кавÑÑки знаÑение, дополненное пÑобелами или лÑбÑми дÑÑгими Ñимволами, кÑоме DELIMITER, бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð¸ ÑÑи ÑимволÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº оÑибкам пÑи импоÑÑе даннÑÑ
из ÑиÑÑемÑ, дополнÑÑÑей ÑÑÑоки CSV пÑобелÑнÑми Ñимволами до некоÑоÑой ÑикÑиÑованной ÑиÑинÑ. Ð ÑлÑÑае Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ Ñакой пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð½ÐµÐ¾Ð±Ñ
одимо обÑабоÑаÑÑ Ñайл CSV и ÑдалиÑÑ Ð¸Ð· него замÑкаÑÑие пÑобелÑнÑе ÑимволÑ, пÑежде Ñем загÑÑжаÑÑ Ð´Ð°Ð½Ð½Ñе из него в Postgres Pro.
ÐÑимеÑание
ÐбÑабоÑÑик ÑоÑмаÑа CSV воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¸ генеÑиÑÑÐµÑ ÑÐ°Ð¹Ð»Ñ CSV Ñо знаÑениÑми в кавÑÑÐºÐ°Ñ , коÑоÑÑе могÑÑ ÑодеÑжаÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð²Ð¾Ð·Ð²ÑаÑа каÑеÑки и пеÑевода ÑÑÑоки. Таким обÑазом, ÑиÑло ÑÑÑок в ÑÑÐ¸Ñ ÑÐ°Ð¹Ð»Ð°Ñ Ð½Ðµ ÑÑÑого Ñавно ÑиÑÐ»Ñ ÑÑÑок в ÑаблиÑе, как в ÑÐ°Ð¹Ð»Ð°Ñ ÑекÑÑового ÑоÑмаÑа.
ÐÑимеÑание
Ðногие пÑогÑÐ°Ð¼Ð¼Ñ Ð³ÐµÐ½ÐµÑиÑÑÑÑ ÑÑÑаннÑе и иногда непÑиемлемÑе ÑÐ°Ð¹Ð»Ñ CSV, Ñак ÑÑо ÑÑÐ¾Ñ ÑоÑÐ¼Ð°Ñ Ð¸ÑполÑзÑеÑÑÑ ÑкоÑее по ÑоглаÑениÑ, Ñем по ÑÑандаÑÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¼ могÑÑ Ð²ÑÑÑеÑиÑÑÑÑ ÑайлÑ, коÑоÑÑе невозможно импоÑÑиÑоваÑÑ, иÑполÑзÑÑ ÑÑÐ¾Ñ Ð¼ÐµÑ
анизм, а COPY Ð¼Ð¾Ð¶ÐµÑ ÑÑоÑмиÑоваÑÑ Ñакие ÑайлÑ, ÑÑо иÑ
не ÑмогÑÑ Ð¾Ð±ÑабоÑаÑÑ Ð´ÑÑгие пÑогÑаммÑ.
ÐвоиÑнÑй ÑоÑмаÑ
ÐÑи вÑбоÑе ÑоÑмаÑа binary вÑе даннÑе ÑоÑ
ÑанÑÑÑÑÑ/ÑÑиÑÑваÑÑÑÑ Ð² двоиÑном, а не ÑекÑÑовом виде. Ðногда ÑÑÐ¾Ñ ÑоÑÐ¼Ð°Ñ Ð¾Ð±ÑабаÑÑваеÑÑÑ Ð±ÑÑÑÑее, Ñем ÑекÑÑовÑй и CSV, но он Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð½ÐµÐ¿ÐµÑеноÑимÑм Ð¼ÐµÐ¶Ð´Ñ ÑазнÑми маÑиннÑми аÑÑ
иÑекÑÑÑами и веÑÑиÑми Postgres Pro. ÐÑоме Ñого, двоиÑнÑй ÑоÑÐ¼Ð°Ñ ÑилÑно завиÑÐ¸Ñ Ð¾Ñ Ñипов даннÑÑ
; напÑимеÑ, он не позволÑÐµÑ Ð²ÑвеÑÑи даннÑе из ÑÑолбÑа 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 в Postgres Pro болÑÑе не поддеÑживаÑÑÑÑ, но ÑÑÐ¾Ñ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑÐ¾Ñ Ð²ÑÑ ÐµÑÑ ÑÐ¾Ñ ÑанÑеÑÑÑ.
- Ðлина облаÑÑи ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ°
Целое 32-биÑное ÑиÑло, опÑеделÑÑÑее Ð´Ð»Ð¸Ð½Ñ Ð² байÑÐ°Ñ Ð¾ÑÑалÑного заголовка, не вклÑÑÐ°Ñ Ñамо ÑÑо знаÑение. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑодеÑÐ¶Ð¸Ñ 0, и ÑÑÐ°Ð·Ñ Ð·Ð° ним ÑледÑÐµÑ Ð¿ÐµÑÐ²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ. ÐÑи бÑдÑÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸ÑÑ ÑоÑмаÑа в заголовок могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе даннÑе. ÐбÑабоÑÑик должен пÑоÑÑо пÑопÑÑкаÑÑ Ð²Ñе ÑаÑÑиÑеннÑе даннÑе заголовка, о коÑоÑÑÑ ÐµÐ¼Ñ Ð½Ð¸Ñего не извеÑÑно.
ÐблаÑÑÑ ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° пÑедÑÑмоÑÑена Ð´Ð»Ñ ÑазмеÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑи ÑамоопÑеделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð². Ðоле Ñлагов не должно ÑодеÑжаÑÑ Ñказаний о Ñом, ÑÑо ÑодеÑжиÑÑÑ Ð² облаÑÑи ÑаÑÑиÑениÑ. ТоÑное ÑодеÑжимое облаÑÑи ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð¿Ñеделено в бÑдÑÑÐ¸Ñ Ð²ÐµÑÑиÑÑ .
ÐÑи Ñаком Ð¿Ð¾Ð´Ñ Ð¾Ð´Ðµ возможно как обÑаÑно-ÑовмеÑÑимое дополнение заголовка (добавиÑÑ Ð±Ð»Ð¾ÐºÐ¸ ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° или ÑÑÑановиÑÑ Ð¼Ð»Ð°Ð´Ñие биÑÑ Ñлагов), Ñак и не обÑаÑно-ÑовмеÑÑимое (ÑÑÑановиÑÑ ÑÑаÑÑие биÑÑ Ñлагов, ÑигнализиÑÑÑÑие о подобном изменении, и добавиÑÑ Ð²ÑпомогаÑелÑнÑе даннÑе в облаÑÑÑ ÑаÑÑиÑениÑ, еÑли ÑÑо поÑÑебÑеÑÑÑ).
ÐапиÑи
ÐÐ°Ð¶Ð´Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð½Ð°ÑинаеÑÑÑ Ñ 16-биÑного Ñелого ÑиÑла, опÑеделÑÑÑего колиÑеÑÑво полей в запиÑи. (РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð²Ð¾ вÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ðµ ÑиÑло полей, но Ñак Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ вÑегда.) ÐаÑем, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ Ð² запиÑи ÑказÑваеÑÑÑ 32-биÑÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° полÑ, за коÑоÑой ÑледÑÐµÑ ÑÑо колиÑеÑÑво Ð±Ð°Ð¹Ñ Ñ Ð´Ð°Ð½Ð½Ñми полÑ. (ÐнаÑение Ð´Ð»Ð¸Ð½Ñ Ð½Ðµ вклÑÑÐ°ÐµÑ Ñвой ÑазмеÑ, и Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñавно нÑлÑ.) РкаÑеÑÑве оÑобого ваÑианÑа, -1 обознаÑаеÑ, ÑÑо в поле ÑодеÑжиÑÑÑ NULL. Ð ÑлÑÑае Ñ NULL за длиной не ÑледÑÑÑ Ð±Ð°Ð¹ÑÑ Ð´Ð°Ð½Ð½ÑÑ .
ÐÑÑавнивание или какие-либо дополниÑелÑнÑе даннÑе Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾Ð»Ñми не вÑÑавлÑÑÑÑÑ.
РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿ÑедполагаеÑÑÑ, ÑÑо вÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² Ñайле двоиÑного ÑоÑмаÑа ÑодеÑжаÑÑÑ Ð² двоиÑном ÑоÑмаÑе (ÑоÑмаÑе под кодом 1). Ðозможно, в бÑдÑÑем ÑаÑÑиÑении в заголовок бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ поле, позволÑÑÑее задаваÑÑ Ð´ÑÑгие ÐºÐ¾Ð´Ñ ÑоÑмаÑов Ð´Ð»Ñ ÑазнÑÑ ÑÑолбÑов.
ÐÑли в Ñайл вклÑÑаеÑÑÑ OID, поле OID ÑледÑÐµÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ за ÑиÑлом, опÑеделÑÑÑим колиÑеÑÑво полей. ÐÑо поле не оÑлиÑаеÑÑÑ Ð¾Ñ Ð´ÑÑÐ³Ð¸Ñ Ð½Ð¸Ñем, кÑоме Ñого, ÑÑо оно не ÑÑиÑÑваеÑÑÑ Ð² колиÑеÑÑве полей. ÐамеÑÑÑе, ÑÑо в ÑекÑÑÐ¸Ñ Ð²ÐµÑÑиÑÑ Postgres Pro ÑиÑÑемнÑе ÑÑолбÑÑ 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' ]