Subset yang didukung dari perintah SQL di Aurora DSQL - Amazon Aurora DSQL

Amazon Aurora DSQL disediakan sebagai layanan Pratinjau. Untuk mempelajari lebih lanjut, lihat Beta dan Pratinjau di Ketentuan AWS Layanan.

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

Subset yang didukung dari perintah SQL di Aurora DSQL

Aurora DSQL tidak mendukung semua sintaks di PostgreSQL SQL yang didukung. Misalnya, CREATE TABLE di PostgreSQL memiliki sejumlah besar klausa dan parameter yang Aurora DSQL tidak mendukung. Bagian ini menjelaskan sintaks sintaks PostgreSQL yang didukung Aurora DSQL untuk perintah ini.

CREATE TABLE

CREATE TABLEmendefinisikan tabel baru.

CREATE TABLE [ IF NOT EXISTS ] table_name ( [ { column_name data_type [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option ... ] } [, ... ] ] ) where column_constraint is: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression )| DEFAULT default_expr | GENERATED ALWAYS AS ( generation_expr ) STORED | UNIQUE [ NULLS [ NOT ] DISTINCT ] index_parameters | PRIMARY KEY index_parameters | and table_constraint is: [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE [ NULLS [ NOT ] DISTINCT ] ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters | and like_option is: { INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | ALL } index_parameters in UNIQUE, and PRIMARY KEY constraints are: [ INCLUDE ( column_name [, ... ] ) ]

ALTER TABLE

ALTER TABLEmengubah definisi tabel.

ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] action [, ... ] ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME [ COLUMN ] column_name TO new_column_name ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME CONSTRAINT constraint_name TO new_constraint_name ALTER TABLE [ IF EXISTS ] name RENAME TO new_name ALTER TABLE [ IF EXISTS ] name SET SCHEMA new_schema where action is one of: ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }

BUAT TAMPILAN

CREATE VIEWmendefinisikan pandangan persisten baru. Aurora DSQL tidak mendukung tampilan sementara; hanya tampilan permanen yang didukung.

Sintaksis yang didukung

CREATE [ OR REPLACE ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ] [ WITH ( view_option_name [= view_option_value] [, ... ] ) ] AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]

Deskripsi

CREATE VIEWmendefinisikan tampilan kueri. Pandangan itu tidak terwujud secara fisik. Sebagai gantinya, kueri dijalankan setiap kali tampilan direferensikan dalam kueri.

CREATE or REPLACE VIEWmirip, tetapi jika tampilan dengan nama yang sama sudah ada, itu diganti. Kueri baru harus menghasilkan kolom yang sama yang dihasilkan oleh kueri tampilan yang ada (yaitu, nama kolom yang sama dalam urutan yang sama dan dengan tipe data yang sama), tetapi mungkin menambahkan kolom tambahan ke akhir daftar. Perhitungan yang menimbulkan kolom output mungkin berbeda.

Jika nama skema diberikan, sepertiCREATE VIEW myschema.myview ...) maka tampilan dibuat dalam skema yang ditentukan. Jika tidak, itu dibuat dalam skema saat ini.

Nama tampilan harus berbeda dari nama relasi lainnya (tabel, indeks, tampilan) dalam skema yang sama.

Parameter

CREATE VIEWmendukung berbagai parameter untuk mengontrol perilaku tampilan yang dapat diperbarui secara otomatis.

RECURSIVE

Membuat tampilan rekursif. Sintaks: CREATE RECURSIVE VIEW [ schema . ] view_name (column_names) AS SELECT ...; setara dengan. CREATE VIEW [ schema . ] view_name AS WITH RECURSIVE view_name (column_names) AS (SELECT ...) SELECT column_names FROM view_name;

Daftar nama kolom tampilan harus ditentukan untuk tampilan rekursif.

name

Nama tampilan yang akan dibuat, yang mungkin secara opsional memenuhi syarat skema. Daftar nama kolom harus ditentukan untuk tampilan rekursif.

column_name

Daftar opsional nama yang akan digunakan untuk kolom tampilan. Jika tidak diberikan, nama kolom disimpulkan dari kueri.

WITH ( view_option_name [= view_option_value] [, ... ] )

