Provided by:
manpages-tr_1.0.5.1-2_all 
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