CREATE TABLE AS(7) 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.

ÇEVİREN

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