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

İ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