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

ISIM

       ALTER TABLE - bir tablonun tanimini degistirir

KULLANIM

       ALTER TABLE [ ONLY ] isim [ * ]
           eylem [, ... ]
       ALTER TABLE [ ONLY ] isim [ * ]
           RENAME [ COLUMN ] s"utun TO yeni_s"utun
       ALTER TABLE isim
           RENAME TO yeni_isim

       eylem sunlardan biri olabilir:

           ADD [ COLUMN ] s"utun t"ur [ s"utun_kisiti [ ... ] ]
           DROP [ COLUMN ] s"utun [ RESTRICT | CASCADE ]
           ALTER [ COLUMN ] s"utun TYPE t"ur [ USING ifade ]
           ALTER [ COLUMN ] s"utun SET DEFAULT ifade
           ALTER [ COLUMN ] s"utun DROP DEFAULT
           ALTER [ COLUMN ] s"utun { SET | DROP } NOT NULL
           ALTER [ COLUMN ] s"utun SET STATISTICS tamsayi
           ALTER [ COLUMN ] s"utun
               SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
           ADD tablo_kisiti
           DROP CONSTRAINT kisit_ismi [ RESTRICT | CASCADE ]
           CLUSTER ON indeks_ismi
           SET WITHOUT CLUSTER
           SET WITHOUT OIDS
           OWNER TO yeni_aidiyet
           SET TABLESPACE tabloalani_ismi

A,CIKLAMA

       ALTER  TABLE  mevcut  bir  tablonun  tanimini  degistirir.  Cesitli alt
       bicimleri vardir:

       ADD COLUMN
              CREATE TABLE [create_table(7)] ile ayni  sozdizimini  kullanarak
              tabloya yeni bir sutun eklemekte kullanilir.

       DROP COLUMN
              Bir  tablodan  bir  sutunu  kaldirmak  icin  kullanilir. Sutunla
              ilgili indeksler ve tablo kisitlari ozdevimli olarak kaldirilir.
              Anahtar  basvurulari ve sanal tablolar gibi sutuna tablo disinda
              bagimli herseyin buna dahil olmasini istiyorsaniz, CASCADE'a  da
              ihtiyaciniz var demektir.

       ALTER COLUMN TYPE
              Bir  tablo  sutununun  turunu  degistirmekte kullanilir. Sutunla
              ilgili indeksler ve tablo kisitlari yeni sutun turunu kullanacak
              sekilde,  ozgun  olarak  saglanmis ifadelerle yeniden cozumlerek
              ozdevimli olarak degistirilir. Istege bagli USING deyimiyle yeni
              sutun   degerlerinin   eski   degerlerden   nasil  hesaplanacagi
              belirtilir; kullanilmadigi  takdirde,  ontanimli  donusum,  eski
              veri  turunden yeni veri turune atama donusumu seklinde yapilir.
              Eski turden yeni ture donusum icin bir ortuk donusum ya da atama
              donusumu yoksa, bir USING deyimi kullanilmak zorundadir.

       SET/DROP DEFAULT
              Bir  sutunun  ontanimli degerini belirlemek ya da kaldirmak icin
              kullanilir.   Ontanimli   degerler,   sadece   sonraki    INSERT
              cumlelerine  uygulanir;  tablodaki  mevcut  satirlari etkilemez.
              Ontanimlilar,  ayrica  sanal  tablolar  icin   de   olusturulmus
              olabilir,   bu   durumda   sadece,   sanal   tabloya  ON  INSERT
              uygulanmadan once INSERT deyimiyle yerlestirilir.

       SET/DROP NOT NULL
              Bir sutunun NULL degerlere izin verip  vermeyecegini  belirlemek
              icin   kullanilir.  Sadece,  sutun  bir  NULL  deger  icermedigi
              takdirde, SET NOT NULL kullanabilirsiniz.

       SET STATISTICS
              Sonraki  ANALYZE  [analyze(7)]  islemleri  icin   sutun   basina
              istatistik  toplama  hedefini  belirlemek icin kullanilir. Hedef
              0-1000 araliginda ya da sistem ontanimli istatistik  hedefininin
              (bir  yapilandirma parametresi olan default_statistics_target'in
              degerinin)   kullanilmasi   icin   -1   olarak   belirtilebilir.
              PostgreSQL   sorgu   planlamacisi   tarafindan   istatistiklerin
              kullanimi hakkinda daha fazla bilgi edinmek icin
              http://www.postgresql.org/docs/8.0/static/planner-stats.html
              adresine bakiniz.

       SET STORAGE
              Bir  sutunun  saklama  kipini  belirlemek  icin  kullanilir. Bu,
              sutunun icerde mi  yoksa  ek  bir  tabloda  mi  tutulacagini  ve
              verinin sikistilacagini mi yoksa sikistilmayacagini mi denetler.
              integer  gibi  sabit  genislikli  degerlerin  icin   icerde   ve
              sikistirilmis  olmasi  icin  PLAIN  kullanilmalidir.  Icerde  ve
              sikistirilmis degerler  icin  MAIN,  harici  ve  sikistirilmamis
              degerler  icin   EXTERNAL, harici ve sikistirilmis degerler icin
              EXTENDED kullanilir. EXTENDED, PLAIN kipini  desteklemeyen  cogu
              veri  turu  icin  ontanimlidir. EXTERNAL kullanimi text ve bytea
              turundeki  sutunlar  icin  saklama  alanini  buyutmesine  karsin
              altdizge   islemlerinin,  daha  hizli  yapilmasini  saglar.  SET
              STORAGE tablo uzerindeki hicbir seyi kendisi degistirmez, sadece
              gelecekteki  tablo guncellemeleri sirasinda izlenecek stratejiyi
              belirler. Daha fazla bilgi icin
              http://www.postgresql.org/docs/8.0/static/storage-toast.html
              adresine bakiniz.

       ADD tablo_kisiti
              CREATE  TABLE  [create_table(7)] ile ayni sozdizimini kullanarak
              tabloya yeni bir kisit eklemekte kullanilir.

       DROP CONSTRAINT
              Bir tablodaki kisitlari  kaldirmak  icin  kullanilir.  Simdilik,
              tablolardaki    kisitlarin    essiz    isimlere   sahip   olmasi
              gerekmemektedir, dolayisiyla belirtilen  isimle  eslesen  birden
              fazla kisit olabilir. Eslesen tum kisitlar kaldirilacaktir.

       CLUSTER
              Sonraki  CLUSTER  [cluster(7)]  islemleri icin ontanimli indeksi
              secmekte kullanilir. Gercekte tabloyu yeniden kumelemez.

       SET WITHOUT CLUSTER
              Tabloda  en   son   kullanilan   CLUSTER   [cluster(7)]   indeks
              belirtimini  kaldirmak  icin  kullanilir.  Bu,  gelecekteki  bir
              indeks belirtmeyen tum kumeleme islemlerini etkileyecektir.

       SET WITHOUT OIDS
              Tablodan oid sistem sutununu kaldirmak  icin  kullanilir.  Zaten
              bir  oid  sutununun bulunmadigindan sikayet etmesi disinda, DROP
              COLUMN oid RESTRICT deyimine tamamen esdegerdir.

              Kaldirilmis  bir  oid  sutununun   tekrar   yerine   konulmasini
              saglayacak bir ALTER TABLE alt bicimi olmadigina dikkat edin.

       OWNER  Tablonun,   kayit   listesinin   veya  sanal  tablonun  sahibini
              belirtilen kullanici yapar.

       SET TABLESPACE
              Tablonun tablo alanini degistirmek icin  kullanilir.  Tablo  ile
              iliskili  tum  veri  dosyalarinin yani tablo alanina tasinmasini
              saglar. Indeksler eger  varsa  yani  alana  tasinmaz;  tasinmasi
              isteniyorsa,  ayri  bir  cumle olarak bir SET TABLESPACE cumlesi
              ile yapilabilir. Ayrica CREATE TABLESPACE [create_tablespace(7)]
              kilavuz sayfasina de bakiniz.

       RENAME Bir  tablo (veya indeks, kayit listesi ya da sanal tablo) ismini
              ya da  bir  tablonun  tek  bir  sutununun  ismini  degistirmekte
              kullanilir. Saklanmis veriler etkilenmez.

       RENAME   disinda   tum   eylemler   cesitli   degisikliklerin  birlikte
       uygulanmasi icin ayni cumlede kullanilabilir. Ornegin, bazi  sutunlarin
       isimleri degistirilirken, bazi sutunlarin eklenmesi mumkundur. Bu islem
       genellikle, tum degisikliklerin tek bir geciste yapilmasi  zorunlu  dev
       tablolarda kullanislidir.

       Calistirilmasi  icin ayricalikli kullanici olmanin gerekli oldugu ALTER
       TABLE OWNER disinda, ALTER TABLE  kullanabilmek  icin  tablonun  sahibi
       olmalisiniz.

PARAMETRELER

       isim   Degistirilecek  tablonun  ismi  (sema nitelemeli olabilir). Eger
              ONLY belirtilmisse sadece bu tablo degistirilir, belirtilmemisse
              bu  tablo  ve onun cocuklari olan tablolar (varsa) degistirilir.
              Cocuk  tablolarinda  degistirilecegini  belirtmek  uzere   tablo
              isminin  sonuna  bir  * eklenebilirse de, bu artik ontanimlidir.
              (7.1 surumunden  once,  ONLY  ontanimli  davranistir.  Ontanimli
              davranis    sql_inheritance    yapilandirma    parametresi   ile
              degistirilebilir.)

       s"utun  Yeni ya da mevcut bir sutunun ismi.

       yeni_s"utun
              Yeni ya da mevcut bir sutunun yeni ismi.

       yeni_isim
              Tablonun yeni ismi.

       t"ur    Mevcut bir sutun icin yeni veri turu ya da yeni bir sutunun veri
              turu.

       tablo_kisiti
              Tablo icin yeni tablo kisiti.

       kisit_ismi
              Kaldirilacak mevcut bir kisitin ismi.

       CASCADE
              Kaldirilan  kisit  veya  sutuna  bagimli nesnelerin (ornegin, bu
              sutuna   basvuran    sanal    tablolarin)    ozdevimli    olarak
              kaldirilmasini saglar.

       RESTRICT
              Bagimli   nesneleri   olan  kisit  veya  sutunun  kaldirilmasini
              engeller. Bu davranis ontanimlidir.

       indeks_ismi
              Tablonun kumeleme icin imleyecegi indeks ismi.

       yeni_aidiyet
              Tablonun yeni sahibinin kullanici ismi.

       tabloalani_ismi
              Tablonun tasinacagi yeni tablo alani ismi.

EK BILGI

       COLUMN anahtar sozcugu kuru gurultudur ve atlanabilir.

       Bir sutun ADD COLUMN ile eklendiginde, tablodaki mevcut satirlarin tumu
       sutunun   ontanimli   degeriyle   ilklendirilir   (bir  DEFAULT  deyimi
       belirtilmemisse NULL ile).

       Bir sutunun bos olmayan bir ontanimli ile  eklenmesi  veya  mevcut  bir
       sutunun  turunun  degistirilmesi tablonun tamaminin yeniden yazilmasina
       sebep olur. Bu cok buyuk tablolarda onemli sayilabilecek bir sure alir;
       ayrica,  gecici  olarak  buyuklugunun  iki  kati  kadar  bir disk alani
       gerektirecektir.

       Bir CHECK veya NOT NULL kisitinin eklenmesi  mevcut  satirlarin  kisiti
       yerine  getirip  getirmediginin  sinanmasi  icin  tablonun  taranmasini
       gerektirir.

       Tek bir ALTER TABLE cumlesinde cok sayida degisikligin belirtilebilmesi
       seceneginin saglanmasinin ana sebebi cok sayida tablonun taranmasini ya
       da   tablonun   yeniden   yazilmasinin   gerektigi    durumlarda    tum
       degisikliklerin tek bir geciste yapilmasinini saglamaktir.

       DROP  COLUMN  sutunu  fiziksel olarak silmez, sadece SQL islemleri icin
       gorunmez yapar. Tablo  uzerindeki  sonraki  veri  girme  ve  guncelleme
       islemleri  sutunda  bos  deger saklanmasina sebep olur. Bu, bir sutunun
       kaldirilmasini  hizlandirsa  da   tablonun   diskte   kapladigi   alan,
       kaldirilan   sutunun   kapladigi   alan   geri   alinmadigindan   hemen
       dusmeyecektir.   Mevcut   satirlar   guncellendikce   bu   alan    geri
       kazanilacaktir ama bu cok uzun zaman alabilir.

       Aslinda ALTER TABLE cumlesinin bir tablonun tumunun yeniden yazilmasini
       gerektirdigi durumda bir  getirisi  de  vardir,  yeniden  yazma  islemi
       tablodaki  olu  alanlarin  elenmesini  saglar.  Ornegin, kaldirilan bir
       sutun nedeniyle tabloda tutulan alani hemen geri kazanmak icin en hizli
       yol,

           ALTER TABLE tablo ALTER COLUMN birsutun TYPE birtur;

       yazmaktir.  Burada  birsutun  ile  mevcut  bir sutunu, birtur ile ise o
       sutunun kendi  turunu  belirtiyoruz.  Aslinda  tabloda  bir  degisiklik
       yapilmiyor  ama bu cumle tablonun yeniden yazilmasini sagliyor, boylece
       faydasiz veri temizlenmis oluyor.

       ALTER  TYPE  alt  cumlesinin  USING  secenegi  aslinda   satirin   eski
       degerleriyle  iliskili bir ifadeyi belirtebilir; yani, bit yandan diger
       sutunlara basvururken birini  donusturuyor  olabilir.  Bu,  ALTER  TYPE
       sozdizimi  ile  cok  genel  donusumler  yapilmasini  mumkun  kilar.  Bu
       esneklikten dolayi, USING ifadesi sutunun  ontanimli  degerine  (varsa)
       uygulanmaz;  sonuc  bir  ontanimli  icin  gerekli  olan bir sabit ifade
       olmayabilir. Bu,  eski  turden  yeni  ture  ortuk  ya  da  atamali  tur
       donusumunun  bulunmadiginda,  USING secenegi kullanildiginda bile ALTER
       TYPE alt cumlesinin donusumde basarisiz olacagi anlamina  gelir.  Boyle
       durumlarda,   ontanimli   DROP  DEFAULT  ile  kaldirilarak  ALTER  TYPE
       uygulanir  ve  bunun  ardindan  SET  DEFAULT  kullanilarak  uygun  yeni
       ontanimli  deger  eklenir.  Sutunla  ilgili  indekslere ve kisitlara da
       benzer seyler uygulanir.

       Eger bir tablonun  bir  cocuk  tablosu  varsa,  cocuk  tablolarda  ayni
       degisklikler  yapilmaksizin  bu  tablonun  bir  sutununun turunun ya da
       isminin degistirilmesine ve bir sutun eklenmesine izin verilmez.  Yani,
       ALTER  TABLE  ONLY  reddedilir. Bu, bir tablonun cocuklarinin daima ana
       tablonun sutunlarini icermesini saglamak icindir.

       Hem ana tabloya hem de cocuk tablolara uygulanan bir DROP COLUMN islemi
       ile  sadece,  cocuk  tablonun  ilgili  sutunu  ayni  zamanda  baska bir
       tablodan miras alinmamissa ve  sutun  bagimsiz  olarak  tanimlanmamissa
       kaldirilacaktir. Sadece ana tabloya uygulanan DROP COLUMN islemi (ALTER
       TABLE ONLY ... DROP COLUMN gibi), cocuk tablolardan bu  sutunlari  asla
       kaldirmayacak,  onlari  miras  alinmis  degil, bagimsiz sutunlar olarak
       imleyecektir.

       Sistem katalog tablosunda herhangi bir degisiklige izin verilmez.

       Gecerli parametrelerin aciklamalari icin CREATE TABLE [create_table(7)]
       kilavuz sayfasina bakiniz. Kalitim ile ilgili bilgileri ise
       http://www.postgresql.org/docs/8.0/static/ddl.html            bolumunde
       bulabilirsiniz.

"ORNEKLER

       Bir tabloya varchar turunde bir sutun eklemek icin:

           ALTER TABLE distributors ADD COLUMN address varchar(30);

       Bir tablodan bir sutunu kaldirmak icin:

           ALTER TABLE distributors DROP COLUMN address RESTRICT;

       Mevcut iki sutunun turunu tek bir islemle degistirmek icin:

           ALTER TABLE distributors
               ALTER COLUMN address TYPE varchar(80),
               ALTER COLUMN name TYPE varchar(100);

       UNIX  zaman  degerini  iceren  bir  sutunun  turunu  USING   secenegini
       kullanarak  timestamp  with  time  zone (zaman dilimli zaman gosterimi)
       turune donusturmek icin:

           ALTER TABLE foo
               ALTER COLUMN foo_timestamp TYPE timestamp with time zone
               USING timestamp with time zone
                   'epoch' + foo_timestamp * interval '1 second';

       Mevcut bir sutunun ismini degistirmek icin:

           ALTER TABLE distributors RENAME COLUMN address TO city;

       Mevcut bir tablonun ismini degistirmek icin:

           ALTER TABLE distributors RENAME TO suppliers;

       Bir sutuna bos deger icermeme kisiti eklemek icin:

           ALTER TABLE distributors ALTER COLUMN street SET NOT NULL;

       Bir sutundan bos deger icermeme kisitini kaldirmak icin:

           ALTER TABLE distributors ALTER COLUMN street DROP NOT NULL;

       Bir tabloya bir sinama kisiti eklemek icin:

           ALTER TABLE distributors
               ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);

       Bir tablodan ve cocuklarindan bir sinama kisitini kaldirmak icin:

           ALTER TABLE distributors DROP CONSTRAINT zipchk;

       Bir tabloya bir anahtar kisiti eklemek icin:

           ALTER TABLE distributors
               ADD CONSTRAINT distfk FOREIGN KEY (address)
               REFERENCES addresses (address) MATCH FULL;

       Bir tabloya (coksutunlu) bir essizlik kisiti eklemek icin:

           ALTER TABLE distributors
               ADD CONSTRAINT dist_id_zipcode_key UNIQUE (dist_id, zipcode);

       Bir tabloya bir birincil anahtari olmasa bile, ozdevimli isimlenen  bir
       birincil anahtar kisiti eklemek icin:

           ALTER TABLE distributors ADD PRIMARY KEY (dist_id);

       Bir tabloyu baska bir tablo alanina tasimak icin:

           ALTER TABLE distributors SET TABLESPACE fasttablespace;

UYUMLULUK

       ADD,  DROP  ve  SET  DEFAULT  alt bicimleri SQL standardiyla uyumludur.
       Diger alt bicimler birer PostgreSQL olusumudur. Ayrica, tek  bir  ALTER
       TABLE cumlesinde birden fazla degisikligin belirtilebilmesi ozelligi de
       bir PostgreSQL olusumudur.

       ALTER TABLE DROP COLUMN ile geriye bir sifir sutunlu tablo kalmak uzere
       bir  tablonun  tek sutunu kaldirilabilir.  SQL standardi sifir sutunluk
       tablolara izin vermediginden bu da bir PostgreSQL olusumudur.

,CEVIREN

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