Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
CREATE SEQUENCE
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.
KapanCACHE >= 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.
DenganCACHE = 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
Sintaksis yang didukung
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
CREATE SEQUENCEmembuat 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 fungsinextval,currval, dan setval untuk beroperasi pada urutan. Fungsi-fungsi ini didokumentasikan dalamFungsi manipulasi urutan.
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
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_type-
Klausa opsional
ASmenentukan tipe data dari urutan. Jenis yang valid adalahdata_typebigint.bigintadalah default. Tipe data menentukan nilai minimum dan maksimum default dari urutan. increment-
Klausa opsional
INCREMENT BYmenentukan 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.increment minvalue/NO MINVALUE-
Klausa opsional
MINVALUEmenentukan nilai minimum yang dapat dihasilkan oleh urutan. Jika klausa ini tidak disediakan atauminvalueNO MINVALUEditentukan, maka default akan digunakan. Default untuk urutan naik adalah 1. Default untuk urutan menurun adalah nilai minimum tipe data. maxvalue/NO MAXVALUE-
Klausa opsional
MAXVALUEmenentukan nilai maksimum untuk urutan. Jika klausa ini tidak disediakan ataumaxvalueNO MAXVALUEditentukan, maka nilai default akan digunakan. Default untuk urutan menaik adalah nilai maksimum tipe data. Default untuk urutan menurun adalah -1. CYCLE/NO CYCLE-
CYCLEOpsi ini memungkinkan urutan untuk membungkus ketikamaxvalueatauminvaluetelah dicapai oleh urutan naik atau turun masing-masing. Jika batas tercapai, nomor berikutnya yang dihasilkan akan menjadiminvalueataumaxvalue, masing-masing.Jika
NO CYCLEditentukan, panggilan apa punnextvalsetelah urutan mencapai nilai maksimumnya akan mengembalikan kesalahan. Jika tidakNO CYCLEadaCYCLEatau ditentukan,NO CYCLEadalah default. start-
Klausa opsional
START WITHmemungkinkan urutan dimulai di mana saja. Nilai awal default adalahstartminvalueuntuk urutan naik danmaxvalueuntuk urutan turun. cache-
Klausa
CACHEmenentukan berapa banyak nomor urut yang akan dialokasikan sebelumnya dan disimpan dalam memori untuk akses yang lebih cepat. Nilai yang dapat diterima untukcacheCACHEAurora 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_nameOWNED BY NONE-
OWNED BYOpsi 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
Gunakan DROP SEQUENCE 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 olehnextval.
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
Buat urutan naik yang disebutserial, 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 menggunakansetval:
SELECT setval('serial', 200); SELECT nextval('serial'); nextval --------- 201
Kompatibilitas
CREATE SEQUENCEsesuai dengan standar SQL, dengan pengecualian berikut:
-
Memperoleh nilai berikutnya dilakukan dengan menggunakan
nextval()fungsi alih-alihNEXT VALUE FORekspresi standar. -
OWNED BYKlausul ini adalah ekstensi PostgreSQL.