Klausa ini menentukan parameter opsional untuk tampilan; parameter berikut didukung.

  • check_option (enum)— Parameter ini mungkin salah satu local ataucascaded, dan setara dengan menentukanWITH [ CASCADED | LOCAL ] CHECK OPTION.

  • security_barrier (boolean)—Ini harus digunakan jika tampilan dimaksudkan untuk memberikan keamanan tingkat baris. Aurora DSQL saat ini tidak mendukung keamanan tingkat baris, tetapi opsi ini masih akan memaksa kondisi tampilan (dan WHERE kondisi apa pun yang menggunakan operator yang ditandai sebagaiLEAKPROOF) untuk dievaluasi terlebih dahulu.

  • security_invoker (boolean)—Opsi ini menyebabkan hubungan dasar yang mendasarinya diperiksa terhadap hak istimewa pengguna tampilan daripada pemilik tampilan. Lihat catatan di bawah ini untuk detail selengkapnya.

Semua opsi di atas dapat diubah pada tampilan yang ada menggunakanALTER VIEW.

query

A SELECT atau VALUES perintah yang akan menyediakan kolom dan baris tampilan.

  • WITH [ CASCADED | LOCAL ] CHECK OPTION— Opsi ini mengontrol perilaku tampilan yang dapat diperbarui secara otomatis. Ketika opsi ini ditentukan, INSERT dan UPDATE perintah pada tampilan akan diperiksa untuk memastikan bahwa baris baru memenuhi kondisi penentuan tampilan (yaitu, baris baru diperiksa untuk memastikan bahwa mereka terlihat melalui tampilan). Jika tidak, pembaruan akan ditolak. Jika tidak CHECK OPTION ditentukan, INSERT dan UPDATE perintah pada tampilan diizinkan untuk membuat baris yang tidak terlihat melalui tampilan. Opsi pemeriksaan berikut didukung.

  • LOCAL—Baris baru hanya diperiksa terhadap kondisi yang ditentukan secara langsung dalam tampilan itu sendiri. Setiap kondisi yang ditentukan pada tampilan dasar yang mendasarinya tidak dicentang (kecuali mereka juga menentukanCHECK OPTION).

  • CASCADED—Baris baru diperiksa terhadap kondisi tampilan dan semua tampilan dasar yang mendasarinya. Jika CHECK OPTION ditentukan, dan tidak LOCAL juga CASCADED ditentukan, maka CASCADED diasumsikan.

catatan

Ini tidak CHECK OPTION dapat digunakan dengan RECURSIVE tampilan. Hanya CHECK OPTION didukung pada tampilan yang dapat diperbarui secara otomatis.

Catatan

Gunakan DROP VIEW pernyataan untuk menghapus tampilan. Nama dan tipe data kolom tampilan harus dipertimbangkan dengan cermat.

Misalnya, tidak CREATE VIEW vista AS SELECT 'Hello World'; disarankan karena nama kolom default ke. ?column?;

Juga, tipe data kolom default ketext, yang mungkin bukan yang Anda inginkan.

Pendekatan yang lebih baik adalah secara eksplisit menentukan nama kolom dan tipe data, seperti:. CREATE VIEW vista AS SELECT text 'Hello World' AS hello;

