CREATE SEQUENCE(7)

İSİM
CREATE SEQUENCE - yeni bir kayıt listesi üreteci tanımlar

KULLANIM
CREATE [ TEMPORARY | TEMP ] SEQUENCE isim [ INCREMENT [ BY ] artış ]
    [ MINVALUE asgarideğer | NO MINVALUE ]
    [ MAXVALUE azami_değer | NO MAXVALUE ]
    [ START [ WITH ] başlangıç ]
    [ CACHE kayıt_sayısı ] [ [ NO ] CYCLE ]

AÇIKLAMA
CREATE SEQUENCE yeni bir kayıt listesi üreteci oluşturur. Bunu isim isimli yeni bir özel tek satırlık tabloyu oluşturarak ve ilklendirirerek yapar. Komutu kullanan üretecin sahibi olur.

Bir şema ismi verilmişse, kayıt listesi belirtilen şemada oluşturulur. Aksi takdirde, o anki şemada oluşturulur. Geçici kayıt listeleri özel bir şema içinde mevcuttur, dolayısıyla bir geçici kayıt listesi oluştururken bir şema ismi belirtilmemelidir. Satır listesinin ismi aynı şemadaki başka bir kayıt listesi, tablo, indeks ya da sanal tablo ile çakışmayacak şekilde seçilmelidir.

Bir kayıt listesi oluşturulduktan sonra, üzerinde nextval, currval ve setval işlevleri ile işlem yapabilirsiniz. Bu işlevlerin açıklamalarını http://belgeler.org/uygulamalar/pgsql/pgsql-functions-sequence.html adresinde bulabilirsiniz.

Bir kayıt listesini doğrudan göncelleyemezsiniz, bir kayıt listesinin o anki durumunu ve parametrelerini incelemek için şöyle bir sorgu kullanabilirsiniz:

    SELECT * FROM isim;

Kısmen, kayıt listesinin last_value alanı herhangi bir oturum tarafından ayrılmış son değeri gösterir. (Şüphesiz, başka oturumlar o an nextval çağrıları yapıyorsa, aldığınız değer atıl olmuş olabilir.)

PARAMETRELER
TEMPORARY veya TEMP
    Belirtilmişse, kayıt listesi nesnesi sadece bu oturum için oluşturulur ve oturum sonunda silinir. Aynı isimdeki kalıcı kayıt listelerinin varlığı durumunda, bunlara şema nitelemeli isimlerle erişilmedikçe, geçici şemanın varlığı durumunda görünür olmazlar.

isim
    Oluşturulacak kayıt listesinin ismi (şema nitelemeli olabilir).

artış
    İsteğe bağlı INCREMENT BY artış deyimi, yeni değeri oluşturmak üzere o anki sıra değerine eklenecek değeri belirtmek için kullanılır. Bir pozitif değer bir artan değerli liste, negatif bir değer ise azalan değerli bir liste oluşturacaktır. Öntanımlı değer 1'dir.

asgarideğer, NO MINVALUE
    İsteğe bağlı MINVALUE asgarideğer deyimi üretilen bir kayıt listesinin asgari sıra değerini belirlemekte kullanılır. Belirtilmezse ya da NO MINVALUE belirtilirse, öntanımlı sıra değeri kullanılır. Öntanımlı değer artan değerli bir liste için 1, azalan değerli bir liste için 2-1'dir.

azami_değer, NO MAXVALUE
    İsteğe bağlı MAXVALUE azami_değer deyimi üretilen bir kayıt listesinin azami sıra değerini belirlemekte kullanılır. Belirtilmezse ya da NO MAXVALUE belirtilirse, öntanımlı sıra değeri kullanılır. Öntanımlı değer artan değerli bir liste için 2-1, azalan değerli bir liste için -1'dir.

başlangıç
    İsteğe bağlı START WITH başlangıç deyimi kayıt listesinin başlangıcını belirtmek için kullanılır. Öntanımlı başlangıç değeri, artan değerli bir liste için asgarideğer, azalan değerli bir liste için azami_değer'dir.

