CREATE TABLE AS(7)

İSİM
CREATE TABLE AS - bir sorgunun sonuçlarından yeni bir tablo tanımlar

KULLANIM
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE tablo_ismi
    [ (sütun_ismi [, ...] ) ] [ [ WITH | WITHOUT ] OIDS ]
    AS sorgu

AÇIKLAMA
CREATE TABLE AS bir tablo oluşturur ve bir SELECT cümlesi ile ya da hazırlanmış bir SELECT cümlesini çalıştıran bir EXECUTE komutu ile hesaplanan veriyi kullanarak bu tabloyu doldurur. Tablonun sütunları için SELECT çıktısındaki veri türleri ve sütun isimleri (sütun isimleri listesi açıkça belirtilmedikçe) kullanılır.

CREATE TABLE AS tabloyu bir sanal tablo oluşturur gibi oluşturur, ama bunu biraz farklı yapar: yeni bir tablo oluşturduktan sonra tabloyu doldurmak için sorguyu bir defalığına işleme sokar. Yeni tablo, sorgulanan kaynak tabloda sonradan yapılan değişiklikleri izlemeyecektir. Bir sanal tabloda ise her sorgulanışında kendini oluşturan SELECT cümlesi yeniden işleme sokulur.

PARAMETRELER
GLOBAL veya LOCAL
    Uyumluluk içindirler ve yoksayılırlar. Ayıntılı bilgi için CREATE TABLE [create_table(7)] kılavuz sayfasına bakınız.

TEMPORARY veya TEMP
    Belirtilmişse, tablo bir geçici tablo olarak oluşturulur. Ayıntılı bilgi için CREATE TABLE [create_table(7)] kılavuz sayfasına bakınız.

tablo_ismi
    Oluşturulacak tablonun ismi (şema nitelemeli olabilir).

sütun_ismi
    Yeni tablodaki bir sütunun ismi. Eğer sütun isimleri verilmezse, sorgunun çıktısındaki sütun isimleri kullanılır. Eğer tablo bir EXECUTE komutu ile oluşturuluyorsa, bir sütun listesi belirtilemez.

WITH OIDS, WITHOUT OIDS
    Oluşturulan tablonun nesne kimliklerini içerip içermeyeceğini belirtirler. Bunların hiçbiri belirtilmezse, default_with_oids yapılandırma değişkeninin değeri kullanılır.

sorgu
    Bir sorgu cümlesi (bir SELECT cümlesi ya da hazırlanmış bir SELECT cümlesini çalıştıran bir EXECUTE komutu). Sorgu cümlesinde kullanılabilecek sözdizimleri için, SELECT [select(7)] ve EXECUTE [execute(7)] kılavuz sayfalarına bakınız.

EK BİLGİ
Bu komut, işlevsellik bakımından SELECT INTO [select_into(7)] cümlesine benzer, fakat sözdizimi SELECT INTO sözdiziminden daha az karışık olduğundan bu komut tercih edilir. Dahası, CREATE TABLE AS, SELECT INTO işlevselliğini daha üst seviyeden sunar.

PostgreSQL 8.0 öncesinde, CREATE TABLE AS'in oluşturduğu tablo nesne kimliklerini daima içerirdi. PostgreSQL 8.0 sürümünden itibaren kullanıcı oluşturulan tablonun nesne kimliklerini içerip içermeyeceğini belirtebilmektedir. Eğer kullanıcı seçimini belirtmezse, default_with_oids yapılandırma değişkeninin değeri kullanılır. Bu değişkenin şimdilik öntanımlı değeri true olmasına rağmen öntanımlı değer ileride değiştirilebilir. Bu bakımdan, uygulamalarınızda CREATE TABLE AS ile tablo oluşturuyorsanız, PostgreSQL'in ileri sürümlerindeki olası değişikliklerden etkilenmemek için WITH OIDS seçeneğini açıkça belirtmelisiniz.

ÖRNEKLER
filmler tablosundan sadece son girdileri alarak son_filmler tablosunu oluşturmak için:

    CREATE TABLE son_filmler AS
      SELECT * FROM filmler WHERE tarih >= '2002-01-01';

UYUMLULUK
CREATE TABLE AS SQL:2003 standardında belirtilmiştir. Komutun PostgreSQL gerçeklemesi standarttan biraz farklıdır:

·   Standart altsorgunun parantez içine alınmasını gerektirir, PostgreSQL'de ise parantezler isteğe bağlıdır.

·   Standart bir ON COMMIT deyimi içerir; PostgreSQL'de bu henüz gerçeklenmemiştir.

·   Standart bir WITH DATA deyimi içerir; PostgreSQL'de bu henüz gerçeklenmemiştir.

İLGİLİ BELGELER
CREATE TABLE [create_table(7)], EXECUTE [execute(7)], SELECT [select(7)], SELECT INTO [select_into(7)].

ÇEVİREN
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Nisan 2005