Secara default, akses ke relasi dasar yang dirujuk dalam tampilan ditentukan oleh izin pemilik tampilan. Dalam beberapa kasus, ini dapat digunakan untuk menyediakan akses yang aman tetapi terbatas ke tabel yang mendasarinya. Namun, tidak semua pandangan aman terhadap gangguan.

  • Jika tampilan memiliki security_invoker properti yang disetel ke true, akses ke relasi dasar yang mendasarinya ditentukan oleh izin pengguna yang mengeksekusi kueri, bukan pemilik tampilan. Dengan demikian, pengguna tampilan pemanggil keamanan harus memiliki izin yang relevan pada tampilan dan hubungan dasar yang mendasarinya.

  • Jika salah satu hubungan dasar yang mendasarinya adalah tampilan pemanggil keamanan, itu akan diperlakukan seolah-olah telah diakses langsung dari kueri asli. Dengan demikian, tampilan pemanggil keamanan akan selalu memeriksa hubungan dasar yang mendasarinya menggunakan izin pengguna saat ini, bahkan jika itu diakses dari tampilan tanpa properti. security_invoker

  • Fungsi yang dipanggil dalam tampilan diperlakukan sama seperti jika mereka telah dipanggil langsung dari kueri menggunakan tampilan. Oleh karena itu, pengguna tampilan harus memiliki izin untuk memanggil semua fungsi yang digunakan oleh tampilan. Fungsi dalam tampilan dijalankan dengan hak istimewa pengguna yang mengeksekusi kueri atau pemilik fungsi, tergantung pada apakah fungsi didefinisikan sebagai SECURITY INVOKER atau. SECURITY DEFINER Misalnya, menelepon CURRENT_USER langsung dalam tampilan akan selalu mengembalikan pengguna yang memanggil, bukan pemilik tampilan. Ini tidak terpengaruh oleh security_invoker pengaturan tampilan, sehingga tampilan dengan security_invoker disetel ke false tidak setara dengan SECURITY DEFINER fungsi.

  • Pengguna yang membuat atau mengganti tampilan harus memiliki USAGE hak istimewa pada skema apa pun yang dirujuk dalam kueri tampilan, untuk mencari objek yang direferensikan dalam skema tersebut. Perhatikan, bagaimanapun, bahwa pencarian ini hanya terjadi ketika tampilan dibuat atau diganti. Oleh karena itu, pengguna tampilan hanya memerlukan USAGE hak istimewa pada skema yang berisi tampilan, bukan pada skema yang dirujuk dalam kueri tampilan, bahkan untuk tampilan pemanggil keamanan.

  • Ketika CREATE OR REPLACE VIEW digunakan pada tampilan yang ada, hanya SELECT aturan penentu tampilan, ditambah WITH ( ... ) parameter apa pun dan CHECK OPTION yang diubah. Properti tampilan lainnya, termasuk kepemilikan, izin, dan aturan non-Pilih, tetap tidak berubah. Anda harus memiliki tampilan untuk menggantinya (ini termasuk menjadi anggota peran pemilik).

Tampilan yang dapat diperbarui

Tampilan sederhana dapat diperbarui secara otomatis: sistem akan memungkinkanINSERT,UPDATE, dan DELETE pernyataan yang akan digunakan pada tampilan dengan cara yang sama seperti pada tabel biasa. Tampilan dapat diperbarui secara otomatis jika memenuhi semua kondisi berikut:

  • Tampilan harus memiliki tepat satu entri dalam FROM daftarnya, yang harus berupa tabel atau tampilan lain yang dapat diperbarui.

  • Definisi tampilan tidak boleh berisiWITH,,DISTINCT,GROUP BY, HAVINGLIMIT, atau OFFSET klausa di tingkat atas.

  • Definisi tampilan tidak boleh berisi operasi set (UNION,INTERSECT, atauEXCEPT) di tingkat atas.

  • Daftar pilih tampilan tidak boleh berisi agregat, fungsi jendela, atau fungsi set-return.

Tampilan yang dapat diperbarui secara otomatis mungkin berisi campuran kolom yang dapat diperbarui dan yang tidak dapat diperbarui. Kolom dapat diperbarui jika itu adalah referensi sederhana ke kolom yang dapat diperbarui dari hubungan dasar yang mendasarinya. Jika tidak, kolom tersebut hanya-baca, dan kesalahan terjadi jika UPDATE pernyataan INSERT atau mencoba untuk menetapkan nilai untuk itu.

Untuk tampilan yang dapat diperbarui secara otomatis, sistem mengonversi pernyataan apa pun INSERTUPDATE, atau pada tampilan menjadi DELETE pernyataan yang sesuai pada relasi dasar yang mendasarinya. INSERTpernyataan dengan ON CONFLICT UPDATE klausa didukung sepenuhnya.

Jika tampilan yang dapat diperbarui secara otomatis berisi WHERE kondisi, kondisi membatasi baris relasi dasar mana yang tersedia untuk dimodifikasi oleh UPDATE dan DELETE pernyataan pada tampilan. Namun, an UPDATE dapat mengubah baris sehingga tidak lagi memenuhi WHERE kondisi, membuatnya tidak terlihat melalui tampilan. Demikian pula, sebuah INSERT perintah berpotensi menyisipkan baris hubungan dasar yang tidak memenuhi WHERE kondisi, membuatnya tidak terlihat melalui tampilan. ON CONFLICT UPDATEjuga dapat mempengaruhi baris yang ada yang tidak terlihat melalui tampilan.