satır_sayısı
    İsteğe bağlı CACHE satır_sayısı deyimi daha hızlı erişim için sıralı listeyi saklamak üzere bellekte yer ayrılmasını ve ilklendirilmesini sağlar. En az değer 1'dir ve bu ayrıca öntanımlıdır.

CYCLE, NO CYCLE
    CYCLE seçeneği, artan bir değerli bir listede azami_değer, azalan değerli bir listede asgarideğer aşıldığında tekrar başlangıca dönülmesini sağlar.

    NO CYCLE belirtilmişse, bir nextval çağrısı bir listenin sonunda yapıldığında bir hata döndürecektir. Ne CYCLE ne de NO CYCLE belirtilmişse, NO CYCLE öntanımlıdır.

EK BİLGİ
Bir kayıt listesini silmek için DROP SEQUENCE kullanın.

Satır listeleri bigint aritmetiğine tabidirler, dolayısıyla listedeki satır sayısı sekiz baytlık tamsayı genişliğini (-9223372036854775808 .. 9223372036854775807) aşamaz. Bazı eski platformlarda sekiz baytlık tamsayılara derleyici desteği olmadığından mecburen integer aritmetiği (-2147483648 .. +2147483647 aralığı) kullanılır.

Çok sayıda oturum tarafından ortaklaşa kullanılacak bir kayıt listesi için kayıt_sayısı 1'den büyük seçilirse, umulmadık sonuçlar ortaya çıkabilir. Herhangi bir oturum bu sıralama değişkenine eriştiği her bir defa için bir dizi değere yer ayırıp, orada saklar ve sıralama nesnesine ait last_value değerini bir artırır. Bundan sonraki kayıt_sayısı-1 defalık erişimde mevcut kayıt listesine dokunmadan değerler için önceden ayrılmış yerler kullanılır. Ayrılmış ama kullanılmamış yerler var ise bunlar boşa gider ve oturum bittiğinde kayıt listesinde boşluklar kalmış olur.

Bunun yanında farklı oturumlar için farklı sıralama değerleri belirlenmesi garanti edilmiş olmasına rağmen bütün oturumlar dikkate alındığında bunlar bir sıra takip etmeyebilir. Örneğin, kayıt_sayısı için 10 belirtilmiş olsun, A oturumu 1 den 10 a kadar sıra değeri ayırmış ve nextval=1 döndürmüş olsun. Daha sonra B oturumu da 11 den 20 ye kadar sıra değeri ayırmış olsun ve A oturumunun değer döndürmesini beklemeden nextval=11 döndürmüş olsun. Burada, kayıt_sayısı=1 değeri için döndürülen nextval değerleri bir sıra takip ederken 1'den büyük kayıt_sayısı değerleri için bu garanti edilemez, sadece üretilen değerlerin birbirinden farklı değerler olacakları garanti edilebilir. Ayrıca last_value değeri de henüz nextval tarafından döndürülmüş olmasa da herhangi bir oturum tarafından ayrılmış son değeri içerir.

Diğer bir önemli husus, ayrılarak belleğe alınmış değerler kullanılana kadar üzerinde setval uygulanan bir oturumun diğer oturumlar tarafından uyarılmayacağıdır.

ÖRNEKLER
101'den başlayacak ve artan sıralı olacak serial isimli kayıt listesininin oluşturulması:

    CREATE SEQUENCE serial START 101;

Bir kayıt listesinden sonraki kaydın seçilmesi:

    SELECT nextval('serial');

    nextval
    ---------
        114

Bu kayıt listesinin bir INSERT cümlesinde kullanılması:

    INSERT INTO distributors VALUES (nextval('serial'), 'nothing');

Kayıt listesi değerinin bir COPY FROM sonrasında güncellenmesi:

    BEGIN;
    COPY distributors FROM 'input_file';
    SELECT setval('serial', max(id)) FROM distributors;
    END;

UYUMLULUK
CREATE SEQUENCE, SQL:2003'de belirtilmiştir. PostgreSQL aşağıdaki durumlar dışında standartla uyumludur:
·   Standardın AS <veri türü> ifadesi desteklenmemektedir.

·   Sonraki değerin sağlanması, standardın NEXT VALUE FOR ifadesi yerine nextval() işlevi kullanılarak yapılır.

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