全部产品
Search
文档中心

PolarDB:polar_sql_mapping

更新时间:Jul 02, 2025

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.

Untuk membuat plugin secara manual, jalankan perintah berikut:
set default_with_rowids to off;
create extension polar_sql_mapping;

Penggunaan

  1. Atur parameter polar_sql_mapping.use_sql_mapping untuk mengaktifkan fitur pemetaan pernyataan SQL. Secara default, parameter ini disetel ke off.
    alter system set polar_sql_mapping.use_sql_mapping=on;
  2. Atur parameter polar_sql_mapping.record_error_sql untuk 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;
  3. Kueri pernyataan SQL yang salah.
    select * from emp;
    Sebuah keluaran serupa akan ditampilkan:
    ERROR:  relation "emp" does not exist
  4. 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:
    select * from polar_sql_mapping.error_sql_info ;
    Sebuah keluaran serupa akan ditampilkan:
    id  |       query        |           emessage            | calls 
    ----+--------------------+-------------------------------+-------
      1 | select * from emp; | relation "emp" does not exist |     1
  5. 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');
  6. Kueri pernyataan SQL yang salah lagi.
    select * from emp;
    Sebuah keluaran serupa akan ditampilkan:
     ?column? 
    ----------
            1
    (1 row)
    Catatan Sebagian besar aplikasi menggunakan PreparedStmt. Saat menulis pernyataan SQL baru, gunakan placeholder $n sebagai pengganti '?'. Contoh:
    select * from polar_sql_mapping.polar_sql_mapping_table ;
    Sebuah keluaran serupa akan ditampilkan:
    id |            source_sql            |           target_sql
    ----+----------------------------------+---------------------------------
    4 | select 1 from dual where a = $1; | select 1 from dual where 1 = $1
    (1 row)

Parameter

ParameterDeskripsi
polar_sql_mapping.max_numDigunakan 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

Untuk menggunakan fitur pemetaan pernyataan SQL dalam mengganti pernyataan SQL yang berjalan normal, lakukan langkah-langkah berikut:
  1. Atur parameter polar_sql_mapping.use_sql_mapping untuk mengaktifkan fitur pemetaan pernyataan SQL. Nilai default: off.
    alter system set polar_sql_mapping.use_sql_mapping=on;
  2. Atur parameter polar_sql_mapping.record_error_sql untuk 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;
  3. 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).

    1. Konfigurasikan mode pencocokan.
      set polar_sql_mapping.error_pattern to '%test_table%';
    2. Aktifkan mode pencocokan.
      set polar_sql_mapping.record_error_sql to true;
    3. Buat pernyataan SQL untuk direkam.
      select * from test_table;
      
      select a from test_table;
      
      select max(a) from test_table;
    4. Lihat hasil yang direkam dan disimpan di polar_sql_mapping.error_sql_info.
      select * from polar_sql_mapping.error_sql_info;
      Sebuah keluaran serupa akan ditampilkan:
      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)
      Semua pernyataan SQL yang mengandung test_table direkam dan disimpan di polar_sql_mapping.error_sql_info.
  4. 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.
  5. Untuk mencegah penurunan performa, pulihkan konfigurasi saat fitur pemetaan pernyataan SQL tidak lagi diperlukan.
    reset polar_sql_mapping.error_pattern;