Anda dapat menggunakan CHECK OPTION untuk mencegah INSERT dan UPDATE perintah membuat baris yang tidak terlihat melalui tampilan.

Jika tampilan yang dapat diperbarui secara otomatis ditandai dengan properti security_barrier, semua kondisi tampilan (dan WHERE kondisi apa pun yang menggunakan operator yang ditandai sebagaiLEAKPROOF) selalu dievaluasi sebelum kondisi apa pun yang ditambahkan oleh pengguna tampilan. Perhatikan bahwa karena ini, baris yang pada akhirnya tidak dikembalikan (karena tidak melewati WHERE kondisi pengguna) mungkin masih terkunci. Anda dapat menggunakan EXPLAIN untuk melihat kondisi mana yang diterapkan pada tingkat relasi (dan karenanya tidak mengunci baris) dan mana yang tidak.

Tampilan yang lebih kompleks yang tidak memenuhi semua kondisi ini adalah hanya-baca secara default: sistem tidak mengizinkan penyisipan, pembaruan, atau penghapusan pada tampilan.

catatan

Pengguna yang melakukan penyisipan, pembaruan, atau penghapusan pada tampilan harus memiliki hak sisipan, pembaruan, atau hapus yang sesuai pada tampilan. Secara default, pemilik tampilan harus memiliki hak istimewa yang relevan pada relasi dasar yang mendasarinya, sementara pengguna yang melakukan pembaruan tidak memerlukan izin apa pun pada relasi dasar yang mendasarinya. Namun, jika tampilan memiliki security_invoker disetel ke true, pengguna yang melakukan pembaruan, bukan pemilik tampilan, harus memiliki hak istimewa yang relevan pada relasi dasar yang mendasarinya.

Contoh

Untuk membuat tampilan yang terdiri dari semua film komedi.

CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy';

Ini akan membuat tampilan yang berisi kolom yang ada di film tabel pada saat pembuatan tampilan. Meskipun * digunakan untuk membuat tampilan, kolom yang ditambahkan kemudian ke tabel tidak akan menjadi bagian dari tampilan.

Buat tampilan denganLOCAL CHECK OPTION.

CREATE VIEW pg_comedies AS SELECT * FROM comedies WHERE classification = 'PG' WITH CASCADED CHECK OPTION;

Ini akan membuat tampilan yang memeriksa baris kind dan classification baris baru.

Buat tampilan dengan campuran kolom yang dapat diperbarui dan tidak dapat diperbarui.

CREATE VIEW comedies AS SELECT f.*, country_code_to_name(f.country_code) AS country, (SELECT avg(r.rating) FROM user_ratings r WHERE r.film_id = f.id) AS avg_rating FROM films f WHERE f.kind = 'Comedy';

Pandangan ini akan mendukungINSERT,UPDATE, danDELETE. Semua kolom dari tabel film akan dapat diperbarui, sedangkan kolom yang dihitung country dan hanya avg_rating akan dibaca.

CREATE RECURSIVE VIEW public.nums_1_100 (n) AS VALUES (1) UNION ALL SELECT n+1 FROM nums_1_100 WHERE n < 100;
catatan

Meskipun nama tampilan rekursif memenuhi syarat skema dalam hal iniCREATE, referensi diri internalnya tidak memenuhi syarat skema. Ini karena nama Common Table Expression (CTE) yang dibuat secara implisit tidak dapat memenuhi syarat skema.

Kompatibilitas

CREATE OR REPLACE VIEWadalah ekstensi bahasa PostgreSQL. WITH ( ... )Klausul ini juga merupakan perpanjangan, seperti juga pandangan penghalang keamanan dan pandangan pemanggil keamanan. Aurora DSQL mendukung ekstensi bahasa ini.

ALTER VIEW

ALTER VIEWPernyataan ini memungkinkan mengubah berbagai properti dari tampilan yang ada, dan Aurora DSQL mendukung semua sintaks PostgreSQL untuk perintah ini.

Sintaksis yang didukung

ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER VIEW [ IF EXISTS ] name RENAME [ COLUMN ] column_name TO new_column_name ALTER VIEW [ IF EXISTS ] name RENAME TO new_name ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] ) ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )

Deskripsi

