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

İSİM

       ALTER TABLE - bir tablonun tanımını değiştirir

KULLANIM

       ALTER TABLE [ ONLY ] isim [ * ]
           eylem [, ... ]
       ALTER TABLE [ ONLY ] isim [ * ]
           RENAME [ COLUMN ] stun TO yeni_stun
       ALTER TABLE isim
           RENAME TO yeni_isim

       eylem şunlardan biri olabilir:

           ADD [ COLUMN ] stun tr [ stun_kst [ ... ] ]
           DROP [ COLUMN ] stun [ RESTRICT | CASCADE ]
           ALTER [ COLUMN ] stun TYPE tr [ USING ifade ]
           ALTER [ COLUMN ] stun SET DEFAULT ifade
           ALTER [ COLUMN ] stun DROP DEFAULT
           ALTER [ COLUMN ] stun { SET | DROP } NOT NULL
           ALTER [ COLUMN ] stun SET STATISTICS tamsay
           ALTER [ COLUMN ] stun
               SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
           ADD tablo_kst
           DROP CONSTRAINT kst_ismi [ RESTRICT | CASCADE ]
           CLUSTER ON indeks_ismi
           SET WITHOUT CLUSTER
           SET WITHOUT OIDS
           OWNER TO yeni_aidiyet
           SET TABLESPACE tabloalan_ismi

