CREATE VIEW - Amazon Aurora DSQL

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

CREATE VIEW

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 memunculkan 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

Menciptakan 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.

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. CHECK OPTIONIni hanya 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, CREATE VIEW vista AS SELECT 'Hello World'; tidak 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

  • 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.

  • 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.

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';

Buat tampilan denganLOCAL CHECK OPTION.

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

Buat tampilan rekursif.

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

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.