ALTER VIEWmengubah berbagai properti tambahan tampilan. (Jika Anda ingin mengubah kueri penentu tampilan, gunakanCREATE OR REPLACE VIEW.) Anda harus memiliki pandangan untuk digunakanALTER VIEW. Untuk mengubah skema tampilan, Anda juga harus memiliki CREATE hak istimewa pada skema baru. Untuk mengubah pemilik, Anda harus SET ROLE dapat memiliki peran baru, dan peran itu harus memiliki CREATE hak istimewa pada skema tampilan. Pembatasan ini memberlakukan bahwa mengubah pemilik tidak melakukan apa pun yang tidak dapat Anda lakukan dengan menjatuhkan dan membuat ulang tampilan.)

Parameter

Parameter ALTER VIEW

name

Nama (opsional schema-qualified) dari tampilan yang ada.

column_name

Nama baru untuk kolom yang ada.

IF EXISTS

Jangan melempar kesalahan jika tampilan tidak ada. Pemberitahuan dikeluarkan dalam kasus ini.

SET/DROP DEFAULT

Formulir ini mengatur atau menghapus nilai default untuk kolom. Nilai default kolom tampilan diganti ke dalam UPDATE perintah apa pun INSERT atau yang targetnya adalah tampilan. Oleh karena itu, default tampilan akan diutamakan daripada nilai default apa pun dari hubungan yang mendasarinya.

new_owner

Nama pengguna dari pemilik tampilan yang baru.

new_name

Nama baru untuk tampilan.

new_schema

Skema baru untuk tampilan.

SET (view_option_name [= view_option_value] [,...])
RESET (view_option_name [,...])

Menyetel atau mengatur ulang opsi tampilan. Opsi yang didukung saat ini ada di bawah ini.

  • check_option (enum)—Mengubah opsi centang tampilan. Nilainya harus local ataucascaded.

  • security_barrier (boolean)—Mengubah properti penghalang keamanan tampilan. Nilai harus berupa nilai Boolean, seperti true ataufalse.

  • security_invoker (boolean)—Mengubah properti penghalang keamanan tampilan. Nilai harus berupa nilai Boolean, seperti true ataufalse.

Catatan

Untuk alasan PG historis, ALTER TABLE dapat digunakan dengan tampilan juga; tetapi satu-satunya varian ALTER TABLE yang diizinkan dengan tampilan setara dengan yang ditampilkan sebelumnya.

Contoh

Mengganti nama tampilan foo menjadibar.

ALTER VIEW foo RENAME TO bar;

Melampirkan nilai kolom default ke tampilan yang dapat diperbarui.

CREATE TABLE base_table (id int, ts timestamptz); CREATE VIEW a_view AS SELECT * FROM base_table; ALTER VIEW a_view ALTER COLUMN ts SET DEFAULT now(); INSERT INTO base_table(id) VALUES(1); -- ts will receive a NULL INSERT INTO a_view(id) VALUES(2); -- ts will receive the current time
Kompatibilitas

ALTER VIEWadalah ekstensi PostgreSQL dari standar SQL yang didukung Aurora DSQL.

TAMPILAN DROP

DROP VIEWPernyataan menghapus tampilan yang ada. Aurora DSQL mendukung sintaks PostgreSQL lengkap untuk perintah ini.

Sintaksis yang didukung

DROP VIEW [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

Deskripsi

DROP VIEWmenjatuhkan tampilan yang ada. Untuk menjalankan perintah ini, Anda harus menjadi pemilik tampilan.

Parameter

IF EXISTS

Jangan melempar kesalahan jika tampilan tidak ada. Pemberitahuan dikeluarkan dalam kasus ini.

name

Nama (opsional schema-qualified) dari tampilan yang akan dihapus..

CASCADE

Secara otomatis menjatuhkan objek yang bergantung pada tampilan (seperti tampilan lain), dan pada gilirannya semua objek yang bergantung pada objek tersebut.

RESTRICT

Menolak untuk menjatuhkan tampilan jika ada objek yang bergantung padanya. Ini adalah opsi default.

Contoh

DROP VIEW kinds;

Kompatibilitas

Perintah ini sesuai dengan standar SQL, kecuali bahwa standar hanya memungkinkan satu tampilan untuk dijatuhkan per perintah, dan terlepas dari IF EXISTS opsi, yang merupakan ekstensi PostgreSQL yang didukung Aurora DSQL.