CREATE SEQUENCE - Amazon Aurora DSQL

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 AS data_type menentukan tipe data dari urutan. Jenis yang valid adalahbigint. bigintadalah 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

CYCLEOpsi 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 ataumaxvalue, 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 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-alih NEXT VALUE FOR ekspresi standar.

  • OWNED BYKlausul ini adalah ekstensi PostgreSQL.