AÇIKLAMA

       ALTER  TABLE  mevcut  bir  tablonun  tanımını  değiştirir.  Çeşitli alt
       biçimleri vardır:

       ADD COLUMN
              CREATE TABLE [create_table(7)] ile aynı  sözdizimini  kullanarak
              tabloya yeni bir sütun eklemekte kullanılır.

       DROP COLUMN
              Bir  tablodan  bir  sütunu  kaldırmak  için  kullanılır. Sütunla
              ilgili indeksler ve tablo kısıtları özdevimli olarak kaldırılır.
              Anahtar  başvuruları ve sanal tablolar gibi sütuna tablo dışında
              bağımlı herşeyin buna dahil olmasını istiyorsanız, CASCADE'a  da
              ihtiyacınız var demektir.

       ALTER COLUMN TYPE
              Bir  tablo  sütununun  türünü  değiştirmekte kullanılır. Sütunla
              ilgili indeksler ve tablo kısıtları yeni sütun türünü kullanacak
              şekilde,  özgün  olarak  sağlanmış ifadelerle yeniden çözümlerek
              özdevimli olarak değiştirilir. İsteğe bağlı USING deyimiyle yeni
              sütun   değerlerinin   eski   değerlerden   nasıl  hesaplanacağı
              belirtilir; kullanılmadığı  takdirde,  öntanımlı  dönüşüm,  eski
              veri  türünden yeni veri türüne atama dönüşümü şeklinde yapılır.
              Eski türden yeni türe dönüşüm için bir örtük dönüşüm ya da atama
              dönüşümü yoksa, bir USING deyimi kullanılmak zorundadır.

       SET/DROP DEFAULT
              Bir  sütunun  öntanımlı değerini belirlemek ya da kaldırmak için
              kullanılır.   Öntanımlı   değerler,   sadece   sonraki    INSERT
              cümlelerine  uygulanır;  tablodaki  mevcut  satırları etkilemez.
              Öntanımlılar,  ayrıca  sanal  tablolar  için   de   oluşturulmuş
              olabilir,   bu   durumda   sadece,   sanal   tabloya  ON  INSERT
              uygulanmadan önce INSERT deyimiyle yerleştirilir.

       SET/DROP NOT NULL
              Bir sütunun NULL değerlere izin verip  vermeyeceğini  belirlemek
              için   kullanılır.  Sadece,  sütun  bir  NULL  değer  içermediği
              takdirde, SET NOT NULL kullanabilirsiniz.

       SET STATISTICS
              Sonraki  ANALYZE  [analyze(7)]  işlemleri  için   sütun   başına
              istatistik  toplama  hedefini  belirlemek için kullanılır. Hedef
              0-1000 aralığında ya da sistem öntanımlı istatistik  hedefininin
              (bir  yapılandırma parametresi olan default_statistics_target'in
              değerinin)   kullanılması   için   -1   olarak   belirtilebilir.
              PostgreSQL   sorgu   planlamacısı   tarafından   istatistiklerin
              kullanımı hakkında daha fazla bilgi edinmek için
              http://www.postgresql.org/docs/8.0/static/planner-stats.html
              adresine bakınız.

       SET STORAGE
              Bir  sütunun  saklama  kipini  belirlemek  için  kullanılır. Bu,
              sütunun içerde mi  yoksa  ek  bir  tabloda  mı  tutulacağını  ve
              verinin sıkıştılacağını mı yoksa sıkıştılmayacağını mı denetler.
              integer  gibi  sabit  genişlikli  değerlerin  için   içerde   ve
              sıkıştırılmış  olması  için  PLAIN  kullanılmalıdır.  İçerde  ve
              sıkıştırılmış değerler  için  MAIN,  harici  ve  sıkıştırılmamış
              değerler  için   EXTERNAL, harici ve sıkıştırılmış değerler için
              EXTENDED kullanılır. EXTENDED, PLAIN kipini  desteklemeyen  çoğu
              veri  türü  için  öntanımlıdır. EXTERNAL kullanımı text ve bytea
              türündeki  sütunlar  için  saklama  alanını  büyütmesine  karşın
              altdizge   işlemlerinin,  daha  hızlı  yapılmasını  sağlar.  SET
              STORAGE tablo üzerindeki hiçbir şeyi kendisi değiştirmez, sadece
              gelecekteki  tablo güncellemeleri sırasında izlenecek stratejiyi
              belirler. Daha fazla bilgi için
              http://www.postgresql.org/docs/8.0/static/storage-toast.html
              adresine bakınız.

       ADD tablo_kst
              CREATE  TABLE  [create_table(7)] ile aynı sözdizimini kullanarak
              tabloya yeni bir kısıt eklemekte kullanılır.

       DROP CONSTRAINT
              Bir tablodaki kısıtları  kaldırmak  için  kullanılır.  Şimdilik,
              tablolardaki    kısıtların    eşsiz    isimlere   sahip   olması
              gerekmemektedir, dolayısıyla belirtilen  isimle  eşleşen  birden
              fazla kısıt olabilir. Eşleşen tüm kısıtlar kaldırılacaktır.

       CLUSTER
              Sonraki  CLUSTER  [cluster(7)]  işlemleri için öntanımlı indeksi
              seçmekte kullanılır. Gerçekte tabloyu yeniden kümelemez.

       SET WITHOUT CLUSTER
              Tabloda  en   son   kullanılan   CLUSTER   [cluster(7)]   indeks
              belirtimini  kaldırmak  için  kullanılır.  Bu,  gelecekteki  bir
              indeks belirtmeyen tüm kümeleme işlemlerini etkileyecektir.

       SET WITHOUT OIDS
              Tablodan oid sistem sütununu kaldırmak  için  kullanılır.  Zaten
              bir  oid  sütununun bulunmadığından şikayet etmesi dışında, DROP
              COLUMN oid RESTRICT deyimine tamamen eşdeğerdir.

              Kaldırılmış  bir  oid  sütununun   tekrar   yerine   konulmasını
              sağlayacak bir ALTER TABLE alt biçimi olmadığına dikkat edin.

       OWNER  Tablonun,   kayıt   listesinin   veya  sanal  tablonun  sahibini
              belirtilen kullanıcı yapar.

       SET TABLESPACE
              Tablonun tablo alanını değiştirmek için  kullanılır.  Tablo  ile
              ilişkili  tüm  veri  dosyalarının yani tablo alanına taşınmasını
              sağlar. İndeksler eğer  varsa  yani  alana  taşınmaz;  taşınması
              isteniyorsa,  ayrı  bir  cümle olarak bir SET TABLESPACE cümlesi
              ile yapılabilir. Ayrıca CREATE TABLESPACE [create_tablespace(7)]
              kılavuz sayfasına de bakınız.

       RENAME Bir  tablo (veya indeks, kayıt listesi ya da sanal tablo) ismini
              ya da  bir  tablonun  tek  bir  sütununun  ismini  değiştirmekte
              kullanılır. Saklanmış veriler etkilenmez.

       RENAME   dışında   tüm   eylemler   çeşitli   değişikliklerin  birlikte
       uygulanması için aynı cümlede kullanılabilir. Örneğin, bazı  sütunların
       isimleri değiştirilirken, bazı sütunların eklenmesi mümkündür. Bu işlem
       genellikle, tüm değişikliklerin tek bir geçişte yapılması  zorunlu  dev
       tablolarda kullanışlıdır.

       Çalıştırılması  için ayrıcalıklı kullanıcı olmanın gerekli olduğu ALTER
       TABLE OWNER dışında, ALTER TABLE  kullanabilmek  için  tablonun  sahibi
       olmalısınız.

