

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# `CREATE SEQUENCE`
<a name="create-sequence-syntax-support"></a>

`CREATE SEQUENCE`— tentukan generator urutan baru.

**penting**  
Dalam PostgreSQL, `CACHE` menentukan adalah opsional dan default ke 1. Dalam sistem terdistribusi seperti Amazon Aurora DSQL, operasi urutan melibatkan koordinasi, dan ukuran cache 1 dapat meningkatkan overhead koordinasi di bawah konkurensi tinggi. Sementara nilai cache yang lebih besar memungkinkan nomor urut dilayani dari rentang yang telah dialokasikan secara lokal, meningkatkan throughput, nilai cadangan yang tidak digunakan dapat hilang, membuat kesenjangan dan efek pemesanan lebih terlihat. Karena aplikasi berbeda dalam sensitivitasnya terhadap pengurutan alokasi versus throughput, Amazon Aurora DSQL `CACHE` harus ditentukan secara eksplisit dan saat ini `CACHE = 1` mendukung `CACHE >= 65536` atau, memberikan perbedaan yang jelas antara perilaku alokasi yang lebih dekat dengan pembuatan sekuensial yang ketat dan alokasi yang dioptimalkan untuk beban kerja yang sangat bersamaan.  
Kapan`CACHE >= 65536`, nilai urutan tetap dijamin unik tetapi mungkin tidak dihasilkan dalam urutan peningkatan yang ketat di seluruh sesi, dan kesenjangan dapat terjadi, terutama ketika nilai yang di-cache tidak sepenuhnya dikonsumsi. Karakteristik ini konsisten dengan semantik PostgreSQL untuk urutan yang di-cache dalam penggunaan bersamaan, di mana kedua sistem menjamin nilai yang berbeda tetapi tidak menjamin urutan urutan yang ketat di seluruh sesi.  
Dalam satu sesi klien, nilai urutan mungkin tidak selalu tampak meningkat secara ketat, terutama transaksi eksplisit di luar. Perilaku ini mirip dengan penerapan PostgreSQL yang menggunakan penyatuan koneksi. Perilaku alokasi lebih dekat ke lingkungan PostgreSQL sesi tunggal dapat dicapai dengan menggunakan `CACHE = 1` atau dengan memperoleh nilai urutan dalam transaksi eksplisit.  
Dengan`CACHE = 1`, alokasi urutan mengikuti perilaku urutan non-cache PostgreSQL.  
Untuk panduan tentang cara terbaik menggunakan urutan berdasarkan pola beban kerja, lihat. [Bekerja dengan urutan dan kolom identitas](sequences-identity-columns-working-with.md)

## Sintaksis yang didukung
<a name="create-sequence-supported-syntax"></a>

```
CREATE SEQUENCE [ IF NOT EXISTS ] name CACHE cache
    [ AS data_type ]
    [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ [ NO ] CYCLE ]
    [ START [ WITH ] start ]
    [ OWNED BY { table_name.column_name | NONE } ]

where data_type is BIGINT
      and cache = 1 or cache >= 65536
```

## Deskripsi
<a name="create-sequence-description"></a>

`CREATE SEQUENCE`membuat generator nomor urut baru. Ini melibatkan pembuatan dan inisialisasi tabel baris tunggal khusus baru dengan nama. *name* Generator akan dimiliki oleh pengguna yang mengeluarkan perintah.

Jika nama skema diberikan maka urutan dibuat dalam skema yang ditentukan. Jika tidak, itu dibuat dalam skema saat ini. Nama urutan harus berbeda dari nama relasi lainnya (tabel, urutan, indeks, tampilan, tampilan terwujud, atau tabel asing) dalam skema yang sama.

Setelah urutan dibuat, Anda menggunakan fungsi`nextval`,`currval`, dan `setval` untuk beroperasi pada urutan. Fungsi-fungsi ini didokumentasikan dalam[Fungsi manipulasi urutan](sequence-functions-syntax-support.md).

