Dokumen ini adalah bagian dari sebuah seri yang menyajikan informasi dan panduan penting terkait perencanaan dan pelaksanaan migrasi database Oracle® 11g/12c ke Cloud SQL untuk PostgreSQL versi 12. Selain bagian penyiapan pendahuluan, seri ini mencakup bagian berikut:
- Memigrasikan pengguna Oracle ke Cloud SQL untuk PostgreSQL: Terminologi dan fungsionalitas
- Memigrasikan pengguna Oracle ke Cloud SQL untuk PostgreSQL: Jenis data, pengguna, dan tabel
- Memigrasikan pengguna Oracle ke Cloud SQL untuk PostgreSQL: Kueri, serta prosedur, fungsi, dan pemicu tersimpan (dokumen ini)
- Memigrasikan pengguna Oracle ke Cloud SQL untuk PostgreSQL: Keamanan, operasi, pemantauan, dan logging
- Memigrasikan pengguna dan skema Oracle Database ke Cloud SQL untuk PostgreSQL
Kueri
Oracle dan Cloud SQL untuk PostgreSQL mendukung standar ANSI SQL. Oleh karena itu, migrasi pernyataan SQL secara umum sangat mudah dilakukan, cukup dengan menggunakan elemen sintaksis dasar (tanpa perlu menentukan fungsi skalar atau fitur tambahan Oracle lainnya). Bagian berikut membahas elemen kueri yang umum di Oracle dan padanan terkaitnya di Cloud SQL untuk PostgreSQL.
Sintaksis SELECT dan FROM dasar
| Nama fitur atau nama sintaksis di Oracle | Ringkasan atau implementasi di Oracle | Dukungan di Cloud SQL untuk PostgreSQL | Solusi terkait atau alternatif di Cloud SQL untuk PostgreSQL |
|---|---|---|---|
| Sintaksis dasar SQL untuk pengambilan data | SELECT
|
Ya | SELECT
|
SELECT untuk cetak output |
SELECT 1 FROM DUAL
|
Ya | SELECT 1
|
| Alias kolom | SELECT COL1 AS C1
|
Ya | SELECT COL1 AS C1
|
| Kepekaan huruf besar/kecil nama tabel | Tidak peka huruf besar/kecil (misalnya, nama tabel dapat orders dan/atau ORDERS). |
Ya | Nama tidak peka huruf besar/kecil kecuali jika diapit tanda kutip (misalnya, orders dan ORDERS diperlakukan sama, sedangkan "orders" dan "ORDERS" diperlakukan berbeda) |
Untuk mengetahui detail selengkapnya tentang sintaksis SELECT di Cloud SQL untuk PostgreSQL, lihat dokumentasi.
Tabel virtual inline
- Tabel virtual inline (disebut juga tabel turunan) adalah pernyataan
SELECT, yang terletak di klausaFROMdan digunakan sebagai subkueri. - Tabel virtual inline dapat membantu menyederhanakan kueri yang kompleks dengan menghapus penghitungan gabungan atau menghilangkan operasi join, sekaligus menggabungkan beberapa kueri terpisah menjadi satu kueri yang disederhanakan.
- Catatan konversi: Tabel virtual inline di Oracle tidak memerlukan penggunaan alias, sedangkan Cloud SQL untuk PostgreSQL mengharuskan alias spesifik untuk setiap tabel virtual inline.
Tabel berikut menampilkan contoh konversi dari Oracle ke Cloud SQL untuk PostgreSQL, sebagai tabel virtual inline.
| Oracle 11g/12c | Cloud SQL untuk PostgreSQL 12 |
|---|---|
SQL> SELECT FIRST_NAME,
Outputnya mirip dengan berikut:
FIRST_NAME DEPARTMENT_ID SALARY DATE_COL
|
Tanpa alias untuk tabel virtual inline: postgres=> SELECT FIRST_NAME,
Menambahkan alias ke tabel virtual inline: postgres=> SELECT FIRST_NAME,
Outputnya mirip dengan berikut:
first_name | department_id | salary | date_col
|
Pernyataan JOIN
Pernyataan JOIN Oracle didukung oleh pernyataan JOIN Cloud SQL untuk PostgreSQL. Namun, penggunaan operator join (+) Oracle tidak didukung oleh Cloud SQL untuk PostgreSQL. Untuk memperoleh hasil yang sama, Anda harus mengonversi outer join ke sintaksis SQL standar.
Tabel berikut menampilkan contoh konversi JOIN.
| Jenis JOIN di Oracle | Didukung oleh Cloud SQL untuk PostgreSQL | Sintaksis JOIN di Cloud SQL untuk PostgreSQL |
|---|---|---|
INNER JOIN
|
Ya | SELECT E.FIRST_NAME, D.DEPARTMENT_NAME
|
CROSS JOIN
|
Ya | SELECT E.FIRST_NAME, D.DEPARTMENT_NAME
|
FULL JOIN
[ OUTER ]
|
Ya | SELECT E.FIRST_NAME, D.DEPARTMENT_NAME
|
LEFT JOIN [ OUTER ]
|
Ya | SELECT E.FIRST_NAME, D.DEPARTMENT_NAME
|
RIGHT JOIN
[ OUTER ]
|
Ya | SELECT E.FIRST_NAME, D.DEPARTMENT_NAME
|
SUBQUERY
|
Ya | SELECT E.FIRST_NAME, D.DEPARTMENT_NAME
|
UNION, UNION ALL, INTERSECT, dan MINUS
Cloud SQL untuk PostgreSQL mendukung operator UNION, UNION ALL, dan INTERSECT Oracle. Operator MINUS tidak didukung. Namun, Cloud SQL untuk PostgreSQL mengimplementasikan operator EXCEPT yang setara dengan operator MINUS di Oracle. Selain itu, Cloud SQL untuk PostgreSQL mendukung operator INTERSECT ALL dan EXCEPT ALL yang tidak didukung oleh Oracle.
UNION: Melampirkan kumpulan hasil dari dua pernyataanSELECTatau lebih dan menghapus data duplikat.UNION ALL: Melampirkan kumpulan hasil dari dua pernyataanSELECTatau lebih tanpa menghapus data duplikat.INTERSECT: Menampilkan irisan dari dua pernyataanSELECTatau lebih hanya jika data ada di kedua set data. Data duplikat tidak akan dihapus.INTERSECT ALL(khusus Cloud SQL untuk PostgreSQL): Menampilkan irisan dari dua pernyataanSELECTatau lebih hanya jika data ada di kedua set data.MINUS (EXCEPTdi Cloud SQL untuk PostgreSQL): Membandingkan dua pernyataanSELECTatau lebih, dengan hanya menampilkan baris berbeda dari kueri pertama yang tidak ditampilkan oleh pernyataan lainnya.EXCEPT ALL(khusus Cloud SQL untuk PostgreSQL): Membandingkan dua pernyataanSELECTatau lebih, dengan hanya menampilkan baris dari kueri pertama yang tidak ditampilkan oleh pernyataan lainnya tanpa menghapus data duplikat.
Catatan konversi
Saat mengonversi operator MINUS dari Oracle ke Cloud SQL untuk PostgreSQL, gunakan operator EXCEPT.
Contoh
| Fungsi di Oracle | Implementasi di Oracle | Dukungan di Cloud SQL untuk PostgreSQL | Solusi terkait atau alternatif di Cloud SQL untuk PostgreSQL |
|---|---|---|---|
UNION
|
SELECT COL1 FROM TBL1
|
Ya | SELECT COL1 FROM TBL1
|
UNION ALL
|
SELECT COL1 FROM TBL1
|
Ya | SELECT COL1 FROM TBL1
|
INTERSECT
|
SELECT COL1 FROM TBL1
|
Ya | SELECT COL1 FROM TBL1
|
MINUS
|
SELECT COL1 FROM TBL1
|
Ya (Convert MINUS ke EXCEPT di PostgreSQL) |
SELECT COL1 FROM TBL1
|
Fungsi skalar (baris tunggal) dan grup
Cloud SQL untuk PostgreSQL menyediakan daftar lengkap fungsi skalar (baris tunggal) dan agregasi. Beberapa fungsi Cloud SQL untuk PostgreSQL mirip dengan fungsi padanannya di Oracle (berdasarkan nama dan fungsionalitas, atau dengan nama berbeda tetapi fungsionalitas sama). Meskipun beberapa fungsi Cloud SQL untuk PostgreSQL dapat memiliki nama yang sama dengan fungsi padanannya di Oracle, terkadang fungsionalitasnya berbeda.
Tabel berikut menjelaskan elemen di Oracle dan Cloud SQL untuk PostgreSQL yang setara berdasarkan nama dan fungsionalitas (ditentukan oleh "Ya") dan elemen yang perlu dikonversi (semua kasus selain "Ya").
Fungsi karakter
| Fungsi di Oracle | Spesifikasi atau implementasi fungsi di Oracle | Setara dengan Cloud SQL untuk PostgreSQL | Fungsi terkait di Cloud SQL untuk PostgreSQL | Spesifikasi atau implementasi fungsi di Cloud SQL untuk PostgreSQL |
|---|---|---|---|---|
CONCAT
|
Menampilkan str1 yang disambung dengan str2: CONCAT('A', 1) = A1
|
Ya | CONCAT
|
Setara dengan Oracle:CONCAT('A', 1) = A1
|
LOWER/UPPER
|
Menampilkan char, dengan huruf kecil atau huruf besar semua:LOWER('SQL') = sql
|
Ya | LOWER/UPPER
|
Setara dengan Oracle:LOWER('SQL') = sql
|
LPAD/RPAD
|
Menampilkan expr1, dengan padding kiri atau kanan hingga sepanjang n karakter dengan urutan karakter dalam expr2:LPAD('A',3,'*') = **A
|
Ya | LPAD/RPAD
|
Setara dengan Oracle:LPAD('A',3,'*') = **A
|
SUBSTR
|
Tampilkan sebagian char, mulai dari posisi karakter, dengan panjang substring karakter: SUBSTR('PostgreSQL', 8, 3)
|
Sebagian | SUBSTR
|
Setara dengan Oracle saat posisi awalnya adalah bilangan positif.SUBSTR('PostgreSQL', 8, 3)
Jika bilangan negatif diberikan sebagai posisi awal di Oracle, operasi substring akan dijalankan dari akhir string. Hal ini berbeda dengan di Cloud SQL untuk PostgreSQL. Gunakan fungsi RIGHT sebagai pengganti jika menginginkan perilaku seperti di Oracle. |
INSTR
|
Menampilkan posisi (indeks) sebuah string tertentu dari string yang diberikan:INSTR('PostgreSQL', 'e')
|
Tidak | T/A | Cloud SQL untuk PostgreSQL tidak memiliki fungsi instr bawaan. Fungsi instr yang kompatibel dengan Oracle dapat diimplementasikan menggunakan PL/pgSQL. |
REPLACE
|
Menampilkan karakter dengan setiap kemunculan string penelusuran diganti dengan string pengganti : REPLACE('ORADB', 'ORA', 'PostgreSQL')
|
Sebagian | REPLACE
|
Parameter string pengganti di Oracle bersifat opsional, sedangkan di Cloud SQL untuk PostgreSQL bersifat wajib. Jika parameter ini dihilangkan, Oracle akan menghapus semua kemunculan string penelusuran. Perilaku yang sama dapat dicapai di Cloud SQL untuk PostgreSQL dengan memberikan string kosong sebagai string pengganti.REPLACE('ORADB', 'ORA', 'PostgreSQL')
|
TRIM
|
Memangkas karakter di awal atau di akhir (atau keduanya) dari string:TRIM(both '-' FROM '-PostgreSQL-')
|
Ya | TRIM
|
Setara dengan Oracle:TRIM(both '-' FROM '-PostgreSQL-')
|
LTRIM/RTRIM
|
Menghapus semua karakter dari ujung kiri atau kanan string yang muncul dalam penelusuran: LTRIM(' PostgreSQL', ' ')
|
Ya | LTRIM/RTRIM
|
Setara dengan Oracle:LTRIM(' PostgreSQL', ' ')
= PostgreSQL
|
ASCII
|
Menampilkan representasi desimal dalam himpunan karakter database dari karakter pertama char: ASCII('A') = 65
|
Ya | ASCII
|
Setara dengan Oracle:ASCII('A') = 65
|
CHR
|
Menampilkan nilai kode ASCII, yang merupakan nilai numerik antara 0 dan 225, hingga sebuah karakter:CHR(65) = A
|
Ya | CHAR
|
Setara dengan Oracle:CHR(65) = A
|
LENGTH
|
Menampilkan panjang string tertentu:LENGTH ('PostgreSQL') = 10
|
Ya | LENGTH
|
Setara dengan Oracle:LENGTH ('PostgreSQL') = 10
|
REGEXP_REPLACE
|
Mencari pola ekspresi reguler dalam string:REGEXP_REPLACE('John', '[hn].', '1') = Jo1
|
Ya | REGEXP_REPLACE
|
Setara dengan Oracle:REGEXP_REPLACE('John', '[hn].', '1') = Jo1
|
REGEXP_SUBSTR
|
Memperluas fungsionalitas fungsi SUBSTR dengan mencari pola ekspresi reguler dalam string: REGEXP_SUBSTR('https://console.cloud.google.com/sql/instances','https://([[:alnum:]]+\.?){3,4}/?')
|
Tidak | T/A | Gunakan REGEXP_MATCH PostgreSQL untuk mendapatkan fungsionalitas serupa. |
REGEXP_COUNT
|
Menampilkan frekuensi kemunculan pola di sebuah string sumber. | Tidak | T/A | Gunakan REGEXP_MATCH PostgreSQL untuk mencapai fungsionalitas serupa. |
REGEXP_INSTR
|
Mencari pola ekspresi reguler dalam posisi string (indeks). |
Tidak | T/A | Mengonversi fungsionalitas menjadi lapisan aplikasi. |
REVERSE
|
Menampilkan string terbalik.REVERSE('PostgreSQL') = LQSergtsoP
|
Ya | REVERSE
|
Setara dengan Oracle:REVERSE('PostgreSQL') = LQSergtsoP
|
Fungsi numerik
| Fungsi di Oracle | Spesifikasi atau implementasi fungsi di Oracle | Setara dengan Cloud SQL untuk PostgreSQL | Fungsi terkait di Cloud SQL untuk PostgreSQL | Spesifikasi atau implementasi fungsi di Cloud SQL untuk PostgreSQL |
|---|---|---|---|---|
ABS
|
Nilai absolut n: ABS(-4.6) = 4.6
|
Ya | ABS
|
Setara dengan Oracle:ABS(-4.6) = 4.6
|
CEIL
|
Menampilkan bilangan bulat terkecil yang lebih besar daripada atau sama dengan n: CEIL(21.4) = 22
|
Ya | CEIL
|
Setara dengan Oracle:CEIL(21.4) = 22
|
FLOOR
|
Menampilkan bilangan bulat terbesar yang sama dengan atau lebih kecil daripada n: FLOOR(-23.7) = -24
|
Ya | FLOOR
|
Setara dengan Oracle:FLOOR(-23.7) = -24
|
MOD
|
Menampilkan sisa m dibagi n:MOD(10, 3) = 1
|
Ya | MOD
|
Setara dengan Oracle:MOD(10, 3) = 1
|
ROUND
|
Menampilkan n yang dibulatkan ke tempat bilangan bulat di sebelah kanan tanda desimal:ROUND(1.39, 1) = 1.4
|
Ya | ROUND
|
Setara dengan Oracle:ROUND(1.39, 1) = 1.4
|
TRUNC (angka) |
Menampilkan n1 yang dipangkas hingga n2 di belakang koma:TRUNC(99.999) = 99
|
Ya | TRUNCATE
(angka) |
Setara dengan Oracle:TRUNC(99.999) = 99
|
Fungsi DateTime
| Fungsi di Oracle | Spesifikasi atau implementasi fungsi di Oracle | Setara dengan Cloud SQL untuk PostgreSQL | Fungsi terkait di Cloud SQL untuk PostgreSQL | Spesifikasi atau implementasi fungsi di Cloud SQL untuk PostgreSQL |
|---|---|---|---|---|
SYSDATE
|
Menampilkan tanggal dan waktu saat ini yang ditetapkan untuk sistem operasi tempat server database berada:SELECT SYSDATE FROM DUAL
|
Sebagian dengan nama fungsi dan format berbeda | CURRENT_TIMESTAMP
|
CURRENT_TIMESTAMP akan menampilkan format tanggal dan waktu yang berbeda dengan fungsi SYSDATE di Oracle:SELECT CURRENT_TIMESTAMP
|
SYSTIMESTAMP
|
Menampilkan tanggal sistem, termasuk detik pecahan dan zona waktu:SELECT SYSTIMESTAMP FROM DUAL
|
Sebagian dengan nama fungsi berbeda | CURRENT_TIMESTAMP
|
Cloud SQL untuk PostgreSQL menampilkan format tanggal/waktu yang berbeda dengan di Oracle. Pemformatan tanggal diperlukan agar sama dengan format tanggal/waktu asli:SELECT CURRENT_TIMESTAMP
|
LOCAL TIMESTAMP
|
Menampilkan tanggal dan waktu saat ini di zona waktu sesi dalam nilai dengan jenis data TIMESTAMP: SELECT LOCALTIMESTAMP
FROM DUAL
|
Sebagian dengan format tanggal/waktu berbeda | LOCAL
TIMESTAMP
|
Cloud SQL untuk PostgreSQL menampilkan format tanggal/waktu yang berbeda dengan di Oracle. Pemformatan tanggal diperlukan agar sama dengan format tanggal/waktu asli:SELECT LOCALTIMESTAMP
|
CURRENT_DATE
|
Menampilkan tanggal saat ini dalam zona waktu sesi: SELECT CURRENT_DATE FROM DUAL
|
Sebagian dengan format tanggal/waktu berbeda | CURRENT_
DATE
|
Cloud SQL untuk PostgreSQL menampilkan format tanggal/waktu yang berbeda dengan di Oracle. Pemformatan tanggal diperlukan agar sama dengan format tanggal/waktu asli:SELECT CURRENT_DATE
|
CURRENT_TIMESTAMP
|
Menampilkan tanggal dan waktu saat ini dalam zona waktu sesi: SELECT CURRENT_TIMESTAMP FROM DUAL
|
Sebagian dengan format tanggal/waktu berbeda | CURRENT_TIMESTAMP
|
Cloud SQL untuk PostgreSQL menampilkan format tanggal/waktu yang berbeda dengan di Oracle. Pemformatan tanggal diperlukan agar sama dengan format tanggal/waktu asli:SELECT CURRENT_TIMESTAMP FROM DUAL
|
ADD_MONTHS
|
Menampilkan tanggal plus bulan dalam bilangan bulat:ADD_MONTHS(SYSDATE, 1)
|
Tidak | T/A | Untuk mendapatkan fungsionalitas yang sama di Cloud SQL untuk PostgreSQL, gunakan operator + / - dan tentukan interval waktunya:SELECT CURRENT_TIMESTAMP + INTERVAL '1 MONTH'
|
EXTRACT (bagian tanggal) |
Menampilkan nilai kolom tanggal/waktu tertentu dari ekspresi tanggal/waktu atau interval: EXTRACT(YEAR FROM DATE '2019-01-31')
|
Ya | EXTRACT (bagian tanggal) |
Setara dengan Oracle:EXTRACT(YEAR FROM DATE '2019-01-31')
|
LAST_DAY
|
Menampilkan tanggal dari hari terakhir bulan itu yang berisi tanggal yang ditentukan:LAST_DAY('01-JAN-2019')
|
Tidak | T/A | Sebagai solusinya, gunakan operator DATE_TRUNC dan + untuk menghitung hari terakhir bulan itu. Pemformatan tanggal diperlukan agar sama dengan format tanggal/waktu asli:SELECT DATE_TRUNC('MONTH', DATE '01-JAN-2019') + INTERVAL '1 MONTH -1 DAY'
|
MONTH_BETWEEN
|
Menampilkan jumlah bulan antara tanggal date1 dan date2:MONTHS_BETWEEN(SYSDATE, SYSDATE-60)
|
Sebagian dengan format tanggal/waktu Fungsi yang berbeda |
AGE
|
Fungsi AGE Cloud SQL untuk PostgreSQL menampilkan interval antara dua stempel waktu:AGE(DATE '01-JAN-2019', DATE '01-JAN-2019' - 60)
Untuk mendapatkan nilai yang sama dengan fungsi MONTH_BETWEEN di Oracle, diperlukan konversi yang lebih spesifik. |
TO_CHAR (tanggal/waktu) |
Mengonversi jenis data tanggal/waktu atau stempel waktu menjadi nilai dengan jenis data VARCHAR2dalam format yang ditentukan oleh format tanggal: TO_CHAR(SYSDATE,'DD-MM-YYYY HH24:MI:SS')
|
Ya | To_CHAR
|
Setara dengan Oracle:TO_CHAR(CURRENT_TIMESTAMP,'DD-MM-YYYY HH24:MI:SS');
|
Fungsi encoding dan decoding
| Fungsi di Oracle | Spesifikasi atau implementasi fungsi di Oracle | Setara dengan Cloud SQL untuk PostgreSQL | Fungsi terkait di Cloud SQL untuk PostgreSQL | Spesifikasi atau implementasi fungsi di Cloud SQL untuk PostgreSQL |
|---|---|---|---|---|
DECODE
|
Membandingkan ekspresi dengan setiap nilai penelusuran satu per satu menggunakan pernyataan IF-THEN-ELSE. |
Tidak | CASE
|
Gunakan pernyataan CASE Cloud SQL untuk PostgreSQL guna mendapatkan fungsionalitas yang mirip. |
DUMP
|
Menampilkan nilai VARCHAR2 yang berisi kode jenis data, panjang dalam byte, dan representasi internal ekspresi. |
Tidak | T/A | Tidak didukung. |
ORA_HASH
|
Menghitung nilai hash untuk ekspresi tertentu. | Tidak | MD5 / SHA224 / SHA256 / SHA385 / SHA512
|
Gunakan fungsi MD5 Cloud SQL untuk PostgreSQL untuk checksum 128-bit, atau fungsi SHA untuk checksum 160-bit, guna menghasilkan nilai hash. |
Fungsi konversi
| Fungsi di Oracle | Spesifikasi atau implementasi fungsi di Oracle | Setara dengan Cloud SQL untuk PostgreSQL | Fungsi terkait di Cloud SQL untuk PostgreSQL | Spesifikasi atau implementasi fungsi di Cloud SQL untuk PostgreSQL |
|---|---|---|---|---|
CAST
|
Mengonversi satu jenis data bawaan atau nilai berjenis koleksi menjadi jenis data bawaan atau nilai berjenis koleksi lainnya: CAST('1' as int) + 1
|
Sebagian | CAST
|
Fungsi CAST Cloud SQL untuk PostgreSQL mirip dengan fungsionalitas CAST Oracle. Namun, dalam kasus tertentu, fungsi ini harus disesuaikan karena terdapat perbedaan jenis data antara kedua database:CAST('1' as int) + 1
|
CONVERT
|
Mengonversi string karakter dari satu himpunan karakter ke himpunan karakter lainnya: CONVERT (
'Ä Ê Í Õ Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1')
|
Sebagian | CONVERT
|
Fungsi CONVERT Cloud SQL untuk PostgreSQL menampilkan nilai bytea, yang merupakan string biner, bukan VARCHAR atau TEXT. Himpunan karakter yang didukung oleh PostgreSQL juga berbeda dengan di Oracle.CONVERT('Ä Ê Í Õ Ø A B C D E', 'UTF8', 'LATIN1')
|
TO_CHAR (string/numerik) |
Fungsi ini mengonversi angka atau tanggal menjadi string: TO_CHAR(22.73,'$99.9')
|
Sebagian | TO_CHAR
|
Fungsi TO_CHAR Cloud SQL untuk PostgreSQL memiliki fungsionalitas yang mirip dengan di Oracle. Cloud SQL untuk PostgreSQL mendukung daftar string pemformatan yang sedikit berbeda. Secara default, Cloud SQL untuk PostgreSQL menyimpan satu kolom untuk tanda, sehingga akan ada spasi sebelum bilangan positif. Spasi ini dapat disembunyikan dengan menggunakan imbuhan FM:TO_CHAR(22.73,'FM$99.9')
|
TO_DATE
|
Fungsi TO_DATE Oracle mengonversi string menjadi tanggal berdasarkan format tanggal/waktu spesifik sumbernya:TO_DATE('2019/01/01', 'yyyy-mm-dd')
|
Sebagian | TO_DATE
|
Fungsi TO_DATE Cloud SQL untuk PostgreSQL memiliki fungsionalitas yang mirip dengan di Oracle. Cloud SQL untuk PostgreSQL mendukung daftar string pemformatan yang sedikit berbeda:TO_DATE('2019/01/01', 'yyyy-mm-dd')
|
TO_NUMBER
|
Mengonversi ekspresi menjadi nilai dengan jenis data NUMBER:
TO_NUMBER('01234')
|
Sebagian | TO_NUMBER
|
Fungsi TO_NUMBER di Cloud SQL untuk PostgreSQL mengharuskan string pemformatan sebagai input, tetapi hal itu opsional di Oracle:TO_NUMBER('01234','99999')
Alternatifnya adalah menggunakan fungsi CAST untuk konversi yang tidak memerlukan string pemformatan kompleks:CAST('01234' AS NUMERIC)
|
Fungsi SELECT bersyarat
| Fungsi di Oracle | Spesifikasi atau implementasi fungsi di Oracle | Setara dengan Cloud SQL untuk PostgreSQL | Fungsi terkait di Cloud SQL untuk PostgreSQL | Spesifikasi atau implementasi fungsi di Cloud SQL untuk PostgreSQL |
|---|---|---|---|---|
CASE
|
Pernyataan CASE memilih dari serangkaian kondisi dan menjalankan pernyataanyang terkait dengan sintaksis berikut: CASE WHEN condition THEN result
[WHEN ...] [ELSE result]
END
|
Ya | CASE
|
Setara dengan Oracle:CASE WHEN condition THEN result
[WHEN ...] [ELSE result]
END
|
Fungsi null
| Fungsi di Oracle | Spesifikasi atau implementasi fungsi di Oracle | Setara dengan Cloud SQL untuk PostgreSQL | Fungsi terkait di Cloud SQL untuk PostgreSQL | Spesifikasi atau implementasi fungsi di Cloud SQL untuk PostgreSQL |
|---|---|---|---|---|
COALESCE
|
Menampilkan ekspresi bukan null pertama dalam daftar ekspresi: COALESCE(null, '1', 'a')
|
Ya | COALESCE
|
Setara dengan Oracle:COALESCE(null, '1', 'a')
|
NULLIF
|
Membandingkan expr1 dan expr2. Jika keduanya sama, fungsi akan menampilkan null. Jika keduanya tidak sama, fungsi akan menampilkan expr1:
NULLIF('1', '2')
|
Ya | NULLIF
|
Setara dengan Oracle:NULLIF('1', '2')
|
NVL
|
Mengganti null (ditampilkan sebagai kosong) dengan string dalam hasil kueri:
NVL(null, 'a')
|
Tidak | COALESCE
|
Sebagai alternatif, gunakan fungsi COALESCE:COALESCE(null, 'a')
|
NVL2
|
Menentukan nilai yang ditampilkan oleh kueri berdasarkan nilai ekspresi tertentu, yakni null atau bukan null. |
Tidak | COALESCE
|
Sebagai alternatif, gunakan fungsi COALESCE:COALESCE(null, 1, 'a')
|
Fungsi lingkungan dan ID
| Fungsi di Oracle | Spesifikasi atau implementasi fungsi di Oracle | Setara dengan Cloud SQL untuk PostgreSQL | Fungsi terkait di Cloud SQL untuk PostgreSQL | Spesifikasi atau implementasi fungsi di Cloud SQL untuk PostgreSQL |
|---|---|---|---|---|
SYS_GUID
|
Menghasilkan dan menampilkan ID unik global (nilai RAW) yang terdiri atas 16 byte: SELECT SYS_GUID() FROM DUAL
|
Sebagian dengan nama fungsi dan format berbeda | UUID_GENERATE_V4
|
Cloud SQL untuk PostgreSQL mendukungekstensi uuid-ossp yang menyediakan daftar fungsi penghasil UUID seperti UUID_GENERATE_V4:SELECT UUID_GENERATE_v4()
= eaf356a6-2847-478d-af3b-6883f5ac6af2 |
UID
|
Menampilkan bilangan bulat yang mengidentifikasi pengguna sesi secara unik (pengguna yang login): SELECT UID FROM DUAL
|
Tidak | T/A | T/A |
USER
|
Menampilkan nama dari nama pengguna sesi saat ini:SELECT USER FROM DUAL
|
Ya | USER
|
Setara dengan Oracle:SELECT USER;
|
USERENV
|
Menampilkan informasi tentang sesi pengguna saat ini dengan konfigurasi parameter saat ini:SELECT USERENV('LANGUAGE') FROM DUAL
|
Tidak | T/A | Meskipun tidak ada fungsi USERENV yang setara di Cloud SQL untuk PostgreSQL, parameter individual seperti USERENV('SID') dapat diambil menggunakan fungsi informasi sistem seperti PG_BACKGROUND_PID(). |
ROWID
|
Server Oracle menetapkan ROWID unik ke setiap baris di setiap tabel untuk mengidentifikasi baris tersebut dalam tabel. ROWID adalah alamat baris yang berisi nomor objek data, blok data baris, posisi baris, dan file data. |
Sebagian dengan nama fungsi berbeda | ctid
|
ctid di Cloud SQL untuk PostgreSQL mengidentifikasi lokasi fisik versi baris dalam tabelnya, yang mirip dengan fungsi ROWID di Oracle. |
ROWNUM
|
Menampilkan angka yang menunjukkan urutan pemilihan baris oleh Oracle dari tabel atau tabel gabungan. | Tidak | LIMIT or ROW_NUMBER()
|
Alih-alih membatasi jumlah hasil yang ditampilkan oleh kueri menggunakan ROWNUM, Cloud SQL untuk PostgreSQL mendukung LIMIT dan OFFSET untuk keperluan serupa.Fungsi jendela ROW_NUMBER() dapat menjadi solusi pengganti dari fungsi ROWNUM Oracle dalam skenario lainnya. Namun, pengurutan hasil dan delta performa harus dipertimbangkan sebelum menggunakan fungsi tersebut sebagai pengganti. |
Fungsi agregat (grup)
| Fungsi di Oracle | Spesifikasi atau implementasi fungsi di Oracle | Setara dengan Cloud SQL untuk PostgreSQL | Fungsi terkait di Cloud SQL untuk PostgreSQL | Spesifikasi atau implementasi fungsi di Cloud SQL untuk PostgreSQL |
|---|---|---|---|---|
AVG
|
Menampilkan nilai rata-rata kolom atau ekspresi. | Ya | AVG
|
Setara dengan Oracle |
COUNT
|
Menampilkan jumlah baris yang ditampilkan oleh kueri. | Ya | COUNT
|
Setara dengan Oracle |
COUNT
(DISTINCT)
|
Menampilkan jumlah nilai unik dalam kolom atau ekspresi. | Ya | COUNT
|
Setara dengan Oracle |
MAX
|
Menampilkan nilai maksimum kolom atau ekspresi. | Ya | MAX
|
Setara dengan Oracle |
MIN
|
Menampilkan nilai minimum kolom atau ekspresi. | Ya | MIN
|
Setara dengan Oracle |
SUM
|
Menampilkan jumlah nilai kolom atau ekspresi. | Ya | SUM
|
Setara dengan Oracle |
LISTAGG
|
Menampilkan data dalam setiap grup berdasarkan satu baris yang ditentukan dalam klausa ORDER BY dengan menggabungkan nilai kolom pengukuran: SELECT LISTAGG(
|
Tidak | STRING_AGG
|
Gunakan fungsi STRING_AGG Cloud SQL untuk PostgreSQL untuk menampilkan hasil yang mirip dengan yang di Oracle, antisipasi perbedaan sintaksis pada kasus tertentu:SELECT STRING_AGG(DEPARTMENT_NAME, ', ' order by DEPARTMENT_NAME) FROM DEPARTMENTS;
|
Fetch di Oracle 12c
| Fungsi di Oracle | Spesifikasi atau implementasi fungsi di Oracle | Setara dengan Cloud SQL untuk PostgreSQL | Fungsi terkait di Cloud SQL untuk PostgreSQL | Spesifikasi atau implementasi fungsi di Cloud SQL untuk PostgreSQL |
|---|---|---|---|---|
FETCH
|
Mengambil baris data dari kumpulan hasil kueri multi-baris:SELECT * FROM
|
Tidak | LIMIT | Gunakan klausa LIMIT di Cloud SQL untuk PostgreSQL guna mengambil kumpulan data tertentu saja:SELECT * FROM
EMPLOYEES
LIMIT 10;
|
Pemfilteran, operator, dan subkueri dasar
Selama konversi, pemfilteran, fungsi operator, dan subkueri dasar relatif mudah ditangani, hanya perlu sedikit atau bahkan tanpa upaya tambahan.
Catatan konversi
Periksa dan tangani format tanggal karena format Oracle dan Cloud SQL untuk PostgreSQL menampilkan hasil default yang berbeda:
- Fungsi
SYSDATEOracle secara default menampilkan01-AUG-19. - Fungsi
CURRENT_DATEPostgreSQL secara default menampilkan2019-08-01(tanpa waktu meskipun dengan pemformatan). Untuk mengambil tanggal dan waktu saat ini, gunakan fungsiCURRENT_TIMESTAMPyang secara default menampilkan 01-08-2019 00:00:00.000000+00. - Format tanggal dan waktu dapat ditetapkan menggunakan fungsi
TO_CHARCloud SQL untuk PostgreSQL.
| Fungsi atau subkueri di Oracle | Setara dengan Cloud SQL untuk PostgreSQL | Fungsi atau subkueri terkait di Cloud SQL untuk PostgreSQL | Spesifikasi atau implementasi fungsi di Cloud SQL untuk PostgreSQL |
|---|---|---|---|
EXISTS/
NOT EXISTS
|
Ya | EXISTS/
NOT EXISTS
|
SELECT * FROM DEPARTMENTS D
|
IN/NOT IN
|
Ya | IN/NOT IN
|
SELECT * FROM DEPARTMENTS D
|
LIKE/NOT LIKE
|
Ya | LIKE/NOT LIKE
|
SELECT * FROM EMPLOYEES
|
BETWEEN/
NOT BETWEEN
|
Ya | BETWEEN/
|
SELECT * FROM EMPLOYEES
|
AND/OR
|
Ya | AND/OR
|
SELECT * FROM EMPLOYEES
|
SubQuery
|
Ya | SubQuery
|
Cloud SQL untuk PostgreSQL mendukung subkueri di level SELECT, untuk pernyataan JOIN dan untuk pemfilteran dalam klausa WHERE/AND:-- SELECT SubQuery
|
| Operator | Ya | Operator | Cloud SQL untuk PostgreSQL mendukung semua operator dasar:> | >= | < | <= | = | <> | !=
|
Fungsi analitik (atau fungsi jendela dan peringkat)
Fungsi analitik Oracle memperluas fungsionalitas operasi SQL standar dengan menyediakan kapabilitas untuk menghitung nilai agregat berdasarkan sekumpulan baris (misalnya RANK(), ROW_NUMBER(), FIRST_VALUE()). Fungsi ini diterapkan ke data yang dipartisi secara logis dalam lingkup ekspresi kueri tunggal.
Fungsi tersebut umum digunakan dalam data warehousing, bersama dengan laporan dan analisis business intelligence.
Catatan konversi
Cloud SQL untuk PostgreSQL mendukung banyak fungsi analitik. Fungsi tersebut dikenal di Postgres sebagai fungsi agregat dan fungsi jendela. Jika aplikasi Anda menggunakan fungsi kurang umum yang tidak didukung di Postgres, Anda harus mencari ekstensi yang didukung atau memindahkan logika ke lapisan aplikasi.
Tabel berikut menampilkan daftar fungsi analitik yang paling umum di Oracle.
| Kelompok fungsi | Fungsi terkait | Didukung oleh Cloud SQL untuk PostgreSQL |
|---|---|---|
| Analitik dan peringkat | RANK
|
Ya (Kecuali AVERAGE_RANK) |
| Hierarkis | CONNECT BY
|
Tidak |
| Lag | LAG
|
Ya (khusus LAG dan LEAD) |
Ekspresi tabel umum (CTE)
CTE menyediakan cara mengimplementasikan logika kode berurutan untuk menggunakan kembali kode SQL yang mungkin terlalu kompleks atau tidak efisien untuk banyak penggunaan. CTE dapat dinamai dan kemudian digunakan berkali-kali di berbagai bagian pernyataan SQL menggunakan klausa WITH. CTE didukung baik oleh Oracle maupun Cloud SQL untuk PostgreSQL.
Contoh
| Oracle dan Cloud SQL untuk PostgreSQL | |
|---|---|
WITH DEPT_COUNT
|
Pernyataan MERGE
Pernyataan MERGE (atau UPSERT) menyediakan cara untuk menentukan pernyataan SQL tunggal yang melakukan operasi DML secara bersyarat dalam satu operasi MERGE, bukan satu operasi DML, yang berjalan terpisah. Pernyataan ini memilih data dari tabel sumber, kemudian melakukan beberapa operasi DML pada tabel target secara otomatis dengan menentukan struktur logika. Fitur ini membantu Anda menghindari penggunaan pernyataan insert, update, atau delete secara berulang-ulang. Perhatikan bahwa MERGE adalah pernyataan deterministik. Artinya, baris yang telah diproses oleh pernyataan MERGE tidak dapat diproses lagi menggunakan pernyataan MERGE yang sama.
Catatan konversi
Tidak seperti Oracle, Cloud SQL untuk PostgreSQL tidak mendukung fungsi MERGE. Guna menyimulasikan sebagian fungsionalitas MERGE, Cloud SQL untuk PostgreSQL menyediakan pernyataan INSERT ... ON CONFLICT DO UPDATE:
INSERT… ON CONFLICT DO UPDATE: Jika baris yang disisipkan menyebabkan pelanggaran unik atau error pelanggaran batasan pengecualian, tindakan alternatif yang ditentukan dalam klausaON CONFLICT DO UPDATEakan diambil, misalnya:
INSERT INTO tbl (a,b,c) VALUES (1,2,3)
ON CONFLICT (a) DO UPDATE SET b = 2, c = 3;
Solusi lainnya adalah mengonversi fungsionalitas MERGE menjadi prosedur tersimpan untuk mengelola operasi DML, menggunakan perintah INSERT, UPDATE, dan DELETE dengan penanganan pengecualian serta duplikasi.
Petunjuk pernyataan SQL
Oracle menyediakan banyak petunjuk kueri SQL yang memungkinkan pengguna memengaruhi perilaku pengoptimal, dengan tujuan menghasilkan rencana eksekusi kueri yang lebih efisien. Cloud SQL untuk PostgreSQL tidak menawarkan tingkat pernyataan SQL yang sebanding, yang memberikan petunjuk terkait mekanisme untuk memengaruhi pengoptimal.
Untuk memengaruhi rencana kueri yang dipilih oleh perencana kueri, Cloud SQL untuk PostgreSQL menyediakan sekumpulan parameter konfigurasi yang dapat diterapkan di tingkat sesi. Efek dari parameter konfigurasi ini berkisar mulai dari mengaktifkan/menonaktifkan metode akses tertentu, hingga menyesuaikan konstanta biaya perencana. Misalnya, pernyataan berikut menonaktifkan penggunaan jenis rencana pemindaian berurutan, seperti pemindaian tabel lengkap, oleh perencana kueri:
SET ENABLE_SEQSCAN=FALSE;
Untuk menyesuaikan estimasi biaya pengambilan halaman disk acak oleh perencana (defaultnya adalah 4.0), gunakan pernyataan berikut:
SET RANDOM_PAGE_COST=2.0;
Mengurangi nilai ini akan menyebabkan Cloud SQL untuk PostgreSQL lebih memilih pemindaian indeks. Hal sebaliknya akan terjadi jika nilai ini diperbesar.
Catatan konversi
Karena ada perbedaan mendasar antara pengoptimal Oracle dan Cloud SQL untuk PostgreSQL, serta fakta bahwa Cloud SQL untuk PostgreSQL tidak mendukung petunjuk kueri SQL gaya Oracle, sebaiknya hapus semua petunjuk kueri saat Anda bermigrasi ke Cloud SQL untuk PostgreSQL. Kemudian, lakukan pengujian performa yang ketat melalui alat Cloud SQL untuk PostgreSQL, periksa kueri menggunakan rencana eksekusi, dan sesuaikan parameter sesi atau instance sesuai dengan kasus penggunaannya.
Rencana eksekusi
Kegunaan utama rencana eksekusi adalah untuk memberikan gambaran mendalam mengenai pilihan yang dibuat oleh pengoptimal kueri untuk mengakses data database. Pengoptimal kueri menghasilkan rencana eksekusi untuk pernyataan SELECT, INSERT, UPDATE, dan DELETE bagi pengguna database, serta memungkinkan administrator lebih memahami kueri dan operasi DML tertentu. Rencana ini sangat berguna saat Anda perlu menyesuaikan performa kueri—misalnya, untuk mengetahui performa indeks atau menentukan apakah ada indeks yang hilang yang perlu dibuat
Rencana eksekusi dapat dipengaruhi oleh volume data, statistik data, dan parameter instance (parameter global atau sesi).
Pertimbangan konversi
Rencana eksekusi bukanlah objek database yang perlu dimigrasikan, melainkan alat untuk menganalisis perbedaan performa antara Oracle dan Cloud SQL untuk PostgreSQL yang menjalankan pernyataan yang sama pada set data identik.
Cloud SQL untuk PostgreSQL tidak mendukung sintaksis, fungsionalitas, atau output rencana eksekusi yang sama dengan Oracle.
Berikut adalah contoh rencana eksekusi:
| Rencana eksekusi di Oracle | Rencana eksekusi di Cloud SQL untuk PostgreSQL |
|---|---|
SQL> EXPLAIN PLAN FOR
|
postgres=> EXPLAIN SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID = 105;
QUERY PLAN
--------------------------------------------------------------------------------
Index Scan using emp_emp_id_pk on employees (cost=0.14..8.16 rows=1 width=71)
Index Cond: (employee_id = '105'::numeric)
(2 rows)
|
Prosedur, fungsi, dan pemicu tersimpan
PL/SQL adalah bahasa prosedural tambahan di Oracle untuk membuat, menyimpan, dan menerapkan solusi berbasis kode dalam database. Secara umum, prosedur dan fungsi tersimpan database adalah elemen kode yang terdiri atas bahasa prosedural tambahan ANSI SQL dan SQL—misalnya PL/SQL untuk Oracle dan bahasa prosedural MySQL untuk MySQL. PL/pgSQL ditujukan untuk bahasa prosedural tambahan PostgreSQL.
Prosedur dan fungsi tersimpan ini digunakan untuk memberikan solusi bagi persyaratan yang lebih cocok dijalankan dari dalam database, bukan dari aplikasi (misalnya performa, kompatibilitas, dan keamanan). Meskipun sama-sama menggunakan PL/SQL, prosedur tersimpan digunakan terutama untuk menjalankan operasi DDL/DML, sedangkan fungsi tersimpan biasa digunakan untuk melakukan penghitungan guna menampilkan hasil tertentu.
PL/SQL ke PL/pgSQL
Dari perspektif migrasi PL/SQL Oracle ke Cloud SQL untuk PostgreSQL, PL/pgSQL mirip dengan PL/SQL Oracle dalam hal struktur dan sintaksisnya. Namun, ada beberapa perbedaan utama yang mengharuskan migrasi kode. Misalnya, jenis data antara Oracle dan Cloud SQL untuk PostgreSQL berbeda, sehingga terjemahan sering kali diperlukan untuk memastikan bahwa kode yang dimigrasikan menggunakan nama jenis data terkait yang didukung oleh Cloud SQL untuk PostgreSQL. Untuk pembahasan mendetail tentang perbedaan antara kedua bahasa tersebut, lihat Melakukan porting dari PL/SQL Oracle.
Hak istimewa dan keamanan objek kode
Di Oracle, untuk membuat prosedur atau fungsi tersimpan, pengguna harus memiliki hak istimewa sistem CREATE PROCEDURE (untuk membuat prosedur atau fungsi pada pengguna lain, pengguna database harus memiliki hak istimewa CREATE
ANY PROCEDURE). Untuk menjalankan prosedur atau fungsi tersimpan, pengguna database harus memiliki hak istimewa EXECUTE.
Di PostgreSQL, untuk membuat prosedur kode atau fungsi, pengguna harus memiliki hak istimewa USAGE. Untuk menjalankan prosedur atau fungsi, pengguna harus memiliki hak istimewa EXECUTE atas prosedur atau fungsi itu.
Secara default, prosedur atau fungsi PL/pgSQL ditetapkan sebagai SECURITY INVOKER, yang berarti prosedur atau fungsi tersebut akan dijalankan dengan hak istimewa pengguna yang memanggilnya. Atau, SECURITY DEFINER dapat ditentukan agar fungsi dijalankan dengan hak istimewa pengguna yang memilikinya.
Sintaksis prosedur dan fungsi tersimpan di Cloud SQL untuk PostgreSQL
Contoh berikut menunjukkan sintaksis prosedur dan fungsi tersimpan di Cloud SQL untuk PostgreSQL:
CREATE [ OR REPLACE ] PROCEDURE
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
{ LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ...
CREATE [ OR REPLACE ] FUNCTION
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
[ RETURNS rettype
| RETURNS TABLE ( column_name column_type [, ...] ) ]
{ LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| WINDOW
| IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| PARALLEL { UNSAFE | RESTRICTED | SAFE }
| COST execution_cost
| ROWS result_rows
| SUPPORT support_function
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ...
Pemicu
Pemicu adalah prosedur tersimpan yang diaktifkan saat terjadi peristiwa tertentu. Di Oracle, peristiwa pemicu dikaitkan dengan tabel, tabel virtual, skema, atau database. Jenis peristiwa pemicu mencakup:
- Pernyataan Bahasa Pengolahan Data (DML) (misalnya
INSERT,UPDATE,DELETE) - Pernyataan Bahasa Definisi Data (DDL) (misalnya
CREATE,ALTER,DROP) - Peristiwa Database (misalnya
LOGON,STARTUP,SHUTDOWN)
Pemicu di Oracle dapat berupa salah satu jenis berikut:
- Pemicu sederhana: Diaktifkan tepat satu kali, sebelum atau setelah peristiwa pemicu yang ditentukan
- Pemicu gabungan: Diaktifkan di beberapa peristiwa
- Pemicu
INSTEAD OF: Pemicu DML jenis khusus untuk memberikan mekanisme update transparan untuk tabel virtual yang kompleks dan tidak dapat diedit - Pemicu sistem: Diaktifkan pada peristiwa database tertentu
Di Cloud SQL untuk PostgreSQL, pemicu diaktifkan sebelum atau setelah operasi DML pada tabel, tabel virtual, atau tabel asing tertentu. Pemicu INSTEAD OF didukung untuk menyediakan mekanisme update bagi tabel virtual. Pemicu pada operasi DDL disebut pemicu peristiwa.
Cloud SQL untuk PostgreSQL tidak mendukung pemicu sistem Oracle yang didasarkan pada peristiwa database.
Tidak seperti pemicu Oracle, pemicu Cloud SQL untuk PostgreSQL tidak mendukung penggunaan blok PL/pgSQL anonim sebagai isi pemicu. Fungsi bernama yang menggunakan nol argumen atau lebih dan menampilkan pemicu jenis harus diberikan dalam deklarasi pemicu. Fungsi ini dijalankan saat pemicu diaktifkan.
Sintaksis pemicu dan pemicu peristiwa di Cloud SQL untuk PostgreSQL
Contoh berikut menunjukkan sintaksis pemicu dan pemicu peristiwa di Cloud SQL untuk PostgreSQL:
CREATE [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] }
ON table_name
[ FROM referenced_table_name ]
[ NOT DEFERRABLE | [ DEFERRABLE ] [ INITIALLY IMMEDIATE | INITIALLY DEFERRED ] ]
[ REFERENCING { { OLD | NEW } TABLE [ AS ] transition_relation_name } [ ... ] ]
[ FOR [ EACH ] { ROW | STATEMENT } ]
[ WHEN ( condition ) ]
EXECUTE { FUNCTION | PROCEDURE } function_name ( arguments )
event boleh salah satu dari: INSERT, UPDATE [ OF column_name [, ... ] ], DELETE, TRUNCATE
CREATE EVENT TRIGGER name
ON event
[ WHEN filter_value IN (filter_value [, ... ]) [ AND ... ] ]
EXECUTE { FUNCTION | PROCEDURE } function_name()
event boleh salah satu dari: ddl_command_start, ddl_command_end, table_rewrite, sql_drop
filter_value hanya boleh: TAG
filter_value boleh salah satu dari tag perintah yang didukung.
Langkah berikutnya
- Pelajari lebih lanjut akun pengguna Cloud SQL untuk PostgreSQL.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.