Provided by: manpages-tr_1.0.5.1-2_all bug

ISIM

       CREATE TYPE - yeni bir veri turu tanimlar

KULLANIM

       CREATE TYPE isim AS
           ( "oznitelik_ismi veri_t"ur"u [, ... ] )

       CREATE TYPE isim (
           INPUT = girdi_i,slevi,
           OUTPUT = ,cikti_i,slevi
           [ , RECEIVE = ali,s_i,slevi ]
           [ , SEND = g"onderim_i,slevi ]
           [ , ANALYZE = analiz_i,slevi ]
           [ , INTERNALLENGTH = { dahili_uzunluk | VARIABLE } ]
           [ , PASSEDBYVALUE ]
           [ , ALIGNMENT = hizalama ]
           [ , STORAGE = strateji ]
           [ , DEFAULT = "ontanimli ]
           [ , ELEMENT = "oge_t"ur"u ]
           [ , DELIMITER = ayra,c ]
       )

A,CIKLAMA

       CREATE  TYPE  o  anki  veritabaninda  kullanmak icin yeni bir veri turu
       tanimlar. Turu tanimlayan kullanici turun sahibi haline gelir.

       Eger bir sema ismi  belirtilmisse,  tur  bu  semada  olusturulur.  Aksi
       takdirde,  tur  o  anki  semada  olusturulur. Tur ismi ayni sema icinde
       mevcut veri turu ve veri alani isimlerinden farkli olmalidir. (Tablolar
       iliskili  veri turlerine sahip oldugundan, tur ismi ayrica, ayni semada
       mevcut tablo isimlerinden de farkli olmalidir.)

   Bile,sik T"urler
       CREATE TYPE'in ilk bicimi bir bilesik veri turu olusturur. Bilesik tur,
       oznitelik  isimleri  ile veri turlerinin bir listesi olarak belirtilir.
       Bu  aslinda  bir  tablonun  satir  turu  ile  aynidir,  fakat  bir  tur
       tanimlanmak  istendiginde  CREATE  TYPE  kullanarak  gercek  bir  tablo
       olusturma ihtiyaci onlenir. Tek basina  bir  bilesik  tur  bir  islevin
       argumani veya donus turu olarak yararlidir.

   Temel T"urler
       CREATE   TYPE'in   ikinci   bicimi   yeni   bir  temel  tur  olusturur.
       Parametrelerin  yukaridaki  sirayla   belirtilmeleri   sart   degildir,
       herhangi  bir  sirayla  belirtilebilirler, ayrica cogu istege baglidir.
       Bir turu tanimlamadan once CREATE FUNCTION  kullanarak  iki  veya  daha
       fazla  islev  tanimlanmis olmalidir. Destek islevleri olan girdi_i,slevi
       ve   ,cikti_i,slevi   zorunludur.   ali,s_i,slevi,    g"onderim_i,slevi    ve
       analiz_i,slevi  ise  istege  baglidir.  Genelde bu islevler C gibi dusuk
       seviyeli bir dille yazilirlar.

       girdi_i,slevi turun harici metin gosterimini,  bu  turu  kullanmak  icin
       tanimlanmis  islec  ve  islevler tarafindan kullanilan dahili gosterime
       cevirir. ,cikti_i,slevi ise bunun tersini yapar. Girdi islevi ya  cstring
       turunde  tek  bir  arguman alacak sekilde ya da cstring, oid ve integer
       turunde uc arguman alacak sekilde bildirilebilir. Ilk  arguman,  bir  C
       dizgesi  olarak  girdi  metnidir. Ikinci arguman, tur bir dizi ise dizi
       elemanlarinin nesne kimligi, bir bilesik  tur  ise  turun  kendi  nesne
       kimligidir.   Ucuncusu   ise,   biliniyorsa,  hedef  sutunun  typmod'u,
       bilinmiyorsa -1'dir. Girdi islevi  yeni  veri  turunde  bir  deger  ile
       donmelidir.  Cikti  islevi  ya yeni veri turunde tek bir arguman alacak
       sekilde  ya  da  ikincisi  oid  turunde  iki  arguman  alacak   sekilde
       bildirilebilir.   Ikinci   arguman   yine,   tur   bir  dizi  ise  dizi
       elemanlarinin nesne kimligi, bir bilesik  tur  ise  turun  kendi  nesne
       kimligidir. Cikti islevi cstring turunde bir deger ile donmelidir.

       Istege  bagli  olan  ali,s_i,slevi turun harici ikilik gosterimini dahili
       gosterime cevirir. Eger bu islev yoksa, tur ikilik ciktida rol  alamaz.
       Ikilik  gosterim  oldukca tasinabilir olmanin yani sira dahil gosterime
       donusumde ucuz olmalidir. (Ornegin, standart  tamsayi  veri  turlerinin
       harici   ikilik   gosterimleri   ag   bayt   siralamasindayken,  dahili
       gosterimleri  makinenin  dogal  bayt  siralamasindadir.)  Alis   islevi
       degerin gecerliliginden emin olmayi saglayacak kadar sinama yapmalidir.
       Alis islevi ya internal turunde tek bir arguman alacak  sekilde  ya  da
       internal  ve  oid  turunde  iki  arguman alacak sekilde bildirilebilir.
       Islev yeni veri turunde bir deger ile donmelidir.  Ilk  arguman  alinan
       bayt  dizgesini  tutacak  bir  StringInfo  tamponuna  bir gostericidir.
       Ikinci arguman, tur bir dizi ise dizi elemanlarinin nesne kimligi,  bir
       bilesik  tur  ise  turun kendi nesne kimligidir. Benzer sekilde, istege
       bagli olan  g"onderim_i,slevi  turun  dahili  gosterimini  harici  ikilik
       gosterime cevirir. Gonderim islevi ya yeni veri turunde tek bir arguman
       alacak sekilde ya da ikincisi oid turunde iki  arguman  alacak  sekilde
       bildirilebilir.   Ikinci   arguman   yine,   tur   bir  dizi  ise  dizi
       elemanlarinin nesne kimligi, bir bilesik  tur  ise  turun  kendi  nesne
       kimligidir. Gonderim islevi bytea turunde bir deger ile donmelidir.

       Girdi  ve  cikti  islevlerinin  yeni tur olusturulmadan once yeni turde
       argumanlar  ve  veri  turleri  ile  bildirimlerinin  nasil   yapilacagi
       noktasinda  dikkatli  olmalisiniz.  Bunun  yaniti, once girdi islevinin
       sonra da cikti islevinin  (ve  isteniyorsa,  ikilik  G/C  islevlerinin)
       olusturulmasi,   son   olarak   veri  turunun  tanimlanmasi  olacaktir.
       PostgreSQL yeni veri turunun ismini ilk defa girdi islevinin donus turu
       olarak  gorecek, sistem katalogunda basitce yer tutucu girdi olarak bir
       kabuk  turu  ayiracak  ve  girdi  islevinin   tanimini   kabuk   turune
       ilintileyecektir. Benzer sekilde diger islevleri de (artik mevcut olan)
       kabuk turune ilintileyecektir. Son olarak, CREATE TYPE,  kabuk  girdisi
       ile tam tur tanimini yer degistirir ve yeni tur kullanilabilir olur.

       Istege bagli olan analiz_i,slevi, veri turundeki sutunlar icin ture ozgu
       istatistikleri  hesaplar.  Ontanimli  olarak,  ANALYZE  eger  tur  icin
       ontanimli  bir  b-tree  islec  sinifi  varsa, turun esittir ve kucuktur
       isleclerini kullanarak istatistikleri toplamaya  calisacaktir.  Bilesik
       turlerde  bu  davranis  elverissiz  olabilir,  bu sorun ozel bir analiz
       islevi belirterek asilabilir. Analiz islevi internal  turunde  tek  bir
       arguman  alacak  sekilde  bildirilmeli  ve  boolean turunde bir sonucla
       donmelidir.   Analiz   islevlerinin    ayrintili    uygulama    arayuzu
       src/include/commands/vacuum.h dosyasinda gorulebilir.

       Yeni  turun  dahili gosteriminin ayrintilari sadece G/C islevleri ve bu
       turle calismak uzere sizin tanimladiginiz  islevlerce  bilinir;  dahili
       gosteriminin   bazi  ozelliklerinin  PostgreSQL'e  ayrica  bildirilmesi
       gerekir. Bunlarin en onemlisi dahili_uzunluk'tur. Temel  veri  turleri,
       dahili_uzunluk  bir pozitif tamsayi olarak verildiginde sabit uzunlukta
       olabilecegi  gibi,  dahili_uzunluk  olarak   VARIABLE   belirtildiginde
       degisken  uzuklukta  da olabilir (bu dahili olarak typlen'e -1 atanarak
       yapilir). Degisken uzunluklu tum veri turleri, turun  degerinin  toplam
       uzunlugunu gosteren 4 baytlik bir tamsayi ile baslamalidir.

       Istege  bagli  olan PASSEDBYVALUE secenegi bu veri turunun gosterilerek
       degil degeri ile aktarilacagini  belirtir.  Dahili  gosterimleri  Datum
       turunun  genisliginden  (cogu  makinede  4,  birkacinda 8 bayttir) daha
       buyuk veri turlerini degeri ile aktaramazsiniz.

       hizalama parametresi ile bellegin ne uzunlukta adimlanarak veri turunun
       yerletirilecegi  belirtilir. Izin verilen adim uzunluklari 1, 2, 4 veya
       8 bayttir. Degisken uzunluklu veri turleri icin, ilk  eleman  bir  int4
       oldugundan en az 4 baytlik adim uzunlugu belirtilmelidir.

       strateji  parametresi  ile  degisken  uzunluklu veri turlerinin saklama
       stratejilerinin secimi mumkun olur. (Sabit  uzunluklu  turlerde  sadece
       plain  mumkundur.)  plain ile degerin daima oldugu gibi sikistirilmadan
       saklanacagi;  extended  ile,  deger  cok  uzunsa  once   sikistirilmaya
       calisilacagi,  yine  de  uzunsa,  ana tablo disina tasinacagi; external
       ile,  degerin  ana  tablo  disina  tasinacagi,  fakat  sistemin  degeri
       sikistirmaya calismayacagi; main ile, sikistirma yapilacagi ama degerin
       ana tablo disina tasinmasinin engellenecegi  belirtilir.  main  saklama
       stratejisinde,  degeri  tablo  satiri icinde saklamanin bir yolu yoksa,
       deger yine de ana tablo disina tasinabilir, fakat degerin  ana  tabloda
       tutulmasi  bakimindan  boyle  bir oge extended ve external ogelere gore
       daha ayricaliklidir.

       Kullanicinin  sutunlarda  NULL  deger  istememesi   durumunda   DEFAULT
       secenegi  ile  bir ontanimli deger belirtilebilir. (Boyle bir ontanimli
       deger bir sutuna acikca  ilistirilen  bir  DEFAULT  ile  o  sutun  icin
       degistirilebilir.)

       Turun  bir  dizi  oldugu, dizi elemanlari ELEMENT secenegi kullanilarak
       belirtilebilir. Ornegin, 4 baytlik tamsayilardan (int4) olusan bir dizi
       tanimlamak  icin,  secenek  ELEMENT  =  int4  seklinde belirtilir. Dizi
       turler asagida ayrintili olarak aciklanmistir.

       Bu turun dizisinin harici gosteriminde  kullanmak  uzere  ayra,c  olarak
       belli  bir  karakter belirtilebilir. Ontanimli ayrac virguldur. Yalniz,
       burada belirtilen ayrac  dizi  turle  degil,  dizi  elemaninin  turuyle
       ilgilidir.

   Dizi T"urler
       Bir   kullanici   tanimli   temel  veri  turunun  her  olusturulusunda,
       PostgreSQL bu veri turunun dizi turunu kendiliginden  olusturur  ve  bu
       veri  turununun  ismini  temel  veri  turu isminin basina bir alt cizgi
       ekleyerek olusturur. Cozumleyici bu uzlasimi bilir ve  foo[]  gibi  bir
       turdeki  sutun isteklerini _foo turundeki isteklere donusturur. Dolayli
       olusturulan dizi turu degisken uzunlukludur ve yerlesik girdi ve  cikti
       islevleri olan array_in ve array_out islevlerini kullanir.

       Madem  sistem dogru dizi turunu kendiliginden olusturuyor, ELEMENT diye
       bir secenek  nicin  var  diyebilirsiniz.  ELEMENT  kullanmanin  yararli
       oldugu  tek  durum,  dahili olarak ayni turde seylerin bir dizisi olmak
       uzere bir sabit uzunluklu tur tanimlayip, hem bu turun tamami  uzerinde
       hem   de  bu  seylere  indisleriyle  dogrudan  eriserek  bazi  islemler
       yapabilmek istenmesi durumudur. Ornegin, name turunun char elemanlarina
       bu  yontemle  erismek mumkundur. Bir iki boyutlu tur olan point turunun
       iki elemanina point[0] ve point[1] seklinde erismek  mumkundur.  Dahili
       bicim,  es  sabit  uzunluklu  alanlardan olustugundan, bu olusum sadece
       sabit uzunluklu turler icin  gecerlidir.  Indislenebilir  bir  degisken
       uzunluklu    tur,   array_in   ve   array_out   tarafindan   kullanilan
       genellestirilmis dahili gosterime sahip  olmalidir.  Tarihi  sebeplerle
       (bu  aslinda dogru degil, asil sebep bunu degistirmek icin gec kalinmis
       olmasidir), sabit uzunluklu dizilerin indislemesi  sifirdan  baslarken,
       degisken uzunluklu dizilerde birden baslar.

PARAMETRELER

       isim   Olusturulacak turun ismi (sema nitelemeli olabilir).

       "oznitelik_ismi
              Bilesik tur icin bir oznitelik (sutun) ismi.

       veri_t"ur"u
              Bilesik  turu olusturmak uzere bir sutun veri turu olarak mevcut
              bir turun ismi.

       girdi_i,slevi
              Turun harici metin gosterimini dahili gosterime ceviren  islevin
              ismi.

       ,cikti_i,slevi
              Turun   dahili  gosterimini  harici  metin  gosterimine  ceviren
              islevin ismi.

       ali,s_i,slevi
              Turun harici ikilik gosterimini dahili gosterime ceviren islevin
              ismi.

       g"onderim_i,slevi
              Turun dahili gosterimini harici ikilik gosterime ceviren islevin
              ismi.

       analiz_i,slevi
              Veri turu icin istatistiksel analizler yapan islevin ismi.

       dahili_uzunluk
              Yeni  turun  dahili  gosteriminin  bayt   cinsinden   uzunlugunu
              belirten sayisal sabit. Ontanimli deger turun degisken uzunluklu
              olacagi kabulune dayanir.

       hizalama
              Bellegin ne uzunlukta adimlanarak veri  turunun  yerletirilecegi
              belirtilir.  Belirtilmesi  gerekliyse,  char,  int2, int4, ya da
              double olabilir. int4 ontanimlidir.

       strateji
              Degisken   uzunluklu   veri   turlerinin   saklama   stratejisi.
              Belirtilmesi  gerekliyse,  plain,  external,  extended veya main
              olabilir. plain ontanimlidir.

       "ontanimli
              Veri turu icin ontanimli deger. Belirtilmezse NULL ontanimlidir.

       "oge_t"ur"u
              Belirtilirse turu bir dizi yapar; bu, dizi elemaninin veri  turu
              olmalidir.

       ayra,c  Bu turun harici dizi gosteriminde kullanilacak ayrac karakteri.

EK BILGI

       Kullanici   tanimli   turlerin  isimleri  altcizgi  (_)  karakteri  ile
       baslayamaz ve encok 62 karakter  uzunlukta  (veya  daha  genel  olarak,
       NAMEDATALEN  -  2; tur ismi disinda butun isimler icin NAMEDATALEN - 1)
       olabilir. Altcizgi ile baslayan tur isimleri dahili olarak  olusturulan
       dizi tur isimleri icin ayrilmistir.

       7.3   oncesi  PostgreSQL  surumlerinde,  islevlerin  opaque  turde  yer
       tutuculu tur isimlerine ileri basvurulari ile yer degistirmek uzere bir
       kabuk  turu  olusturmaktan  kacinmak alisilmis bir durumdu. Ayrica, 7.3
       oncesinde,  cstring  arguman  ve   donus   turlerinin   opaque   olarak
       bildirilmeleri  zorunluydu.  Eski  dokum  dosyalarini desteklemek icin,
       CREATE TYPE opaque kullanilarak  bildirilmis  islevleri  kabul  edecek,
       fakat    islevin    bildiriminin   dogru   tur   kullanilacak   sekilde
       degistirilmesi hususunda bir uyari ciktilayacaktir.

"ORNEKLER

       Bir bilesik turun olusturulmasi ve bir islev taniminda kullanilmasi:

           CREATE TYPE compfoo AS (f1 int, f2 text);

           CREATE FUNCTION getfoo() RETURNS SETOF compfoo AS $$
               SELECT fooid, fooname FROM foo
           $$ LANGUAGE SQL;

       box isminde bir temel veri turunun olusturulmasi ve bir tablo taniminda
       kullanilmasi:

           CREATE TYPE box (
               INTERNALLENGTH = 16,
               INPUT = my_box_in_function,
               OUTPUT = my_box_out_function
           );

           CREATE TABLE myboxes (
               id integer,
               description box
           );

       box turunun dahili yapisi float4 turunde 4 elemanli bir dizi ise:

           CREATE TYPE box (
               INTERNALLENGTH = 16,
               INPUT = my_box_in_function,
               OUTPUT = my_box_out_function,
               ELEMENT = float4
           );

       Bu   sekilde,   box   turundeki   degerin  elemanlarina  indisleri  ile
       erisilebilecegi gibi, tur yukaridaki gibi de davranir.

       Buyuk bir nesne turu olusturulmasi ve bir tablo taniminda kullanilmasi:

           CREATE TYPE bigobj (
               INPUT = lo_filein, OUTPUT = lo_fileout,
               INTERNALLENGTH = VARIABLE
           );
           CREATE TABLE big_objs (
               id integer,
               obj bigobj
           );

       Girdi ve cikti islevleri dahil daha fazla ornegi,
       http://www.postgresql.org/docs/8.0/static/xtypes.html         adresinde
       bulabilirsiniz.

UYUMLULUK

       Bu   CREATE   TYPE  bir  PostgreSQL  olusumudur.  SQL:1999  ve  sonraki
       standartlarda da bir CREATE TYPE vardir ama ayrintida daha farklidir.

ILGILI BELGELER

       CREATE FUNCTION [create_function(7)], DROP TYPE  [drop_type(7)],  ALTER
       TYPE [alter_type(7)].

,CEVIREN

       Nilgun Belma Buguner <nilgun (at) belgeler.gen.tr>, Nisan 2005