Meskipun Anda tidak dapat memperbarui urutan secara langsung, Anda dapat menggunakan kueri seperti:

```
SELECT * FROM name;
```

untuk memeriksa beberapa parameter dan keadaan urutan saat ini. Secara khusus, `last_value` bidang urutan menunjukkan nilai terakhir yang dialokasikan oleh sesi apa pun. (Tentu saja, nilai ini mungkin sudah usang pada saat dicetak, jika sesi lain secara aktif melakukan `nextval` panggilan.) Parameter lain seperti *increment* dan *maxvalue* dapat diamati dalam `pg_sequences` tampilan.

## Parameter
<a name="create-sequence-parameters"></a>

**`IF NOT EXISTS`**  
Jangan melempar kesalahan jika relasi dengan nama yang sama sudah ada. Pemberitahuan dikeluarkan dalam kasus ini. Perhatikan bahwa tidak ada jaminan bahwa relasi yang ada adalah sesuatu seperti urutan yang akan dibuat — bahkan mungkin bukan urutan.

***name***  
Nama (opsional schema-qualified) dari urutan yang akan dibuat.

***data\$1type***  
Klausa opsional `AS data_type` menentukan tipe data dari urutan. Jenis yang valid adalah`bigint`. `bigint`adalah default. Tipe data menentukan nilai minimum dan maksimum default dari urutan.

***increment***  
Klausa opsional `INCREMENT BY increment` menentukan nilai yang ditambahkan ke nilai urutan saat ini untuk membuat nilai baru. Nilai positif akan membuat urutan naik, yang negatif menjadi urutan menurun. Nilai default adalah 1.

***minvalue* / `NO MINVALUE`**  
Klausa opsional `MINVALUE minvalue` menentukan nilai minimum yang dapat dihasilkan oleh urutan. Jika klausa ini tidak disediakan atau `NO MINVALUE` ditentukan, maka default akan digunakan. Default untuk urutan naik adalah 1. Default untuk urutan menurun adalah nilai minimum tipe data.

***maxvalue* / `NO MAXVALUE`**  
Klausa opsional `MAXVALUE maxvalue` menentukan nilai maksimum untuk urutan. Jika klausa ini tidak disediakan atau `NO MAXVALUE` ditentukan, maka nilai default akan digunakan. Default untuk urutan menaik adalah nilai maksimum tipe data. Default untuk urutan menurun adalah -1.

**`CYCLE` / `NO CYCLE`**  
`CYCLE`Opsi ini memungkinkan urutan untuk membungkus ketika *maxvalue* atau *minvalue* telah dicapai oleh urutan naik atau turun masing-masing. Jika batas tercapai, nomor berikutnya yang dihasilkan akan menjadi *minvalue* atau*maxvalue*, masing-masing.  
Jika `NO CYCLE` ditentukan, panggilan apa pun `nextval` setelah urutan mencapai nilai maksimumnya akan mengembalikan kesalahan. Jika tidak `NO CYCLE` ada `CYCLE` atau ditentukan, `NO CYCLE` adalah default.

***start***  
Klausa opsional `START WITH start` memungkinkan urutan dimulai di mana saja. Nilai awal default adalah *minvalue* untuk urutan naik dan *maxvalue* untuk urutan turun.

***cache***  
Klausa `CACHE cache` menentukan berapa banyak nomor urut yang akan dialokasikan sebelumnya dan disimpan dalam memori untuk akses yang lebih cepat. Nilai yang dapat diterima untuk `CACHE` Aurora DSQL adalah 1 atau nomor apa pun >= 65536. Nilai minimum adalah 1 (hanya satu nilai yang dapat dihasilkan pada satu waktu, artinya tidak ada cache).