PARAMETRELER

       isim   Değiştirilecek  tablonun  ismi  (şema nitelemeli olabilir). Eğer
              ONLY belirtilmişse sadece bu tablo değiştirilir, belirtilmemişse
              bu  tablo  ve onun çocukları olan tablolar (varsa) değiştirilir.
              Çocuk  tablolarında  değiştirileceğini  belirtmek  üzere   tablo
              isminin  sonuna  bir  * eklenebilirse de, bu artık öntanımlıdır.
              (7.1 sürümünden  önce,  ONLY  öntanımlı  davranıştır.  Öntanımlı
              davranış    sql_inheritance    yapılandırma    parametresi   ile
              değiştirilebilir.)

       stun  Yeni ya da mevcut bir sütunun ismi.

       yeni_stun
              Yeni ya da mevcut bir sütunun yeni ismi.

       yeni_isim
              Tablonun yeni ismi.

       tr    Mevcut bir sütun için yeni veri türü ya da yeni bir sütunun veri
              türü.

       tablo_kst
              Tablo için yeni tablo kısıtı.

       kst_ismi
              Kaldırılacak mevcut bir kısıtın ismi.

       CASCADE
              Kaldırılan  kısıt  veya  sütuna  bağımlı nesnelerin (örneğin, bu
              sütuna   başvuran    sanal    tabloların)    özdevimli    olarak
              kaldırılmasını sağlar.

       RESTRICT
              Bağımlı   nesneleri   olan  kısıt  veya  sütunun  kaldırılmasını
              engeller. Bu davranış öntanımlıdır.

       indeks_ismi
              Tablonun kümeleme için imleyeceği indeks ismi.

       yeni_aidiyet
              Tablonun yeni sahibinin kullanıcı ismi.

       tabloalan_ismi
              Tablonun taşınacağı yeni tablo alanı ismi.

EK BİLGİ

       COLUMN anahtar sözcüğü kuru gürültüdür ve atlanabilir.

       Bir sütun ADD COLUMN ile eklendiğinde, tablodaki mevcut satırların tümü
       sütunun   öntanımlı   değeriyle   ilklendirilir   (bir  DEFAULT  deyimi
       belirtilmemişse NULL ile).

       Bir sütunun boş olmayan bir öntanımlı ile  eklenmesi  veya  mevcut  bir
       sütunun  türünün  değiştirilmesi tablonun tamamının yeniden yazılmasına
       sebep olur. Bu çok büyük tablolarda önemli sayılabilecek bir süre alır;
       ayrıca,  geçici  olarak  büyüklüğünün  iki  katı  kadar  bir disk alanı
       gerektirecektir.

       Bir CHECK veya NOT NULL kısıtının eklenmesi  mevcut  satırların  kısıtı
       yerine  getirip  getirmediğinin  sınanması  için  tablonun  taranmasını
       gerektirir.

       Tek bir ALTER TABLE cümlesinde çok sayıda değişikliğin belirtilebilmesi
       seçeneğinin sağlanmasının ana sebebi çok sayıda tablonun taranmasını ya
       da   tablonun   yeniden   yazılmasının   gerektiği    durumlarda    tüm
       değişikliklerin tek bir geçişte yapılmasınını sağlamaktır.

       DROP  COLUMN  sütunu  fiziksel olarak silmez, sadece SQL işlemleri için
       görünmez yapar. Tablo  üzerindeki  sonraki  veri  girme  ve  güncelleme
       işlemleri  sütunda  boş  değer saklanmasına sebep olur. Bu, bir sütunun
       kaldırılmasını  hızlandırsa  da   tablonun   diskte   kapladığı   alan,
       kaldırılan   sütunun   kapladığı   alan   geri   alınmadığından   hemen
       düşmeyecektir.   Mevcut   satırlar   güncellendikçe   bu   alan    geri
       kazanılacaktır ama bu çok uzun zaman alabilir.

       Aslında ALTER TABLE cümlesinin bir tablonun tümünün yeniden yazılmasını
       gerektirdiği durumda bir  getirisi  de  vardır,  yeniden  yazma  işlemi
       tablodaki  ölü  alanların  elenmesini  sağlar.  Örneğin, kaldırılan bir
       sütun nedeniyle tabloda tutulan alanı hemen geri kazanmak için en hızlı
       yol,

           ALTER TABLE tablo ALTER COLUMN birsütun TYPE birtür;

       yazmaktır.  Burada  birsütun  ile  mevcut  bir sütunu, birtür ile ise o
       sütunun kendi  türünü  belirtiyoruz.  Aslında  tabloda  bir  değişiklik
       yapılmıyor  ama bu cümle tablonun yeniden yazılmasını sağlıyor, böylece
       faydasız veri temizlenmiş oluyor.

       ALTER  TYPE  alt  cümlesinin  USING  seçeneği  aslında   satırın   eski
       değerleriyle  ilişkili bir ifadeyi belirtebilir; yani, bit yandan diğer
       sütunlara başvururken birini  dönüştürüyor  olabilir.  Bu,  ALTER  TYPE
       sözdizimi  ile  çok  genel  dönüşümler  yapılmasını  mümkün  kılar.  Bu
       esneklikten dolayı, USING ifadesi sütunun  öntanımlı  değerine  (varsa)
       uygulanmaz;  sonuç  bir  öntanımlı  için  gerekli  olan bir sabit ifade
       olmayabilir. Bu,  eski  türden  yeni  türe  örtük  ya  da  atamalı  tür
       dönüşümünün  bulunmadığında,  USING seçeneği kullanıldığında bile ALTER
       TYPE alt cümlesinin dönüşümde başarısız olacağı anlamına  gelir.  Böyle
       durumlarda,   öntanımlı   DROP  DEFAULT  ile  kaldırılarak  ALTER  TYPE
       uygulanır  ve  bunun  ardından  SET  DEFAULT  kullanılarak  uygun  yeni
       öntanımlı  değer  eklenir.  Sütünla  ilgili  indekslere ve kısıtlara da
       benzer şeyler uygulanır.

       Eğer bir tablonun  bir  çocuk  tablosu  varsa,  çocuk  tablolarda  aynı
       değişklikler  yapılmaksızın  bu  tablonun  bir  sütununun türünün ya da
       isminin değiştirilmesine ve bir sütun eklenmesine izin verilmez.  Yani,
       ALTER  TABLE  ONLY  reddedilir. Bu, bir tablonun çocuklarının daima ana
       tablonun sütunlarını içermesini sağlamak içindir.

       Hem ana tabloya hem de çocuk tablolara uygulanan bir DROP COLUMN işlemi
       ile  sadece,  çocuk  tablonun  ilgili  sütunu  aynı  zamanda  başka bir
       tablodan miras alınmamışsa ve  sütun  bağımsız  olarak  tanımlanmamışsa
       kaldırılacaktır. Sadece ana tabloya uygulanan DROP COLUMN işlemi (ALTER
       TABLE ONLY ... DROP COLUMN gibi), çocuk tablolardan bu  sütunları  asla
       kaldırmayacak,  onları  miras  alınmış  değil, bağımsız sütunlar olarak
       imleyecektir.

       Sistem katalog tablosunda herhangi bir değişikliğe izin verilmez.

       Geçerli parametrelerin açıklamaları için CREATE TABLE [create_table(7)]
       kılavuz sayfasına bakınız. Kalıtım ile ilgili bilgileri ise
       http://www.postgresql.org/docs/8.0/static/ddl.html            bölümünde
       bulabilirsiniz.

