Amazon Aurora DSQL disediakan sebagai layanan Pratinjau. Untuk mempelajari lebih lanjut, lihat Beta dan Pratinjau
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 TABLE
mendefinisikan 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 TABLE
mengubah 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 VIEW
mendefinisikan 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 VIEW
mendefinisikan tampilan kueri. Pandangan itu tidak terwujud secara fisik. Sebagai gantinya, kueri dijalankan setiap kali tampilan direferensikan dalam kueri.
CREATE or REPLACE VIEW
mirip, 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 VIEW
mendukung 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 satulocal
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 (danWHERE
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 menggunakan
ALTER VIEW
. -
query
-
A
SELECT
atauVALUES
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
danUPDATE
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 tidakCHECK OPTION
ditentukan,INSERT
danUPDATE
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. JikaCHECK OPTION
ditentukan, dan tidakLOCAL
jugaCASCADED
ditentukan, makaCASCADED
diasumsikan.
catatan
Ini tidak
CHECK OPTION
dapat digunakan denganRECURSIVE
tampilan. HanyaCHECK 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, meneleponCURRENT_USER
langsung dalam tampilan akan selalu mengembalikan pengguna yang memanggil, bukan pemilik tampilan. Ini tidak terpengaruh olehsecurity_invoker
pengaturan tampilan, sehingga tampilan dengansecurity_invoker
disetel ke false tidak setara denganSECURITY 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 memerlukanUSAGE
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, hanyaSELECT
aturan penentu tampilan, ditambahWITH ( ... )
parameter apa pun danCHECK 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 berisi
WITH
,,DISTINCT
,GROUP BY
,HAVING
LIMIT
, atauOFFSET
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 INSERT
UPDATE
, atau pada tampilan menjadi DELETE
pernyataan yang sesuai pada relasi dasar yang mendasarinya. INSERT
pernyataan 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 UPDATE
juga 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 VIEW
adalah 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 VIEW
Pernyataan 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 VIEW
mengubah 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 punINSERT
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 haruslocal
ataucascaded
. -
security_barrier (boolean)
—Mengubah properti penghalang keamanan tampilan. Nilai harus berupa nilai Boolean, sepertitrue
ataufalse
. -
security_invoker (boolean)
—Mengubah properti penghalang keamanan tampilan. Nilai harus berupa nilai Boolean, sepertitrue
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 VIEW
adalah ekstensi PostgreSQL dari standar SQL yang didukung Aurora DSQL.
TAMPILAN DROP
DROP VIEW
Pernyataan 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 VIEW
menjatuhkan 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.