**`OWNED BY table_name.column_name` / `OWNED BY NONE`**  
`OWNED BY`Opsi ini menyebabkan urutan dikaitkan dengan kolom tabel tertentu, sehingga jika kolom itu (atau seluruh tabelnya) dijatuhkan, urutan akan secara otomatis turun juga. Tabel yang ditentukan harus memiliki pemilik yang sama dan berada dalam skema yang sama dengan urutannya. `OWNED BY NONE`, default, menentukan bahwa tidak ada asosiasi seperti itu.

## Catatan
<a name="create-sequence-notes"></a>

Gunakan [`DROP SEQUENCE`](drop-sequence-syntax-support.md) untuk menghapus urutan.

Urutan didasarkan pada `bigint` aritmatika, sehingga kisarannya tidak dapat melebihi kisaran bilangan bulat delapan byte (-9223372036854775808 hingga 9223372036854775807).

Karena `nextval` dan `setval` panggilan tidak pernah diputar kembali, objek urutan tidak dapat digunakan jika penugasan nomor urut “tanpa celah” diperlukan.

Setiap sesi akan mengalokasikan dan menyimpan nilai urutan berturut-turut selama satu akses ke objek urutan dan meningkatkan objek urutan yang sesuai. `last_value` Kemudian, penggunaan *cache* -1 berikutnya dari `nextval` dalam sesi itu hanya mengembalikan nilai yang telah dialokasikan sebelumnya tanpa menyentuh objek urutan. Jadi, angka apa pun yang dialokasikan tetapi tidak digunakan dalam sesi akan hilang ketika sesi itu berakhir, menghasilkan “lubang” dalam urutan.

Selain itu, meskipun beberapa sesi dijamin untuk mengalokasikan nilai urutan yang berbeda, nilai mungkin dihasilkan di luar urutan ketika semua sesi dipertimbangkan. Misalnya, dengan *cache* pengaturan 10, sesi A mungkin mencadangkan nilai 1.. 10 dan kembali `nextval` = 1, maka sesi B mungkin mencadangkan nilai 11.. 20 dan kembali `nextval` = 11 sebelum sesi A dihasilkan `nextval` = 2. Jadi, dengan *cache* pengaturan satu, aman untuk mengasumsikan bahwa `nextval` nilai dihasilkan secara berurutan; dengan *cache* pengaturan yang lebih besar dari satu Anda hanya boleh berasumsi bahwa `nextval` nilainya semuanya berbeda, bukan bahwa mereka dihasilkan murni secara berurutan. Juga, `last_value` akan mencerminkan nilai terbaru yang dicadangkan oleh sesi apa pun, apakah itu belum dikembalikan oleh`nextval`.

Pertimbangan lain adalah bahwa `setval` eksekusi pada urutan seperti itu tidak akan diperhatikan oleh sesi lain sampai mereka menggunakan nilai yang telah dialokasikan sebelumnya yang telah mereka cache.

## Contoh
<a name="create-sequence-examples"></a>

Buat urutan naik yang disebut`serial`, mulai dari 101:

```
CREATE SEQUENCE serial CACHE 65536 START 101;
```

Pilih nomor berikutnya dari urutan ini:

```
SELECT nextval('serial');

 nextval
---------
     101
```

Pilih nomor berikutnya dari urutan ini:

```
SELECT nextval('serial');

 nextval
---------
     102
```

Gunakan urutan ini dalam sebuah `INSERT` perintah:

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

Setel ulang urutan ke nilai tertentu menggunakan`setval`:

```
SELECT setval('serial', 200);
SELECT nextval('serial');

 nextval
---------
     201
```

## Kompatibilitas
<a name="create-sequence-compatibility"></a>

`CREATE SEQUENCE`sesuai dengan standar SQL, dengan pengecualian berikut:
+ Memperoleh nilai berikutnya dilakukan dengan menggunakan `nextval()` fungsi alih-alih `NEXT VALUE FOR` ekspresi standar.
+ `OWNED BY`Klausul ini adalah ekstensi PostgreSQL.