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

PostgreSQL                                                                                       CREATE TABLE(7)