İSİM¶
CREATE TABLE - yeni bir tablo tanımlar
KULLANIM¶
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE tablo_ismi (
{ sütun_ismi veri_türü [ DEFAULT öntanımlı_ifade ]
[ sütun_kısıtı [ ... ] ]
| tablo_kısıtı
| LIKE ana_tablo [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ]
)
[ INHERITS ( ana_tablo [, ... ] ) ]
[ WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tabloalanı ]
Buradaki sütun_kısıtı:
[ CONSTRAINT kısıt_ismi ]
{ NOT NULL |
NULL |
UNIQUE [ USING INDEX TABLESPACE tabloalanı ]
| PRIMARY KEY [ USING INDEX TABLESPACE tabloalanı ]
| CHECK (ifade)
| REFERENCES başvuru_tablosu [ ( başvuru_sütunu ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE eylem ] [ ON UPDATE eylem ] }
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
ve tablo_kısıtı:
[ CONSTRAINT kısıt_ismi ]
{ UNIQUE ( sütun_ismi [, ... ] )
[ USING INDEX TABLESPACE tabloalanı ]
| PRIMARY KEY ( sütun_ismi [, ... ] )
[ USING INDEX TABLESPACE tabloalanı ]
| CHECK ( ifade )
| FOREIGN KEY ( sütun_ismi [, ... ] )
REFERENCES başvuru_tablosu [ ( başvuru_sütunu [, ... ] ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE eylem ] [ ON UPDATE eylem ] }
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
AÇIKLAMA¶
CREATE TABLE o anki veritabanınında yeni bir tabloyu ilk olarak
boş bir tablo olarak oluşturacaktır. Tablonun sahibi komutu
çalıştıran kullanıcı olacaktır.
Eğer bir şema ismi belirtilmişse (
CREATE TABLE
myschema.mytable ... gibi), tablo belirtilen şemada
oluşturulur. Aksi takdirde o an geçerli olan şemada
oluşturulur. Geçici tablolar bir özel şema içinde
mevcuttur, dolayısıyla bir geçici tablo oluştururken bir
şema ismi belirtilmeyebilir. Tablo ismi şema içindeki
diğer tabloların, indekslerin ve sanal tabloların isimlerinden
farklı olmalıdır.
CREATE TABLE ayrıca, özdevinimli olarak tablonun bir
satırına karşılık olarak karma bir veri
türü oluşturur. Bu nedenle, aynı şema içindeki
tablolar mevcut veri türleriyle aynı isme sahip olamazlar.
İsteğe bağlı kısıt deyimleri ile yeni veya
güncellenen satırların yerleştirme ve güncelleme
işlemlerinin sağlaması gereken kısıtlar
(sınamalar) belirtilir. Bir kısıt, tablo içinde
çeşitli yollarla geçerli değerlerin
tanımlanmasına yardımcı olacak bir SQL nesnesidir.
Kısıtları tanımlamanın iki yolu vardır: tablo
kısıtları ve sütun kısıtları. Bir
sütun kısıtı bir sütun tanımının
parçası olarak tanımlanır ve birden fazla sütunu
kuşatabilir. Her sütun kısıtı ayrıca, bir tablo
kısıtı olarak da yazılabilir; bir kısıt sadece
bir sütunu etkilediğinde bir sütun kısıtı
sayılabilir.
PARAMETRELER¶
- TEMPORARY veya TEMP
- Belirtilmişse tablo bir geçici tablo olarak
oluşturulur. Geçici tablolar bir oturumun sonunda
özdevinimli olarak silinir, bazan isteğe bağlı olarak
bir hareketin sonunda da silinebilir (aşağıdaki ON
COMMIT açıklamasına bakınız). şema
nitelemeli ismlerle başvurulmadıkça, aynı isimle
varolan kalıcı tablolar geçici tablonun
varlığı durumunda o anki oturuma görünür
olmazlar. Bir geçici tablo üzerinde oluşturulan indeksler
de özdevinimli olarak geçici olacaktır.
İsteğe bağlı olarak, TEMPORARY veya
TEMP'den önce GLOBAL veya LOCAL
yazılabilir. Bu, PostgreSQL'de bir şey farkettirmez, ama yine de
Uyumluluk bölümüne bakın.
- tablo_ismi
- Oluşturulacak tablonun ismi (şema nitelemeli
olabilir).
- sütun_ismi
- Yeni tabloda oluşturulacak bir sütunun ismi.
- veri_türü
- Sütunun veri türü. Bu, dizi
belirteçleri içerebilir. PostgreSQL tarafından desteklenen
veri türleri hakkında bilgi edinmek için
http://www.postgresql.org/docs/8.0/static/datatype.html adresine
bakınız.
- DEFAULT öntanımlı_ifade
- DEFAULT deyimi sütun tanımının
içinde görünerek sütun için bir
öntanımlı veri değeri atar. Değer, bir
değişken içrmeyen bir ifadedir (tablo içinde
diğer sütunlara çağraz başvurulara ve
altsorgulara izin verilmez). Öntanımlı ifadenin veri
türü sütunun veri türü ile
eşleşmelidir.
Önanımlı ifade, sütun için bir değer
belirtmeyen bir veri girme işleminde sütun değeri olarak
kullanılacaktır. Bir sütun için
öntanımlı bir değer belirtilmezse, NULL
öntanımlıdır.
- INHERITS ( ana_tablo [, ... ] )
- İsteğe bağlı INHERITS deyimi,
yeni bir tablonun tüm sütunlarını miras
alacağı tabloların bir listesini belirtmek için
kullanılır.
INHERITS kullanımı yeni çocuk tablo ile onun abeveyni
olan tablo arasında kalıcı bir birliktelik oluşturur.
Ebeveynler üzerindeki şema değişiklikleri normalde
çocukları da etkiler ve öntanımlı olarak
çocuk tablonun verisi ebeveynler tarafından
paylaşılır.
Eğer aynı sütun ismi birden fazla ebeveyn tabloda mevcutsa ve
bu tabloların bu sütunları veri türü
bakımından eşleşmediği takdirde bir hata
raporlanacaktır. Eğer böyle bir durum yoksa, yinelenen
sütunlar yani tabloda tek bir sütun oluşturacak
şekilde katıştırılırlar. Eğer yeni
tablonun sütun isimleri listesi aynı zamanda miras
alınmış bir sütun da içeriyorsa, veri
türü miras alınan sütunlara benzer şekilde
eşleşmeli ve sütun tanımları tek bir sütun
olarak katıştırılmalıdır. Ancak, miras
alınan ve yeni sütun bildirimlerinin eşdeğer
kısıtla belirtmesi gerekmez: bildirimlerden toplanan tüm
kısıtlar birlikte katıştırılır ve
tümü yeni tabloya uygulanır. Eğer yeni tablo
sütun için açıkça bir öntanımlı
değer belirtiyorsa, bu öntanımlı değer, miras
alınan sütun bildirimlerin gelen
öntanımlıların yerine geçer. Aksi takdirde,
sütun için öntanımlı değer belirten her
ebeveyn aynı öntanımlı değeri belirtmelidir,
yoksa bir hata raporlanacaktır.
- LIKE ana_tablo [ { INCLUDING |
EXCLUDING } DEFAULTS ]
- LIKE deyimi, yeni bir tabloya veri türleri ve
boş olmayan kısıtları ile birlikte tüm sütun
isimlerinin özdevinimli kopyalanacağı bir tablo belirtir.
INHERITS'in tersine, yeni tablo ve özgün tablo
oluşturma işleminden sonra tamamen birbirlerinin kopyası
olurlar. Özgün tabloda yapılacak değişiklikler
yeni tabloya uygulanmayacak ve yeni tabloda özgün tablodan
alınmış veri olmayacaktır.
Kopyalanan sütun tanımları için öntanımlı
olan ifadeler sadece INCLUDING DEFAULTS belirtilmişse
kopyalanacaktır. Öntanımlı davranış
öntanımlı olan ifadelerin dışlanması ve
sonuç olarak yeni tablonun tüm sütunlarının
boş öntanımlılara sahip olmasıdır.
- WITH OIDS, WITHOUT OIDS
- Bu isteğe bağlı deyimler, yeni tablonun
satırlarının onlara atanacak OID'lere (nesne
belirteçlerine) sahip olup olmayacağını belirtmekte
kullanılır. Eğer ne WITH OIDS ne de WITHOUT
OIDS belirtilmişse, öntanımlı değer
default_with_oids yapılandırma parametresinin değerine
bağlıdır. (Eğer yeni tablo nesne belirteçlerine
sahip bir tabloyu miras alıyorsa, tabloyu oluşturan cümle
WITHOUT OIDS içerse bile WITH OIDS geçerli olur.)
Eğer WITHOUT OIDS belirtilmiş ve uygulanmışsa,
yeni tablo nesne belirteçlerini saklamaz ve girilen her yeni
satır için bir nesne belirteci atanmaz. Nesne belirteci
tüketimi azalacağından ve bu suretle 32 bitlik OID
sayacının başa dönmesi erteleneceğinden genelde
edilen zahmete değer. Sayaç bir kere başa döndü
mü, nesne belirteçlerinin artık eşsiz
olmayacağı varsayılır ve bu onları nispeten daha
az yararlı hale getirir. Nesne belirteçlerinin
dışlanması ek olarak, her satır için 4 bayt
(çoğu makinede) olmak üzere tablonun disk üzerinde
kaplayacağı alanı düşürecek ve
başarımı oldukça arttıracaktır.
Tablo oluşturulduktan sonra nesne belirteçlerini kaldırmak
için ALTER TABLE [alter_table(7)] kullanın.
- CONSTRAINT kısıt_ismi
- Bir sütun ya da tablo kısıtı için
isteğe bağlı bir isim. Belirtilmezse ismi sistem
üretir.
- NOT NULL
- Sütunun boş değer içeremeyeceğini
belirtir.
- NULL
- Sütunun boş değer içermesine izin
verilir. bu öntanımlıdır.
Bu deyim, sadece standartdışı SQL veritabanlarıyla
uyumluluk için vardır. Yeni uygulamalarda
kullanımından vazgeçilmelidir.
-
UNIQUE kısıtı, bir tablonun bir veya daha fazla sütunundan oluşan bir grubunun sadece eşsiz değerler içerebileceğini belirtir. Eşsiz tablo kısıtının davranışı, çok sayıda sütun belirtilebilmesi dışında sütun kısıtınınki ile aynıdır.
-
Eşsizlik kısıtının amacına uygun olarak,
boş değerlerin eşit olmadıkları
varsayılır.
Her eşsiz tablo kısıtı, aynı tabloda
tanımlanmış diğer eşsizlik veya birincil anahtar
kısıtı tarafından isimlendirilmiş sütun
grubundan farklı bir sütun grubunu isimlendirmelidir. (Aksi
takdirde, yalnızca, aynı kısıt iki kere
listelenmiş olur.)
-
Birincil anahtar kısıtı bir tablonun bir sütununun ya da sütunlarının sadece elsiz ve boş olmayan değerler içerebileceğini belirtir. Teknik olarak, PRIMARY KEY sadece UNIQUE ile NOT NULL deyiminin birleşimidir, fakat bir sütun grubunun birincil anahtar olarak belirtilmesi ayrıca, şema tasarımı hakkında hamveri sağlar; bir birincil anahtar uygulanmış gibi diğer tablolar, bu tablonun satırları için bir eşsiz belirteç olarak bu sütun grubuna bel bağlayayabilir.
-
İster sütun ister tablo kısıtı olarak belirtilsin,
bir tablo için sadece bir birincil anahtar belirtilebilir.
Birincil anahtar kısıtı, aynı tabloda
tanımlanmış bir eşsizlik kısıtı
tarafından isimlendirilmiş diğer sütun
gruplarından farklı bir sütun grubunu isimlendirmelidir.
- CHECK (ifade)
- CHECK deyimi, bir veri girme veya güncelleme
işlemi sonucunda yeni ya da güncellenmiş
satırların sağlaması gereken bir mantıksal
sonuç üreten bir ifadeyi belirtmek için
kullanılır. TRUE veya UNKNOWN olarak sonuçlanan ifadeler
başarılı kabul edilir. Bir veri girme veya güncelleme
işleminin ürettiği bir FALSE sonucunda bir hata
olağandışılığı oluşur ve bu veri
girme veya güncelleme işlemi veritabanını
değiştirmez. Bir tablo kısıtı içinde
görünen bir ifade çok sayıda sütunun değeri
ile ilgili olabilirken, bir sütun kısıtı olarak
belirtilen bir sınama kısıtı sadece bu sütunun
değeriyle ilgili olmalıdır.
Şimdilik, CHECK ifadeleri ne altsorgu içerebilir ne de
üzerinde çalışılan satır
dışındaki sütunların değerleriyle ilgili
olabilir.
-
Bu deyimler, başvurulan tablonun bir satırının başvurulan sütunlarındaki değerlerle eşleşmesi gereken değerler içermesi istenen yeni tablonun bir ya da daha fazla sütunundan oluşan bir sütun grubunu gerektiren bir yabancı anahtar kısıtı belirtir. Eğer başvuru_sütunu belirtilmezse, başvuru_tablosu'nun birincil anahtarı kullanılır. Başvurulan sütunlar, başvurulan tablodaki bir eşsizlik veya bir birincil anahtar kısıtınının sütunları olmalıdır.
-
Bşvurulan sütunlara girilen bir değer, başvurulan
tablonun ve başvurulan sütunların değerleriyle
belirtilen eşleşme türü kullanılarak
eşleşmelidir. Üç eşleşme türü
vardır: MATCH FULL, MATCH PARTIAL ve aynı zamanda
öntanımlı olan MATCH SIMPLE. MATCH FULL,
tüm yabancı anahtar sütunları boş
olmadıkça, bir çok sütunlu yabancı anahtarın
tek sütununun boş olmasına izin vermeyecektir. MATCH
SIMPLE, diğer yabancı anahtar sütunları boş
değer içermezken, bazı yabancı anahtar
sütunlarının boş değer içermesine izin
verecektir. MATCH PARTIAL ise henüz
gerçeklenmemiştir.
Ek olarak, başvurulan sütunlardaki veri
değiştiğinde, bu tablonun sütunlarının
verisi üzerinde bazı eylemler uygulanır. ON DELETE
deyimi, başvurulan tablodaki başvurulan satır
silindiğinde uygulanacak eylemi belirtmekte kullanılır.
Benzer şekilde, ON UPDATE deyimi, başvurulan tablodaki
başvurulan sütun yeni bir değerle
güncellendiğinde uygulanacak eylemi belirtmekte
kullanılır. Eğer başvurulan satır
güncellenmeksizin bu sütunu içeren satır
güncellenmişse, bir işlem yapılmaz. NO ACTION
sınaması dışında hiçbir göreli eylem,
kısıtta ertelenebileceği belirtilmiş olsa bile
ertelenemez. Her deyim için olası eylemler şunlardır:
- NO ACTION
- Silme veya güncelleme işlemini bir yabancı
anahtar kısıtı çelişkisi ürettiğinde
bunu belirten bir hatanın üretilmesini sağlar. Eğer
kısıt ertelenmişse ve başvurulan satırlar hala
mevcutsa, bu hata kısıtın sınanması
sırasında üretilecektir. Bu öntanımlı
eylemdir.
- RESTRICT
- Silme veya güncelleme işlemini bir yabancı
anahtar kısıtı çelişkisi ürettiğinde
bunu belirten bir hatanın üretilmesini sağlar.
Sınamanın ertelenebilir olmaması dışında
NO ACTION'a benzer.
- CASCADE
- Silinen satıra başvuran bir satırın
silinmesini ya da başvuran sütunun değerinin
başvurulan sütunun yeni değerine güncellenmesini
sağlar.
- SET NULL
- Başvuran sütunların boş
olmasını sağlar.
- SET DEFAULT
- Başvuran sütunlara öntanımlı
değerlerinin atanmasını sağlar.
-
Eğer başvurulan sütunlar sıkça
değişmiyorsa, yabancı anahtar sütununa bir indeks
eklemek akıllıca olur, böylece yabancı anahtar
sütunu ile ilgili göreli eylemler daha verimli uygulanabilir.
- DEFERRABLE, NOT DEFERRABLE
- Kısıtın ertelenip ertelenmeyeceğini
belirler. Ertelenebilir olmayan (not deferrable) bir kısıt her
deyimden sonra anında sınanacaktır. Ertelenebilir bir
kısıt ise, SET CONSTRAINTS [set-constraints(7)] deyimi
kullanılarak hareketin sonuna kadar ertelenebilir. NOT
DEFERRABLE öntanımlıdır. Şimdilik sadece
yabancı anahtar kısıtları bu deyimleri kabul
etmektedir. Diğer tüm kısıt türleri ertelenebilir
değildir.
- INITIALLY IMMEDIATE, INITIALLY DEFERRED
- Eğer bir kısıt ertelenebilirse, bu deyim
kısıtın öntanımlı sınama
zamanını belirtmek için kullanılabilir. Eğer
kısıt INITIALLY IMMEDIATE ise, her deyimden sonra
sınanacaktır. Eğer kısıt INITIALLY
DEFERRED ise, sadece hareketin sonunda sınanır.
Kısıtın sınama zamanı SET CONSTRAINTS
[set_constraints(7)] cümlesi ile değiştirilebilir.
- ON COMMIT
- Geçici tabloların hareket kümesinin
sonundaki davranışı, ON COMMIT kullanılarak
denetlenebilir. Üç seçeneği vardır:
- PRESERVE ROWS
- Hareketin sonunda özel bir eylem yapılmaz. Bu
öntanımlı davranıştır.
- DELETE ROWS
- Her hareket kümesinin sonunda geçici tablonun
satırları silinir. Aslında, her teslimde (commit)
özdevinimli bir TRUNCATE [truncate(7)] yapılır.
- DROP
- Geçici tablo o anki hareket kümesinin sonunda
silinecektir.
-
- TABLESPACE tabloalanı
- tabloalanı, yeni tablonun içinde
oluşturulacağı tablo alanının ismidir.
Belirtilmezse, default_tablespace yapılandırma parametresinin
değeri, bu parametrenin değeri boş dizge ise
veritabanının öntanımlı tablo alanı
kullanılır.
- USING INDEX TABLESPACE tabloalanı
- Bir UNIQUE veya PRIMARY KEY
kısıtı ile ilişkili olarak oluşturulacak
indeksdeki tablo alanının seçimini mümkün
kılar. Belirtilmezse, default_tablespace yapılandırma
parametresinin değeri, bu parametrenin değeri boş dizge ise
veritabanının öntanımlı tablo alanı
kullanılır.
EK BİLGݶ
Nesne belirteçlerinin (OID) yeni uygulamalarda kullanılması
önerilmez: mümkünse, bir
SERIAL veya başka bir
kayıt listesi üretecinin, tablonun birincil anahtarı olarak
kullanılması önerilir. Yine de uygulamanız, bir tablonun
belli bir satırını belirtmek için nesne
belirteçlerini kullanıyorsa, tablodaki nesne belirteçlerinin
sayaç başa döndükten spnra bile satırları
eşsiz olarak belirttiğinden emin olmak için tablonun oid
sütununda bir eşsizlik kısıtı
oluşturmanızı öneririz. Bu nesne belirteçlerinin
veritabanı çapında eşsiz olduğunu kabulden
kaçının; eğer veritabanı çapında eşsiz
bir belirtece ihtiyacınız varsa, tableoid ile tablonun oid
sütununu birlikte kullanın.
- İpucu:
- Birincil anahtarı olmayan tablolar için, hem bir
OID hem de bir eşsiz veri anahtarı olmaksızın,
satırları belirtmek zor olacağından, WITHOUT
OIDS kullanımı önerilmez.
PostgreSQL eşsizliği güçlendirmek için her
eşsizlik kısıtı ve her birincil anahtar
kısıtı için bir indeksi özdevinimli olarak
oluşturur. Bu suretle, birincil anahtar ütunu için
açıkça bir indeks oluşturmak gerekmez. (Daha fazla bilgi
için
CREATE INDEX [
create_index(7)] kılavuz sayfasına
bakınız.)
Eşsizlik kısıtları ve birincil anahtarlar, şimdiki
gerçeklenimde miras alınmamaktadır. Bu, eşsizlik
kısıtları ile miras almanın birleşimini tersine
işlevsiz yapar.
Bir tablo 1600 sütundan fazla sütun içeremez. (Uygulamada, demet
uzunluğu kısıtlarından dolayı etkin sınır
daha düşüktür.)
ÖRNEKLER¶
films ve distributors tablolarını oluşturmak için:
CREATE TABLE films (
code char(5) CONSTRAINT firstkey PRIMARY KEY,
title varchar(40) NOT NULL,
did integer NOT NULL,
date_prod date,
kind varchar(10),
len interval hour to minute
);
CREATE TABLE distributors (
did integer PRIMARY KEY DEFAULT nextval('serial'),
name varchar(40) NOT NULL CHECK (name <> '')
);
2 boyutlu bir dizi ile bir tablo oluşturmak için:
CREATE TABLE array_int (
vector int[][]
);
films tablosu için bir eşsiz tablo kısıtının
tanımlanması. Eşsiz tablo kısıtları tablonun bir
veya daha fazla sütunu için tanımlanabilir:
CREATE TABLE films (
code char(5),
title varchar(40),
did integer,
date_prod date,
kind varchar(10),
len interval hour to minute,
CONSTRAINT production UNIQUE(date_prod)
);
Bir sınama sütunu kısıtı tanımlamak için:
CREATE TABLE distributors (
did integer CHECK (did > 100),
name varchar(40)
);
Bir sınama tablo kısıtı tanımlamak için:
CREATE TABLE distributors (
did integer,
name varchar(40)
CONSTRAINT con1 CHECK (did > 100 AND name <> '')
);
films tablosu için bir birincil anahtar tablo kısıtının
tanımlanması. Birincil anahtar tablo kısıtları
tablonun bir ya da daha fazla sütununda tanımlanabilir:
CREATE TABLE films (
code char(5),
title varchar(40),
did integer,
date_prod date,
kind varchar(10),
len interval hour to minute,
CONSTRAINT code_title PRIMARY KEY(code,title)
);
distributors tablosu için bir birincil anahtar
kısıtının tanımlanması. Aşağıdaki
iki örnek eşdeğerdir, ilki tablo kısıtı
sözdizimini, ikincisi sütun kısıtı sözdizimini
kullanır:
CREATE TABLE distributors (
did integer,
name varchar(40),
PRIMARY KEY(did)
);
CREATE TABLE distributors (
did integer PRIMARY KEY,
name varchar(40)
);
Aşağıdaki örnekte, name sütunu için
öntanımlı değer olarak bir dizge sabiti atanmakta; did
sütununun öntanımlı değeri bir kayıt listesinin
sonraki değeri seçilerek üretilmekte; modtime sütununun
öntanımlı değeri ise satıra verinin girildiği
zaman olmaktadır.
CREATE TABLE distributors (
name varchar(40) DEFAULT 'Luso Films',
did integer DEFAULT nextval('distributors_serial'),
modtime timestamp DEFAULT current_timestamp
);
distributors tablosunda açıkça bir isim belirterek iki
NOT
NULL sütun kısıtının tanımlanması:
CREATE TABLE distributors (
did integer CONSTRAINT no_null NOT NULL,
name varchar(40) NOT NULL
);
name sütunu için bir eşsizlik kısıtının
tanımlanması:
CREATE TABLE distributors (
did integer,
name varchar(40) UNIQUE
);
Bu örnek, yukarıdaki örneğe eşdeğerdir:
CREATE TABLE distributors (
did integer,
name varchar(40),
UNIQUE(name)
);
diskvol1 tablo alanında cinemas tablosunun oluşturulması:
CREATE TABLE cinemas (
id serial,
name text,
location text
) TABLESPACE diskvol1;
UYUMLULUK¶
CREATE TABLE cümlesi SQL-92 ve SQL:1999'un bir alt kümesi ile
aşağıda belirtilenler dışında uyumludur.
Geçici tablolar¶
CREATE TEMPORARY TABLE sözdizimi bakımından SQL
standardına benzese de etkisi aynı değildir. Standartta,
geçici tablolar bir defada tanımlanır ve onlara ihtiyaç
oldukça he oturumda özdevinimli olarak mevcut olurlar
(başlangıçta boş içerikle). PostgreSQL'de ise, bir
geçici tablonun her gerekişinde oturumda
CREATE TEMPORARY
TABLE cümlesinin açıkça
çalıştırılması gerekir. Bu, farklı
oturumların aynı geçici tabloyu farklı amaçlarla
kullanabilmesine olanak sağlar. Halbuki standardın
yaklaşımı, belirtilen geçici tablo ismiyle erişilen
her kopyanın aynı tablo yapısına sahip olması
şeklinde bir sınırlama içerir.
Standardın geçici tabloların davranışıyla ilgili
tanımı geniş çapta yoksayılır. Bu noktada,
PostgreSQL'in davranışı çeşitli başka SQL
veritabanlarınınkine benzerlik gösterir.
Standardın yerel ve genel geçici tabloları ayrımsama
yöntemi, PostgreSQL'in sahip olmadığı modül
kavramına oturtulduğundan, PostgreSQL aynı yöntemi
kullanmaz. Uyumluluk uğruna, PostgreSQL bir geçici tablo
bildiriminde
GLOBAL ve
LOCAL anahtar sözcüklerini
kabul eder, ama bunların bir etkisi yoktur.
Geçici tablolar için
ON COMMIT deyimi SQL standardıyla
benzerlik gösterse de, bazı farklar vardır. Eğer
ON
COMMIT belirtilmezse, SQL öntanımlı davranış
olarak
ON COMMIT DELETE ROWS belirtiken, PostgreSQL
öntanımlı davranış olarak
ON COMMIT PRESERVE
ROWS belirtir.
ON COMMIT DROP seçeneği ise SQL
standardında yoktur.
Sütun Sınama Kısıtları¶
SQL standardı,
CHECK sütun kısıtlarının
sadece uygulandığı sütun ile ilgili olabileceğini
söyler; sadece
CHECK tablo kısıtları çok
sayıda sütun ile ilgili olabilir. PostgreSQL böyle bir
sınırlamayı zorunlu kılmaz; sütun ve tablo
kısıtlarının farksız olduğunu kabul eder.
NULL Kısıtı¶
NULL kısıtı (aslında bir kısıt
değildir) (ve simetriği olan
NOT NULL kısıtı),
bir PostgreSQL oluşumudur ve bazı başka veritabanı
sistemleriyle uyumluluk adına vardır. Bir sütun için zaten
öntanımlı olduğundan varlığı basitçe
kuru gürültüdür.
Kalıtım¶
INHERITS deyimi ile çok sayıda miras alınması bir
PostgreSQL oluşumudur. SQL:1999 standardı (ama, SQL-92 değil),
farklı bir sözdizimi ve farklı sözcüklerle tek bir
miras alma deyimi tanımlar. SQL:1999 tarzı kalıtım
henüz PostgreSQL tarafından desteklenmemektedir.
Nesne Kimlikleri¶
PostgreSQL'in OID kavramı standart değildir.
Sıfır Sütunluk Tablolar¶
PostgreSQL bir tablonun hiç sütun içermeksizin
oluşturulmasına izin verir (
CREATE TABLE foo(); gibi). Bu
bir PostgreSQL oluşumudur. SQL standardı sıfır
sütunluk tablolara izin vermez. Sıfır sütunluk tablolar
kendi başlarına çok kullanışlı olmamakla
beraber, buna izin verilmemesi,
ALTER TABLE DROP COLUMN için tuhaf
özel durumlar oluşmasına yol açar, dolayısıyla
standardın bu sınırlamasını yoksaymak daha temiz
görünür.
Tablo Alanları¶
PostgreSQL'in tablo alanı kavramı standardın bir
parçası değildir. Dolayısıyla,
TABLESPACE ve
USING INDEX TABLESPACE deyimleri birer PostgreSQL oluşumudur.
İLGİLİ BELGELER¶
ALTER TABLE [
alter_table(7)],
DROP TABLE [
drop_table(7)],
CREATE TABLESPACE [
create_tablespace(7)].
ÇEVİREN¶
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>,
Nisan 2005