COPY
Ðазвание
COPY -- копиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе Ð¼ÐµÐ¶Ð´Ñ Ñайлом и ÑаблиÑейСинÑакÑиÑ
COPY table_name [ ( имÑ_колонки [, ...] ) ]
FROM { 'имÑ_Ñайла' | PROGRAM 'команда' | STDIN }
[ [ WITH ] ( паÑамеÑÑ [, ...] ) ]
COPY { table_name [ ( имÑ_колонки [, ...] ) ] | ( запÑÐ¾Ñ ) }
TO { 'имÑ_Ñайла' | PROGRAM 'команда' | STDOUT }
[ [ WITH ] ( паÑамеÑÑ [, ...] ) ]
ÐдеÑÑ Ð´Ð¾Ð¿ÑÑкаеÑÑÑ Ð¿Ð°ÑамеÑÑ:
FORMAT имÑ_ÑоÑмаÑа
OIDS [ boolean ]
FREEZE [ boolean ]
DELIMITER 'Ñимвол_ÑазделиÑелÑ'
NULL 'маÑкеÑ_NULL'
HEADER [ boolean ]
QUOTE 'Ñимвол_кавÑÑек'
ESCAPE 'Ñимвол_ÑкÑаниÑованиÑ'
FORCE_QUOTE { ( имÑ_колонки [, ...] ) | * }
FORCE_NOT_NULL ( имÑ_колонки [, ...] )
FORCE_NULL ( имÑ_колонки [, ...] )
ENCODING 'имÑ_кодиÑовки'ÐпиÑание
COPY пеÑемеÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе Ð¼ÐµÐ¶Ð´Ñ ÑаблиÑами PostgreSQL и ÑÑадиÑионнÑми Ñайлами. COPY TO копиÑÑÐµÑ ÑодеÑжимое ÑаблиÑÑ Ð² Ñайл, а COPY FROM â из Ñайла в ÑаблиÑÑ (добавлÑÐµÑ Ð´Ð°Ð½Ð½Ñе к Ñем, ÑÑо Ñже ÑодеÑжалиÑÑ Ð² ÑаблиÑе). COPY TO Ð¼Ð¾Ð¶ÐµÑ Ñакже ÑкопиÑоваÑÑ ÑезÑлÑÑаÑÑ Ð·Ð°Ð¿ÑоÑа SELECT.
ÐÑли ÑказÑваеÑÑÑ ÑпиÑок колонок, COPY ÑкопиÑÑÐµÑ Ð² или из Ñайла ÑолÑко даннÑе ÑказаннÑÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº. ÐÑли в ÑаблиÑе еÑÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸, оÑÑÑÑÑÑвÑÑÑие в ÑÑом ÑпиÑке, COPY FROM Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ ÑÑи колонки знаÑениÑми по ÑмолÑаниÑ.
COPY Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ñайла ÑказÑÐ²Ð°ÐµÑ ÑеÑвеÑÑ PostgreSQL ÑиÑаÑÑ Ð¸Ð»Ð¸ запиÑÑваÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑÑÐ¾Ñ Ñайл. ÐаданнÑй Ñайл должен бÑÑÑ Ð´Ð¾ÑÑÑпен полÑзоваÑÐµÐ»Ñ PostgreSQL (ÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ коÑоÑого ÑабоÑÐ°ÐµÑ ÑеÑвеÑ) и ÑÑо Ð¸Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ Ð¾Ð¿Ñеделено Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ ÑеÑвеÑа. Ðогда ÑказÑваеÑÑÑ Ð¿Ð°ÑамеÑÑ PROGRAM, ÑеÑÐ²ÐµÑ Ð²ÑполнÑÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½ÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸ ÑиÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе из ÑÑандаÑÑного вÑвода пÑогÑаммÑ, либо запиÑÑÐ²Ð°ÐµÑ Ð¸Ñ Ð² ÑÑандаÑÑнÑй ввод. Ðоманда должна опÑеделÑÑÑÑÑ Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ ÑеÑвеÑа и бÑÑÑ Ð´Ð¾ÑÑÑпной Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ PostgreSQL. Ðогда ÑказÑваеÑÑÑ STDIN или STDOUT, даннÑе пеÑедаÑÑÑÑ ÑеÑез Ñоединение клиенÑа Ñ ÑеÑвеÑом.
ÐаÑамеÑÑÑ
- table_name
ÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) ÑÑÑеÑÑвÑÑÑей ÑаблиÑÑ.
- имÑ_колонки
ÐеобÑзаÑелÑнÑй ÑпиÑок колонок, даннÑе коÑоÑÑÑ Ð±ÑдÑÑ ÐºÐ¾Ð¿Ð¸ÑоваÑÑÑÑ. ÐÑли ÑÑÐ¾Ñ ÑпиÑок оÑÑÑÑÑÑвÑеÑ, копиÑÑÑÑÑÑ Ð²Ñе колонки ÑаблиÑÑ.
- запÑоÑ
Ðоманда SELECT или VALUES, ÑезÑлÑÑаÑÑ ÐºÐ¾ÑоÑой бÑдÑÑ ÑкопиÑованÑ. ÐамеÑÑÑе, ÑÑо запÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ заклÑÑаÑÑÑÑ Ð² Ñкобки.
- имÑ_Ñайла
ÐÑÑÑ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ или вÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñайла. ÐÑÑÑ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñайла Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð°Ð±ÑолÑÑнÑм или оÑноÑиÑелÑнÑм, но пÑÑÑ Ð²ÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ должен бÑÑÑ ÑолÑко абÑолÑÑнÑм. ÐолÑзоваÑелÑм 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.
- OIDS
ÐопиÑÑÐµÑ OID каждой ÑÑÑоки. (ÐÑли пÑиÑÑÑÑÑвÑÐµÑ Ñказание OIDS, но ÑаблиÑа не ÑодеÑÐ¶Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ oid, либо копиÑÑеÑÑÑ Ð·Ð°Ð¿ÑоÑ, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ð¾Ñибка.)
- FREEZE
ÐапÑоÑÑ ÐºÐ¾Ð¿Ð¸ÑÑÑÑ Ð´Ð°Ð½Ð½Ñе Ñ Ñже замоÑоженнÑми ÑÑÑоками, как поÑле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM 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
УказÑваеÑ, ÑÑо Ñайл Ð¸Ð¼ÐµÐµÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ Ð¸Ð¼Ñ_кодиÑовки. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑÑен, вÑбиÑаеÑÑÑ ÑекÑÑÐ°Ñ ÐºÐ¾Ð´Ð¸Ñовка клиенÑа. ÐодÑобнее об ÑÑом говоÑиÑÑÑ Ð½Ð¸Ð¶Ðµ, в пÑимеÑаниÑÑ .
ÐÑÐ²Ð¾Ð´Ð¸Ð¼Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
Ð ÑлÑÑае ÑÑпеÑного завеÑÑениÑ, COPY возвÑаÑÐ°ÐµÑ Ð¼ÐµÑÐºÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² виде
COPY ÑиÑло
ÐдеÑÑ ÑиÑло â колиÑеÑÑво ÑкопиÑованнÑÑ Ð·Ð°Ð¿Ð¸Ñей.
ÐамеÑание: psql вÑÐ²Ð¾Ð´Ð¸Ñ ÑÑÑ Ð¼ÐµÑкÑ, ÑолÑко еÑли вÑполнÑлаÑÑ Ð½Ðµ команда COPY ... TO STDOUT или ÐµÑ Ð°Ð½Ð°Ð»Ð¾Ð³ в psql, меÑакоманда \copy ... to stdout. ÐÑо Ñделано Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¼ÐµÑка ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ðµ ÑмеÑалаÑÑ Ñ Ð´Ð°Ð½Ð½Ñми, вÑведеннÑми пеÑед ней.
ÐамеÑаниÑ
COPY Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко Ñ Ð¾Ð±ÑÑнÑми ÑаблиÑами, но не Ñ Ð¿ÑедÑÑавлениÑми. Ðднако, пÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи можно ÑкопиÑоваÑÑ Ð¿ÑедÑÑавление Ñак: COPY (SELECT * FROM имÑ_пÑедÑÑавлениÑ) TO ....
COPY обÑабаÑÑÐ²Ð°ÐµÑ ÑолÑко Ñвно заданнÑÑ ÑаблиÑÑ, доÑеÑние ÑаблиÑÑ Ð¿Ñи копиÑовании даннÑÑ Ð½Ðµ заÑÑагиваÑÑÑÑ. ÐоÑÑомÑ, напÑÐ¸Ð¼ÐµÑ COPY ÑаблиÑа TO вÑÐ²Ð¾Ð´Ð¸Ñ Ñе же даннÑе, ÑÑо и запÑÐ¾Ñ SELECT * FROM ONLY table. ÐÐ»Ñ Ð²ÑгÑÑзки вÑÐµÑ Ð´Ð°Ð½Ð½ÑÑ Ð² иеÑаÑÑ Ð¸Ð¸ наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑимениÑÑ COPY (SELECT * FROM table) TO ....
Ð ÑаблиÑе, даннÑе коÑоÑой ÑиÑÐ°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° COPY TO, ÑÑебÑеÑÑÑ Ð¸Ð¼ÐµÑÑ Ð¿Ñаво на вÑбоÑÐºÑ Ð´Ð°Ð½Ð½ÑÑ , а в ÑаблиÑе, кÑда вÑÑавлÑÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ COPY FROM, ÑÑебÑеÑÑÑ Ð¿Ñаво на добавление. ÐÑи ÑÑом, еÑли в команде пеÑеÑиÑлÑÑÑÑÑ Ð¸Ð·Ð±ÑаннÑе колонки, доÑÑаÑоÑно имеÑÑ Ð¿Ñава ÑолÑко Ð´Ð»Ñ Ð½Ð¸Ñ .
ФайлÑ, ÑказаннÑе в команде COPY, ÑиÑаÑÑÑÑ Ð¸Ð»Ð¸ запиÑÑваÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑеÑвеÑом, не клиенÑÑким пÑиложением. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑаÑполагаÑÑÑÑ Ð½Ð° ÑеÑвеÑе или бÑÑÑ Ð´Ð¾ÑÑÑпнÑми ÑеÑвеÑÑ, а не клиенÑÑ. Ðни Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð½Ð° ÑÑение или запиÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ PostgreSQL (полÑзоваÑелÑ, Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ коÑоÑого ÑабоÑÐ°ÐµÑ ÑеÑвеÑ), не клиенÑÑ. ÐналогиÑно, команда, ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿Ð°ÑамеÑÑом PROGRAM, вÑполнÑеÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑеÑвеÑом, а не клиенÑÑким пÑиложением, и должна бÑÑÑ Ð´Ð¾ÑÑÑпна на вÑполнение полÑзоваÑÐµÐ»Ñ PostgreSQL. ÐÑполнÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ COPY Ñ Ñайлом (или командой) ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , Ñак как она позволÑÐµÑ Ð¿ÑоÑиÑаÑÑ Ð¸ запиÑаÑÑ Ð»Ñбой Ñайл, к коÑоÑÐ¾Ð¼Ñ Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑп ÑеÑвеÑ.
Ðе пÑÑайÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ COPY Ñ Ñеализованной в psql меÑакомандой \copy. ÐеÑакоманда \copy вÑзÑÐ²Ð°ÐµÑ COPY FROM STDIN или COPY TO STDOUT, а заÑем ÑабоÑÐ°ÐµÑ Ñ Ð´Ð°Ð½Ð½Ñми в Ñайле, доÑÑÑпном клиенÑÑ psql. Таким обÑазом, когда пÑименÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° \copy, доÑÑÑпноÑÑÑ Ñайла и пÑава доÑÑÑпа завиÑÑÑ Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñа, а не Ð¾Ñ ÑеÑвеÑа.
ÐÑÑÑ Ñайла, ÑказÑваемÑй в COPY, ÑекомендÑеÑÑÑ Ð²Ñегда задаваÑÑ ÐºÐ°Ðº абÑолÑÑнÑй, а не оÑноÑиÑелÑнÑй. ÐÑо обÑзаÑелÑное ÑÑловие Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ COPY TO, но COPY FROM позволÑÐµÑ Ð¿ÑоÑиÑаÑÑ Ñайл, заданнÑй и оÑноÑиÑелÑнÑм пÑÑÑм. Такой пÑÑÑ Ð±ÑÐ´ÐµÑ Ð¸Ð½ÑеÑпÑеÑиÑоваÑÑÑÑ Ð¾ÑноÑиÑелÑно ÑабоÑего каÑалога ÑеÑвеÑного пÑоÑеÑÑа (обÑÑно ÑÑо каÑалог даннÑÑ ÐºÐ»Ð°ÑÑеÑа), а не ÑабоÑего каÑалога клиенÑа.
ÐÑполнение ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² PROGRAM Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð³ÑаниÑено и дÑÑгими ÑабоÑаÑÑими в ÐС Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð°Ð¼Ð¸ конÑÑÐ¾Ð»Ñ Ð´Ð¾ÑÑÑпа, напÑÐ¸Ð¼ÐµÑ SELinux.
COPY FROM вÑзÑÐ²Ð°ÐµÑ Ð²Ñе ÑÑиггеÑÑ Ð¸ обÑабаÑÑÐ²Ð°ÐµÑ Ð²Ñе огÑаниÑениÑ-пÑовеÑки в Ñелевой ÑаблиÑе. Ðднако пÑавила пÑи загÑÑзке даннÑÑ Ð½Ðµ вÑзÑваÑÑÑÑ.
ÐÑи вводе и вÑводе даннÑÑ COPY ÑÑиÑÑваеÑÑÑ DateStyle. ÐÐ»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеноÑимоÑÑи на дÑÑгие инÑÑаллÑÑии PostgreSQL, в коÑоÑÑÑ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð½ÐµÑÑандаÑÑнÑе знаÑÐµÐ½Ð¸Ñ 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-знаÑÐµÐ½Ð¸Ñ Ð±ÐµÐ· кавÑÑек â в пÑÑÑÑе ÑÑÑоки.
ФоÑмаÑÑ Ñайлов
ТекÑÑовÑй ÑоÑмаÑ
Ðогда пÑименÑеÑÑÑ ÑоÑÐ¼Ð°Ñ text, ÑиÑаемÑе или запиÑÑваемÑе даннÑе пÑедÑÑавлÑÑÑ Ñобой ÑекÑÑовÑй Ñайл, ÑÑÑока в коÑоÑом ÑооÑвеÑÑÑвÑÐµÑ ÑÑÑоке ÑаблиÑÑ. Ðолонки в ÑÑÑоке ÑазделÑÑÑÑÑ Ñимволом-ÑазделиÑелем. ÐнаÑÐµÐ½Ð¸Ñ ÑÐ°Ð¼Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº â ÑÑÑоки, вÑдаваемÑе ÑÑнкÑией вÑвода, либо воÑпÑинимаемÑе ÑÑнкÑией ввода, ÑооÑвеÑÑÑвÑÑÑей ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸. ÐаданнÑй маÑÐºÐµÑ NULL вÑводиÑÑÑ Ð¸ ÑÑиÑÑваеÑÑÑ Ð²Ð¼ÐµÑÑо колонок Ñо знаÑением NULL. COPY FROM вÑдаÑÑ Ð¾ÑибкÑ, еÑли в лÑбой из ÑÑÑок во Ð²Ñ Ð¾Ð´Ð½Ð¾Ð¼ Ñайле оказÑваеÑÑÑ Ð±Ð¾Ð»ÑÑе или менÑÑе колонок, Ñем ожидаеÑÑÑ. С Ñказанием OIDS знаÑение OID ÑÑиÑÑваеÑÑÑ Ð¸Ð»Ð¸ запиÑÑваеÑÑÑ Ð² пеÑвой колонке, пÑедÑеÑÑвÑÑÑей колонкам Ñ Ð¾ÑновнÑми даннÑми.
ÐÐ¾Ð½ÐµÑ Ð´Ð°Ð½Ð½ÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑаÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑокой, ÑодеÑжаÑей ÑолÑко обÑаÑнÑÑ ÐºÐ¾ÑÑÑ Ð¸ ÑоÑÐºÑ (\.). ÐаÑÐºÐµÑ ÐºÐ¾Ð½Ñа даннÑÑ Ð½Ðµ ÑÑебÑеÑÑÑ Ð¿Ñи ÑÑении из Ñайла, Ñак как его ÑÐ¾Ð»Ñ Ð²Ð¿Ð¾Ð»Ð½Ðµ вÑполнÑÐµÑ ÐºÐ¾Ð½ÐµÑ Ñайла; он Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ ÑолÑко пÑи пеÑедаÑе даннÑÑ Ð²/из клиенÑÑкого пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ пÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð¾Ð±Ð¼ÐµÐ½Ð° до веÑÑии 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 ÑеÑÑнадÑаÑеÑиÑнÑми ÑиÑÑами пÑедÑÑавлÑÐµÑ Ñимвол Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм ÑиÑловÑм кодом |
ÐÑбой дÑÑгой Ñимвол поÑле обÑаÑной коÑой, оÑÑÑÑÑÑвÑÑÑий в пÑиведÑнной вÑÑе ÑаблиÑе, бÑÐ´ÐµÑ Ð¿ÑедÑÑавлÑÑÑ ÑебÑ. Ðднако опаÑайÑеÑÑ Ð¸Ð·Ð»Ð¸Ñнего Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑнÑÑ ÐºÐ¾ÑÑÑ , Ñак как ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к ÑлÑÑÐ°Ð¹Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑÑоки, обознаÑаÑÑей маÑÐºÐµÑ ÐºÐ¾Ð½Ñа даннÑÑ (\.) или маÑÐºÐµÑ 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 вÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑвлÑÑÑÑÑ Ð·Ð½Ð°ÑимÑми. ÐаклÑÑÑнное в кавÑÑки знаÑение, дополненное пÑобелами или лÑбÑми дÑÑгими Ñимволами, кÑоме 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 â неÑ
- Ðлина облаÑÑи ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ°
Целое 32-биÑное ÑиÑло, опÑеделÑÑÑее Ð´Ð»Ð¸Ð½Ñ Ð² байÑÐ°Ñ Ð¾ÑÑалÑного заголовка, не вклÑÑÐ°Ñ Ñамо ÑÑо знаÑение. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑодеÑÐ¶Ð¸Ñ 0, и ÑÑÐ°Ð·Ñ Ð·Ð° ним ÑледÑÐµÑ Ð¿ÐµÑÐ²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ. ÐÑи бÑдÑÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸ÑÑ ÑоÑмаÑа в заголовок могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе даннÑе. ÐбÑабоÑÑик должен пÑоÑÑо пÑопÑÑкаÑÑ Ð²Ñе ÑаÑÑиÑеннÑе даннÑе заголовка, о коÑоÑÑÑ ÐµÐ¼Ñ Ð½Ð¸Ñего не извеÑÑно.
ÐблаÑÑÑ ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° пÑедÑÑмоÑÑена Ð´Ð»Ñ ÑазмеÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑи ÑамоопÑеделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð². Ðоле Ñлагов не должно ÑодеÑжаÑÑ Ñказаний о Ñом, ÑÑо ÑодеÑжиÑÑÑ Ð² облаÑÑи ÑаÑÑиÑениÑ. ТоÑное ÑодеÑжимое облаÑÑи ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð¿Ñеделено в бÑдÑÑÐ¸Ñ Ð²ÐµÑÑиÑÑ .
ÐÑи Ñаком Ð¿Ð¾Ð´Ñ Ð¾Ð´Ðµ возможно как обÑаÑно-ÑовмеÑÑимое дополнение заголовка (добавиÑÑ Ð±Ð»Ð¾ÐºÐ¸ ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° или ÑÑÑановиÑÑ Ð¼Ð»Ð°Ð´Ñие биÑÑ Ñлагов), Ñак и не обÑаÑно-ÑовмеÑÑимое (ÑÑÑановиÑÑ ÑÑаÑÑие биÑÑ Ñлагов, ÑигнализиÑÑÑÑие о подобном изменении, и добавиÑÑ Ð²ÑпомогаÑелÑнÑе даннÑе в облаÑÑÑ ÑаÑÑиÑениÑ, еÑли ÑÑо поÑÑебÑеÑÑÑ).
ÐапиÑи
ÐÐ°Ð¶Ð´Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð½Ð°ÑинаеÑÑÑ Ñ 16-биÑного Ñелого ÑиÑла, опÑеделÑÑÑего колиÑеÑÑво полей в запиÑи. (РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð²Ð¾ вÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ðµ ÑиÑло запиÑей, но Ñак Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ вÑегда.) ÐаÑем, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ Ð² запиÑи ÑказÑваеÑÑÑ 32-биÑÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° полÑ, за коÑоÑой ÑледÑÐµÑ ÑÑо колиÑеÑÑво Ð±Ð°Ð¹Ñ Ñ Ð´Ð°Ð½Ð½Ñми полÑ. (ÐнаÑение Ð´Ð»Ð¸Ð½Ñ Ð½Ðµ вклÑÑÐ°ÐµÑ Ñвой ÑазмеÑ, и Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñавно нÑлÑ.) РкаÑеÑÑве оÑобого ваÑианÑа, -1 обознаÑаеÑ, ÑÑо в поле ÑодеÑжиÑÑÑ NULL. Ð ÑлÑÑае Ñ NULL за длиной не ÑледÑÑÑ Ð±Ð°Ð¹ÑÑ Ð´Ð°Ð½Ð½ÑÑ .
ÐÑÑавнивание или какие-либо дополниÑелÑнÑе даннÑе Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾Ð»Ñми не вÑÑавлÑÑÑÑÑ.
РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿ÑедполагаеÑÑÑ, ÑÑо вÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² Ñайле двоиÑного ÑоÑмаÑа ÑодеÑжаÑÑÑ Ð² двоиÑном ÑоÑмаÑе (ÑоÑмаÑе под кодом 1). Ðозможно, в бÑдÑÑем ÑаÑÑиÑении в заголовок бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ поле, позволÑÑÑее задаваÑÑ Ð´ÑÑгие ÐºÐ¾Ð´Ñ ÑоÑмаÑов Ð´Ð»Ñ ÑазнÑÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº.
ЧÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ Ð¿Ð¾Ð´Ñ
одÑÑий двоиÑнÑй ÑоÑÐ¼Ð°Ñ Ð´Ð»Ñ ÑакÑиÑеÑкиÑ
даннÑÑ
, обÑаÑиÑеÑÑ Ðº иÑÑ
Ð¾Ð´Ð½Ð¾Ð¼Ñ ÐºÐ¾Ð´Ñ PostgreSQL, в ÑаÑÑноÑÑи, к ÑÑнкÑиÑм *send и *recv Ð´Ð»Ñ Ñипов даннÑÑ
каждой колонки (обÑÑно ÑÑи ÑÑнкÑии наÑ
одÑÑÑÑ Ð² каÑалоге src/backend/utils/adt/ в деÑеве иÑÑ
одного кода).
ÐÑли в Ñайл вклÑÑаеÑÑÑ OID, поле OID ÑледÑÐµÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ за ÑиÑлом, опÑеделÑÑÑим колиÑеÑÑво полей. ÐÑо поле не оÑлиÑаеÑÑÑ Ð¾Ñ Ð´ÑÑÐ³Ð¸Ñ Ð½Ð¸Ñем, кÑоме Ñого, ÑÑо оно не ÑÑиÑÑваеÑÑÑ Ð² колиÑеÑÑве полей. Ð ÑаÑÑноÑÑи, Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ Ñакже задаÑÑÑÑ Ð´Ð»Ð¸Ð½Ð° — ÑÑо позволÑÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ Ð¸ ÑеÑÑÑÑÑ - и воÑÑмибайÑовÑе OID без оÑобÑÑ ÑложноÑÑей, и даже вÑвеÑÑи OID, ÑавнÑй NULL, еÑли Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ð¿Ð¾ÑÑебноÑÑÑ Ð² ÑÑом.
ÐконÑание Ñайла
ÐконÑание Ñайла ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· 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 ]
[ OIDS ]
[ DELIMITER [ AS ] 'ÑазделиÑелÑ' ]
[ NULL [ AS ] 'маÑкеÑ_null' ]
[ CSV [ HEADER ]
[ QUOTE [ AS ] 'кавÑÑки' ]
[ ESCAPE [ AS ] 'ÑпеÑÑимвол' ]
[ FORCE NOT NULL имÑ_колонки [, ...] ] ] ]
COPY { имÑ_ÑаблиÑÑ [ ( имÑ_колонки [, ...] ) ] | ( запÑÐ¾Ñ ) }
TO { 'имÑ_Ñайла' | STDOUT }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'ÑазделиÑелÑ' ]
[ NULL [ AS ] 'маÑкеÑ_null' ]
[ CSV [ HEADER ]
[ QUOTE [ AS ] 'кавÑÑки' ]
[ ESCAPE [ AS ] 'ÑпеÑÑимвол' ]
[ FORCE QUOTE { имÑ_колонки [, ...] | * } ] ] ]ÐамеÑÑÑе, ÑÑо в ÑÑом ÑинÑакÑиÑе клÑÑевÑе Ñлова BINARY и CSV обÑабаÑÑваÑÑÑÑ ÐºÐ°Ðº незавиÑимÑе, а не как аÑгÑменÑÑ Ð¿Ð°ÑамеÑÑа FORMAT.
Ðо веÑÑии PostgreSQL 7.3 иÑполÑзовалÑÑ Ð¸ по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑледÑÑÑий ÑинÑакÑиÑ:
COPY [ BINARY ] table_name [ WITH OIDS ]
FROM { 'имÑ_Ñайла' | STDIN }
[ [USING] DELIMITERS 'ÑазделиÑелÑ' ]
[ WITH NULL AS 'маÑкеÑ_null' ]
COPY [ BINARY ] имÑ_ÑаблиÑÑ [ WITH OIDS ]
TO { 'имÑ_Ñайла' | STDOUT }
[ [USING] DELIMITERS 'ÑазделиÑелÑ' ]
[ WITH NULL AS 'маÑкеÑ_null' ]| ÐÑед. | ÐаÑало | След. |
| COMMIT PREPARED | УÑÐ¾Ð²ÐµÐ½Ñ Ð²ÑÑе | CREATE AGGREGATE |