Provided by:
manpages-tr_1.0.5.1-2_all 
ISIM
COPY - bir tablo ile bir dosya arasinda veri kopyalar
KULLANIM
COPY tablo_ismi [ ( s"utun [, ...] ) ]
FROM { 'dosya_ismi' | STDIN }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'ayra,c' ]
[ NULL [ AS ] 'bo,s_dizge' ]
[ CSV [ QUOTE [ AS ] 'tirnak' ]
[ ESCAPE [ AS ] '"oncelem' ]
[ FORCE NOT NULL s"utun [, ...] ]
COPY tablo_ismi [ ( s"utun [, ...] ) ]
TO { 'dosya_ismi' | STDOUT }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'ayra,c' ]
[ NULL [ AS ] 'bo,s_dizge' ]
[ CSV [ QUOTE [ AS ] 'tirnak' ]
[ ESCAPE [ AS ] '"oncelem' ]
[ FORCE QUOTE s"utun [, ...] ]
A,CIKLAMA
COPY PostgreSQL tablolari ile standart dosya sistemi dosyalari arasinda
veri tasimak icin kullanilir. COPY TO bir tablonun icerigini bir
dosyaya, COPY FROM ise bir dosyadaki veriyi bir tabloya kopyalar
(mevcut bir tabloya veri eklemek seklinde).
Eger bir sutun listesi verilmisse, sadece belirtilen sutunlarin
verileri kopyalamaya konu olur. Eger sutun listesindeki sutunlar,
tablodaki sutunlarin hepsini icermiyorsa, COPY FROM veri saglanmamis
sutunlara ontanimli degerlerini yazar.
Bir dosya ismi ile kullanilan COPY, PostgreSQL sunucusunun okumak ve
yazmak icin dogrudan bir dosyaya erismesini saglar. Dosya sunucu
tarafindan erisilebilir olmali ve dosya ismi sunucuya gore
belirtilmelidir. STDIN veya STDOUT belirtildiginde, veri istemci ile
sunucu arasindaki baglanti uzerinden iletilir.
PARAMETRELER
tablo_ismi
Mevcut bir tablonun ismi (sema nitelemeli olabilir).
s"utun Kopyalanacak sutunlarin istege bagli listesi. Bir sutun listesi
belirtilmemisse, sutunlarin hepsi kullanilir.
dosya_ismi
Girdi veya cikti dosyasinin mutlak dosya yoluyla ismi.
STDIN Girdinin istemci uygulamadan geldigini belirtir.
STDOUT Ciktinin istemci uygulamaya gittigini belirtir.
BINARY Saklanacak ya da okunacak verinin metin biciminde degil, ikilik
bicimde olacagini belirtir. Ikilik kipte DELIMITER, NULL veya
CSV seceneklerini belirtemezsiniz.
OIDS Her satir icin nesne kimliklerinin kopyalanacagini belirtir.
(Eger nesne kimlikleri olmayan bir tablo icin OIDS
belirtilmisse, bir hata olusur.)
ayra,c Dosyanin her satirindaki sutunlari ayiran tek karakter. Metin
kipinde sekme, CSV kipinde virgul ontanimlidir.
bo,s_dizge
Bir bos deger belirten dizge. Metin kipinde \N, CSV kipinde
tirnak icine alinmamis bos dizge ontanimlidir. NULL ile bos
dizge arasinda ayrim yapilmamasini istediginiz yerlerde metin
kipinde bile bos dizge kullanmayi tercih etmelisiniz.
Bilgi: COPY FROM kullanirken, bu dizge ile eslesen her veri
ogesi bir NULL deger olarak saklanacaktir, dolayisiyla
ayni dizgeyi COPY TO icin de kullanmaya dikkat
etmelisiniz.
CSV Virgul Ayracli Deger kipini secer (CSV - Comma Separated Value).
tirnak CSV kipinde kullanilan tirnak karakterini belirtmek icindir.
Cift tirnak (") ontanimlidir.
"oncelem
CSV kipindeki QUOTE veri karakteri (genelde cift tirnaktir) veri
icinde kullanildiginda bu karakteri onceleyen karakter.
FORCE QUOTE
CSV COPY TO kipinde, belirtilen sutunlardaki NULL olmayan
degerler icin tirnak kullanimini zorunlu hale getirir. NULL
degerler asla tirnak icine alinmaz.
FORCE NOT NULL
CSV COPY FROM kipinde, belirtilen her sutunun tirnakli deger
icerdigi, dolayisiyla bir NULL deger icermedigi kabulu ile islem
yapilir. CSV kipindeki ontanimli bos dizge ('') icin, bu secenek
eksik degerlerin sifir uzunluklu dizge olarak ele alinmasina
sebep olur.
EK BILGI
COPY sadece normal tablolarla kullanilabilir, sanal tablolarla
kullanilamaz.
BINARY secenegi, tum verinin metin degil ikilik bicimde
saklanmasina/okunmasina sebep olur. Kismen daha hizli olsa da, ikilik
bicimli dosyalar makine mimarileri ve farkli PostgreSQL surumleri
arasinda daha az tasinabilirdir.
COPY TO tarafindan okunan tablolarda SELECT, COPY FROM ile veri girilen
tablolarda ise INSERT yetkiniz olmalidir.
Bir COPY cumlesindeki isimli dosyalar istemci tarafindan degil, sunucu
tarafindan okunur/yazilir. Bu nedenle, ya sunucu tarafinda olmali ya da
sunucu makinedeki veritabanina erisiminiz olmalidir. Bunlar PostgreSQL
kullanicisi (sunucuyu calistiran kullanici) tarafindan okuma/yazma
anlaminda erisebilir olmalidir, istemcinin degil. Bir dosyaya COPY
isminin verilebilmesi, sunucunun erisebildigi her dosyaya okuma ve
yazma yetkisi oldugundan, sadece veritabani ayricalikli kullanici icin
mumkundur.
COPY sozcugunu psql'in \copy komutuyla karistirmayin. \copy komutu psql
istemcisinin erisebildigi bir dosyanin verisini almak/saklamak icin
COPY FROM STDIN veya COPY TO STDOUT cagrisi yapar. Bu nedenle, \copy
kullanildiginda dosyaya erisilebilirlik ve erisim izinleri bakimindan
sunucu degil istemci etkindir.
COPY ile kullanilacak dosyanin daima mutlak dosya yolu ile belirtilmesi
onerilir. Bu, COPY TO durumunda zorunludur, ama COPY FROM icin bir
dosyayi goreli dosya yolu ile belirtebilirsiniz; goreli dosya yolu,
istemcinin calisma dizinine gore degil, sunucu surecinin calisma
dizinine (veri dizininin altinda bir yer) gore yorumlanacaktir.
COPY FROM hedef tablodaki tetikleri ve sinama kisitlarini da
cagiracaktir. Ancak, kurallar cagrilmayacaktir.
COPY girdi ve ciktisi DateStyle degerinden etkilenecektir. Ontanimli
olmayan DateStyle degerleri kullanabilen diger PostgreSQL kurulumlarina
tasinabilirlik bakimindan, COPY TO kullanmadan once DateStyle degeri
olarak ISO belirtmelisiniz.
COPY, islemi ilk hatada durdurur. Bunun COPY TO icin sorunlara yol
acmamasi gerekir, ama hedef tablo hatadan onceki satirlari almis
olacaktir. Bu satirlar gorunur ve erisilebilir olmayacak ama yine de
diskte yer kapliyor olacaktir. Eger hata cok buyuk bir kopyalama
isleminde gerceklesmisse, bu, diskin onemli bir bolumunun yararsiz
kullanimina yol acacaktir. Yararsiz kisimlardan kurtulmak icin VACUUM
kullanmayi deneyebilirsiniz.
DOSYA BI,CIMLERI
Metin Bi,cimi
COPY cumlesi BINARY veya CSV secenekleri olmaksizin kullanilirken,
verinin okunmasi veya yazilmasinda, bir metin dosyasinin her satirina
bir tablonun bir satiri karsilik getirilir. Bir satirdaki sutunlar
ayrac karakteri ile ayrilirlar. Sutunlarin degerleri ya cikti islevleri
tarafindan uretilmis ya da girdi islevleri tarafindan ozniteliklerinin
veri turunde olduklari kabul edilen dizgelerdir. Belirtilen bos
dizgeler sutunlara NULL degerler olarak yerlestirilir. Eger girdi
dosyasinin bir satiri umulandan daha az ya da daha fazla sutun
iceriyorsa, COPY FROM bir hata olusturacaktir. Eger OIDS belirtilmisse,
nesne kimligi, veri sutunlarindan once, ilk sutun olarak okunur ya da
yazilir.
Verinin sonu sadece bir tersbolu ve nokta (\.) iceren tek bir satirla
ifade edilebilir. Veri dosyadan okunurken veri sonunun imlenmesi, dosya
sonu zaten iyi algilanabildiginden gerekli degildir; sadece 3.0 oncesi
istemci protokolunu kullanan istemci uygulamalari ile veri
kopyalanirken gerekli olur.
Sutun verisi icinde ayrac ve tirnak karakterleri kullanilirken,
bunlarin ayrac ve tirnak karakterleri olarak algilanmamasi icin
tersbolu karakteri (\) bunlari oncelemekte kullanilabilir. Bir sutun
degerinin icinde yer aldiginda bir tersbolu ile oncelenmesi gereken
karakterler sunlardir: tersbolu karakterinin kendisi, satirsonu,
satirbasi karakterleri ile ayrac ve tirnak olarak kullanilan
karakterler.
Belirtilmis bir bos dizge COPY TO tarafindan tersbolu eklenmeden
gonderilir; bunun aksine, COPY FROM girdi olan bos dizgeyi tersboluleri
silmeden once eslestirir. Bu nedenle, \N gibi bir bos dizge aslinda bir
veri degeri olan \N ile karismaz (\\N olarak ifade edildiginden).
COPY FROM tarafindan taninan tersbolu oncelemeli dizgeler:
Dizge Anlami
-------- ---------------------------------------
\b Terbolu (ASCII 8)
\f Sayfa ileri (ASCII 12)
\n Satirsonu (ASCII 10)
\r Satirbasi (ASCII 13)
\t Sekme (ASCII 9)
\v Dusey sekme (ASCII 11)
\rakamlar tersboluden sonra gelen sekizlik tabandaki uc rakam
bir karakterin sayisal degerini belirtir
Su an, COPY TO tersbolu karakterini izleyen sekizlik rakamlar
ciktilamayacak, ama yukarida listelenmis diger dizgeleri kullanacaktir.
Yukaridaki listede belirtilmemis ama terbolu oncelemeli olarak
belirtilmis baska karakterler de olabilir, bu karakterler kendileri
olarak degerlendirilecektir. Yine de tersbolulerin gereksiz yere
kullanilmasindan kacinilmalidir, cunku istemeden veri sonunu imleyen \.
ile bos dizgeyi imleyen \N dizgeleri uretilebilir. Bu dizgeler, bir
tersbolu islemi yapilmadan once algilanmaya calisilacaktir.
COPY icin veri ureten uygulamalarin veri icindeki satirsonu ve
satirbasi karakterlerini mutlaka \n ve \r dizgelerine donusturerek
dondurmeleri onerilir. Simdilik bu karakterler bu dizgelerle
gosterilebiliyor olsa da ileride bu gosterimler kabul edilmeyebilir.
Ayrica bu karakterler, bilhassa dosyanin farkli makineler arasinda
aktarilmasi sirasinda (ornegin, Unix ile Windows) bozulmalara yol
acabilir.
COPY TO her satiri Unix tarzi satirsonu ("\n") ile sonlandiracaktir.
Microsoft Windows uzerinde calisan sunucular ise bunun yerine
satirbasi/satirsonu ("\r\n") ciktilayacaktir, fakat sadece bir sunucu
dosyasina kopyalama icin; platformlar arasinda tutarliligi saglamak
icin COPY TO STDOUT sunucu platformundan bagimsiz olarak daima "\n"
gonderecektir. COPY FROM satirsonlari ister satirbasi, ister satirsonu,
ister satirbasi/satirsonu ile bitsin, satirlari duzgun olarak elde
edebilir. Veri icinde tersbolu ile oncelenmemis satirsonu ve satirbasi
karakterlerinden dolayi hata olusmasi riskini en aza indirmek icin COPY
FROM satirsonlarinin beklendigi gibi bitmediginden sikayet edecektir.
CSV Bi,cimi
Bu bicim, hesap cizelgesi uygulamalari gibi baska uygulamalarla veri
alisverisi yapmak icin kullanilir. Bu kipte, PostgreSQL'in standart
metin kipi tarafindan kullanilan onceleme mekanizmasi yerine, bilinen
CSV onceleme mekanizmasi kullanilir.
Her kayittaki degerler DELIMITER karakteri ile ayrilir. Eger deger
ayrac karakteri, QUOTE karakteri, NULL dizge, bir satirsonu ya da
satirbasi karakteri iceriyorsa, degerin tamami QUOTE karakterleri ile
sarmalanir ve degerin icindeki QUOTE veya ESCAPE karakteri onceleme
karakteri ile oncelenir. Ayrica, belli sutunlarda NULL olmayan
degerleri ciktilarken mutlaka tirnak kullanilacagini belirtmek icin
FORCE QUOTE kullanabilirsiniz.
CSV biciminde, bir NULL degeri bir bos dizgeden ayirmanin standart bir
yolu yoktur. PostgreSQL'in COPY olusumu bunu tirnaklarla elde eder. Bir
NULL, NULL dizge olarak ciktilanir ve tirnak icine alinmazken, NULL
dizge ile eslesen bir veri degeri tirnak icine alinir. Bu nedenle,
ontanimli ayarlari kullanarak, bir NULL dizge tirnak icine alinmamis
bir bos dizge olarak yazilirken, bir bos dizge tirnaklarin icine
alinarak ("") yazilir. Degerlerin okunmasi da benzer sekilde yapillir.
Belli sutunlar icin NULL dizge karsilastirmasini onlemek icin FORCE NOT
NULL kullanabilirsiniz.
Bilgi: CSV kipi gomulu satirsonu ve satirbasi karakterleri iceren
tirnak icine alinmis degerlerli CSV dosyalarini tanir ve bunlari
uretir. Bu bakimdan bu dosyalarin metin kipindeki gibi her
satiri bir tablo satirina karsilik gelmeyebilir. Eger CSV
dosyasi, kendisinde kullanilan satir sonlandirma uzlasimiyla
uyusmayan, gomulu satir sonlandirma karakterleri iceren alanlar
iceriyorsa, PostgreSQL'in COPY olusumu bu dosyayi girdi olarak
reddedecektir. Bu nedenle, gomulu satir sonlandirma karakterleri
iceren verinin CSV kipinde degil, metin ya da ikilik kipte
alinmasi daha guvenli olur.
Cogu uygulama standarddan cok bir uzlasimin sonucu gibi gorunen
dosya bicimli, tuhaf CSV dosyalar uretir. Bu bakimdan, bu
mekanizmanin bazi dosyalari kabul etmedigini ya da COPY
olusumunun urettigi dosyalarin baska uygulamalar tarafindan
islenemedigini kesfedebilirsiniz.
Ikilik Bi,cim
COPY BINARY icin kullanilan dosya bicimi PostgreSQL 7.4'de degismistir.
Yeni dosya bicimi, bir dosya basligi, sifir ya da daha fazla sayida
satir verisi iceren demet ve bir dosya kuyrugu icerir. Baslik ve veri
simdi ag bayt siralamasindadir.
Dosya ba,sligi
Dosya basligi, degisken uzunluktaki baslik ek veri alani ile biten,
15 baytlik sabit uzunlukta bir alandan olusur. Sabit uzunluklu
alanlar sunlardir:
Imza
11 bayt uzunluktaki PGCOPY\n\377\r\n\0 dizgesi; bu dizgenin
sonundaki bos karakter (\0) imzanin bir parcasi olarak
gereklidir. (Bu imza, temiz 8 bitlik olmayan bir aktarimla
anlasilirligi bozulan dosyalarin kolayca tanimlanabilmesi icin
tasarlanmistir. Bu imza, boyle bir aktarimda, satirsonu donusum
suzgecleri, bos karakterlerin kaldirilmasi, eslik
degisiklikleri ya da yuksek bitlerin kaldirilmasiyla
degistirilecektir.)
Secenekler alani
Dosya biciminin onemli niteliklerini aciklayan 32 bitlik
tamsayi bit maskesi. Bitler 0'dan (LSB) 31'e (MSB) kadar
numaralanmistir. Bu alan da, dosya biciminin diger tamsayi
alanlari gibi ag bayt siralamasinda (en kiymetli bayt ilk
bayttir) saklanmistir. 16-31 arasindaki bitler dosya bicimi
bakimindan yasamsal onemdeki nitelikler icin yedek olarak
ayrilmistir; bir okuyucu bu bitlerden beklenmeyen birinin etkin
oldugunu saptarsa, dosyayi reddetmelidir. 0-15 arasindaki
bitler ise dosya biciminin geriye dogru uyumlulugu ile ilgili
alanlar icin ayrilmistir; bir okuyucu bu bitlerden beklenmeyen
birinin etkin oldugunu saptarsa, bunu yoksaymalidir. Simdilik
sadece bir bit tanimlidir, kalan bitler sifir olmalidir:
Bit 16
Bu bit 1 ise, veri, nesne kimliklerini iceriyor, 0 ise
icermiyor demektir.
Baslik ek veri alani uzunlugu
Kendisi haric, basligin kalaninin bayt cinsinden uzunlugunu
veren 32 bitlik bir tamsayi. Simdilik bu alanin degeri sifirdir
ve hemen ardindan ilk demet gelmektedir. Ileride basligin ek
veriler icermesi gerekirse bu degisebilir. Bir okuyucu boyle
bir ek veriye rastlarsa ve onunla ne yapacagini bilmiyorsa,
basitce atlamasi onerilir.
Basligin ek veri alaninin kendinden menkul parcalardan olusacagi
dusunulmustur. Bayraklari iceren alan ise okuyucuya ek veri
alaninda nelerin bulundugunu aciklamak icin tasarlanmamistir.
Basligin ek veri alaninin neleri icerecegi daha sonraki dagitimlara
birakilmistir.
Bu tasarim, hem geriye uyumlu baslik eklemelerine (baslik ek veri
parcalari veya dusuk baytlardaki ek secenek bitleri) hem de geriye
uyumlu olmayan degisikliklere (yuksek baytlardaki secenek bitleri
bu degisiklikleri belirtmek icin kullanilabilecegi gibi gerekirse
destek verisi ek veri alanina eklenebilir) izin verir.
Demetler
Her demet, icindeki alan sayisini belirten 16 bitlik bir tamsayi
ile baslar. (Simdilik, bir tablo ayni sayida alan icereceginden tum
demetlerin ayni sayida alan icerecegi belli ise de bu her zaman
dogru olmayabilir.) Bundan sonra alanlar gelir. Her alan, alan
uzunlugunu belirten 32 bitlik bir tamsayi ile baslar (bu tamsayi,
alan uzunluguna dahil degildir ve sifir da olabilir). Ozel bir
durum olarak -1 degeri bir NULL alan degeri belirtir ve bu alan
sifir uzunluktadir.
Alanlar arasinda adimlama anlaminda herhangi bir ek alan bulunmaz.
Simdilik, bir COPY BINARY dosyasindaki tum veri degerlerinin ikilik
bicimde olacagi kabul edilmektedir. Gelecekte, sutun bicim
kodlarinin belirtilecegi bir baslik alaninin eklenebilecegi
umulmaktadir.
Demet verisinin ikilik bicimini daha iyi anlayabilmek icin
PostgreSQL'in kaynak dosyalarina bakiniz. Her sutunun veri turu
*send ve *recv islevlerinde gorulebilir. Bu islevler genellike
kaynak paketinin src/backend/utils/adt/ dizininde bulunur.
Nesne kimlikleri dosyada bulunuyorsa, OID alani alan sayisini
belirten tamsayidan hemen sonra gelir ve alan sayisina dahil
edilmemesi disinda normal bir alandir. Yani, normal alanlar gibi
uzunlugunu belirten bir tamsayi ile baslar. Boylece 4 baytlik ve 8
baytlik nesne kimliklerinin belirtilebilmesi mumkun olur, hatta
istenirse, nesne kimliklerinin bos olarak gosterilmesini de mumkun
kilar.
Dosya Kuyrugu
Dosya kuyrugu -1 iceren 16 bitlik bir tamsayidan olusur. Bu, bir
demetin alan sayisi degerinden kolayca ayrilir.
Eger alan sayisini belirten tamsayi ne -1 ne de umulan sutun
sayisini iceriyorsa, okuyucunun bir hata raporlamasi gerekir. Bu,
verinin duzgun olarak alinip alinmadigiyla ilgili ek bir sinama da
saglar.
"ORNEKLER
Alan ayraci olarak | kullanarak istemciye bir tablonun kopyalanmasi:
COPY country TO STDOUT WITH DELIMITER '|';
Verinin bir dosyadan country tablosuna kopyalanmasi:
COPY country FROM '/usr1/proj/bray/sql/country_data';
STDIN'den bir tabloya kopyalanmaya uygun veri ornegi:
AF AFGHANISTAN
AL ALBANIA
DZ ALGERIA
ZM ZAMBIA
ZW ZIMBABWE
Burada her satirin icindeki bosluklar aslinda birer sekme karakteridir.
Asagida ayni veri ikilik bicimde ciktilanmistir. Buradaki veri bir Unix
araci olan od -c ile suzuldukten sonra gosterilmistir. Tablo uc alana
sahiptir; ilk alan char(2) turunde, ikinci alan text turunde, ucuncu
alan ise integer turundedir. Tum satirlarin ucuncu sutunlari birer NULL
deger icermektedir.
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
UYUMLULUK
SQL standardinda COPY diye bir deyim yoktur.
Asagidaki sozdizimi PostgreSQL'in 7.3 surumunden once kullanilmaktaydi
ve hala desteklenmektedir:
COPY [ BINARY ] tablo_ismi [ WITH OIDS ]
FROM { 'dosya_ismi' | STDIN }
[ [USING] DELIMITERS 'ayra,c' ]
[ WITH NULL AS 'bo,s_dizge' ]
COPY [ BINARY ] tablo_ismi [ WITH OIDS ]
TO { 'dosya_ismi' | STDOUT }
[ [USING] DELIMITERS 'ayra,c' ]
[ WITH NULL AS 'bo,s_dizge' ]
,CEVIREN
Nilgun Belma Buguner <nilgun (at) belgeler.gen.tr>, Nisan 2005