Provided by: manpages-tr_1.0.5.1-2_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 ] sütun TO yeni_sütun
       ALTER TABLE isim
           RENAME TO yeni_isim

       eylem şunlardan biri olabilir:

           ADD [ COLUMN ] sütun tür [ sütun_kısıtı [ ... ] ]
           DROP [ COLUMN ] sütun [ RESTRICT | CASCADE ]
           ALTER [ COLUMN ] sütun TYPE tür [ USING ifade ]
           ALTER [ COLUMN ] sütun SET DEFAULT ifade
           ALTER [ COLUMN ] sütun DROP DEFAULT
           ALTER [ COLUMN ] sütun { SET | DROP } NOT NULL
           ALTER [ COLUMN ] sütun SET STATISTICS tamsayı
           ALTER [ COLUMN ] sütun
               SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
           ADD tablo_kısıtı
           DROP CONSTRAINT kısıt_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_kısıtı
              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.)

       sütun  Yeni ya da mevcut bir sütunun ismi.

       yeni_sütun
              Yeni ya da mevcut bir sütunun yeni ismi.

       yeni_isim
              Tablonun yeni ismi.

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

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

       kısıt_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