Dalam skenario di mana aplikasi mengirimkan pernyataan SQL yang salah dan tidak dapat segera dimodifikasi, Anda dapat mengonfigurasi fitur pemetaan pernyataan SQL untuk memetakan pernyataan tersebut ke pernyataan yang benar. Setelah dikonfigurasi, pernyataan SQL yang salah akan otomatis dipetakan ke pernyataan yang benar meskipun aplikasi mengirimkan pernyataan yang salah.
Peringatan
Setelah mengonfigurasi fitur pemetaan pernyataan SQL, semua pernyataan SQL yang cocok dengan string tertentu akan dipetakan ke pernyataan SQL yang ditentukan.
Prasyarat
Pastikan Plugin polar_sql_mapping telah dibuat untuk database Anda. Secara default, plugin ini dibuat secara otomatis untuk database baru. Untuk database sebelumnya, Anda perlu membuat plugin ini secara manual.
set default_with_rowids to off;
create extension polar_sql_mapping;Penggunaan
- Atur parameter
polar_sql_mapping.use_sql_mappinguntuk mengaktifkan fitur pemetaan pernyataan SQL. Secara default, parameter ini disetel ke off.alter system set polar_sql_mapping.use_sql_mapping=on; - Atur parameter
polar_sql_mapping.record_error_sqluntuk mengaktifkan pencatatan otomatis pernyataan SQL yang salah. Secara default, parameter ini disetel ke off.alter system set polar_sql_mapping.record_error_sql=on;Catatan Untuk meminimalkan dampak pada performa, kami menyarankan Anda menonaktifkan pencatatan pernyataan SQL yang salah jika fitur pemetaan pernyataan SQL tidak lagi diperlukan.alter system set polar_sql_mapping.record_error_sql=off; - Kueri pernyataan SQL yang salah.
Sebuah keluaran serupa akan ditampilkan:select * from emp;ERROR: relation "emp" does not exist - Setelah pernyataan SQL yang salah direkam di polar_sql_mapping.error_sql_info, jalankan perintah berikut untuk menanyakan detail dari polar_sql_mapping.error_sql_info:
Sebuah keluaran serupa akan ditampilkan:select * from polar_sql_mapping.error_sql_info ;id | query | emessage | calls ----+--------------------+-------------------------------+------- 1 | select * from emp; | relation "emp" does not exist | 1 - Buat pemetaan untuk memetakan pernyataan SQL dengan ID 1 di error_sql_info ke pernyataan SQL yang ditentukan.
select polar_sql_mapping.insert_mapping_id(1, ' select 1'); - Kueri pernyataan SQL yang salah lagi.
Sebuah keluaran serupa akan ditampilkan:select * from emp;?column? ---------- 1 (1 row)Catatan Sebagian besar aplikasi menggunakan PreparedStmt. Saat menulis pernyataan SQL baru, gunakan placeholder $n sebagai pengganti '?'. Contoh:
Sebuah keluaran serupa akan ditampilkan:select * from polar_sql_mapping.polar_sql_mapping_table ;id | source_sql | target_sql ----+----------------------------------+--------------------------------- 4 | select 1 from dual where a = $1; | select 1 from dual where 1 = $1 (1 row)
Parameter
| Parameter | Deskripsi |
| polar_sql_mapping.max_num | Digunakan untuk mengontrol jumlah maksimum pernyataan SQL yang berbeda yang dapat direkam. Nilai default: 10. Pernyataan SQL yang berbeda melebihi jumlah yang ditentukan akan diabaikan. Untuk mengubah nilai yang ditentukan, mulai ulang database Anda. |
| polar_sql_mapping.error_sql_info_clear() | Digunakan untuk menghapus pernyataan SQL yang salah yang telah direkam. |
Ganti pernyataan SQL yang berjalan normal
- Atur parameter
polar_sql_mapping.use_sql_mappinguntuk mengaktifkan fitur pemetaan pernyataan SQL. Nilai default: off.alter system set polar_sql_mapping.use_sql_mapping=on; - Atur parameter
polar_sql_mapping.record_error_sqluntuk mengaktifkan pencatatan otomatis pernyataan SQL yang salah. Nilai default: off.alter system set polar_sql_mapping.record_error_sql=on;Catatan Untuk meminimalkan dampak pada performa, kami menyarankan Anda menonaktifkan pencatatan pernyataan SQL yang salah jika fitur pemetaan pernyataan SQL tidak lagi diperlukan.alter system set polar_sql_mapping.record_error_sql=off; - Konfigurasikan node pencocokan. Semua pernyataan SQL yang cocok dengan pola pencocokan disimpan di polar_sql_mapping.error_sql_info.
Contoh berikut menunjukkan bahwa pernyataan SQL yang mengandung test_table direkam (logika pencocokan konsisten dengan operator LIKE dalam sintaks SQL).
- Konfigurasikan mode pencocokan.
set polar_sql_mapping.error_pattern to '%test_table%'; - Aktifkan mode pencocokan.
set polar_sql_mapping.record_error_sql to true; - Buat pernyataan SQL untuk direkam.
select * from test_table; select a from test_table; select max(a) from test_table; - Lihat hasil yang direkam dan disimpan di polar_sql_mapping.error_sql_info.
Sebuah keluaran serupa akan ditampilkan:select * from polar_sql_mapping.error_sql_info;
Semua pernyataan SQL yang mengandung test_table direkam dan disimpan di polar_sql_mapping.error_sql_info.id | query | emessage | calls ----+--------------------------------+----------------------------+------- 1 | select * from test_table; | Error Pattern Force Record | 1 2 | select a from test_table; | Error Pattern Force Record | 1 3 | select max(a) from test_table; | Error Pattern Force Record | 1 (3 rows)
- Konfigurasikan mode pencocokan.
- Ganti pernyataan SQL yang direkam dengan pernyataan SQL yang ditentukan.
select polar_sql_mapping.insert_mapping_id(x, 'text');Catatan Pada pernyataan di atas, x menunjukkan ID pernyataan yang benar, dan text menunjukkan teks dari pernyataan SQL yang ingin Anda gunakan untuk menggantikan pernyataan SQL yang direkam. Ganti pernyataan SQL sesuai kondisi aktual Anda. - Untuk mencegah penurunan performa, pulihkan konfigurasi saat fitur pemetaan pernyataan SQL tidak lagi diperlukan.
reset polar_sql_mapping.error_pattern;