ÖRNEKLER

       Bir tabloya varchar türünde bir sütun eklemek için:

           ALTER TABLE distributors ADD COLUMN address varchar(30);

       Bir tablodan bir sütunu kaldırmak için:

           ALTER TABLE distributors DROP COLUMN address RESTRICT;

       Mevcut iki sütunun türünü tek bir işlemle değiştirmek için:

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

       UNIX  zaman  değerini  içeren  bir  sütunun  türünü  USING   seçeneğini
       kullanarak  timestamp  with  time  zone (zaman dilimli zaman gösterimi)
       türüne dönüştürmek için:

           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 sütunun ismini değiştirmek için:

           ALTER TABLE distributors RENAME COLUMN address TO city;

       Mevcut bir tablonun ismini değiştirmek için:

           ALTER TABLE distributors RENAME TO suppliers;

       Bir sütuna boş değer içermeme kısıtı eklemek için:

           ALTER TABLE distributors ALTER COLUMN street SET NOT NULL;

       Bir sütundan boş değer içermeme kısıtını kaldırmak için:

           ALTER TABLE distributors ALTER COLUMN street DROP NOT NULL;

       Bir tabloya bir sınama kısıtı eklemek için:

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

       Bir tablodan ve çocuklarından bir sınama kısıtını kaldırmak için:

           ALTER TABLE distributors DROP CONSTRAINT zipchk;

       Bir tabloya bir anahtar kısıtı eklemek için:

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

       Bir tabloya (çoksütunlu) bir eşsizlik kısıtı eklemek için:

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

       Bir tabloya bir birincil anahtarı olmasa bile, özdevimli isimlenen  bir
       birincil anahtar kısıtı eklemek için:

           ALTER TABLE distributors ADD PRIMARY KEY (dist_id);

       Bir tabloyu başka bir tablo alanına taşımak için:

           ALTER TABLE distributors SET TABLESPACE fasttablespace;

UYUMLULUK

       ADD,  DROP  ve  SET  DEFAULT  alt biçimleri SQL standardıyla uyumludur.
       Diğer alt biçimler birer PostgreSQL oluşumudur. Ayrıca, tek  bir  ALTER
       TABLE cümlesinde birden fazla değişikliğin belirtilebilmesi özelliği de
       bir PostgreSQL oluşumudur.

       ALTER TABLE DROP COLUMN ile geriye bir sıfır sütunlu tablo kalmak üzere
       bir  tablonun  tek sütunu kaldırılabilir.  SQL standardı sıfır sütunluk
       tablolara izin vermediğinden bu da bir PostgreSQL oluşumudur.

ÇEVİREN

       Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Mart 2005