All Products
Search
Document Center

PolarDB:polar_sql_mapping

Last Updated:Aug 26, 2026

Ketika sebuah aplikasi mengirimkan pernyataan SQL yang salah dan tidak dapat segera diperbaiki, Anda dapat menggunakan fitur SQL mapping untuk memetakan pernyataan SQL tersebut ke versi yang benar. Setelah dikonfigurasi, fitur ini akan secara otomatis menggantikan setiap pernyataan SQL yang salah dari aplikasi dengan pernyataan yang telah dipetakan.

Tindakan Pencegahan

Fitur SQL mapping memetakan semua pernyataan SQL yang sesuai dengan string yang ditentukan ke pernyataan SQL tertentu. Gunakan fitur ini dengan hati-hati.

Prasyarat

Pastikan Plugin polar_sql_mapping telah dibuat di database Anda. Plugin ini tersedia secara default pada database baru. Untuk database yang sudah ada, Anda harus membuatnya secara manual.

Jalankan perintah berikut untuk membuat Plugin secara manual.

set default_with_rowids to off;
create extension polar_sql_mapping;

Panduan penggunaan

  1. Atur parameter polar_sql_mapping.use_sql_mapping untuk mengaktifkan fitur SQL mapping. Nilai default-nya adalah off.

    alter database [dbname] set polar_sql_mapping.use_sql_mapping=on;
  2. Atur parameter polar_sql_mapping.record_error_sql untuk mengaktifkan fitur pengumpulan otomatis pernyataan SQL yang salah. Nilai default-nya adalah off.

    alter database [dbname] set polar_sql_mapping.record_error_sql=on;
    Catatan

    Setelah selesai menggunakan fitur SQL mapping, kami menyarankan agar Anda menonaktifkan fitur pencatatan kesalahan untuk mengurangi dampak terhadap kinerja.

    alter database [dbname] set polar_sql_mapping.record_error_sql=off;
  3. Kueri pernyataan SQL yang salah.

    select * from emp;

    Hasil berikut dikembalikan:

    ERROR:  relation "emp" does not exist
  4. Pernyataan SQL yang salah dicatat dalam polar_sql_mapping.error_sql_info. Jalankan perintah berikut untuk mengkueri informasi detail dari polar_sql_mapping.error_sql_info.

    select * from polar_sql_mapping.error_sql_info ;

    Hasil berikut dikembalikan:

    id  |       query        |           emessage            | calls 
    ----+--------------------+-------------------------------+-------
      1 | select * from emp; | relation "emp" does not exist |     1
  5. Buat hubungan pemetaan untuk memetakan pernyataan SQL dengan ID 1 di error_sql_info ke pernyataan SQL tertentu.

    select polar_sql_mapping.insert_mapping_id(1, ' select 1');
  6. Kueri kembali pernyataan SQL yang salah.

    select * from emp;

    Hasil berikut dikembalikan:

     ?column? 
    ----------
            1
    (1 row)
    Catatan

    Sebagian besar aplikasi menggunakan PreparedStmt. Saat menulis pernyataan SQL baru, pastikan placeholder berupa $n, bukan '?'. Contoh berikut disediakan:

    select * from polar_sql_mapping.polar_sql_mapping_table ;

    Hasil berikut dikembalikan:

    id |            source_sql            |           target_sql
    ----+----------------------------------+---------------------------------
    4 | select 1 from dual where a = $1; | select 1 from dual where 1 = $1
    (1 row)

Deskripsi parameter

Parameter

Deskripsi

polar_sql_mapping.max_num

Mengontrol jumlah maksimum pernyataan SQL salah yang berbeda yang dapat dikumpulkan. Pernyataan SQL yang melebihi jumlah yang ditentukan akan langsung diabaikan. Diperlukan restart jika Anda ingin mengubah nilai ini. Nilai default: 10.

polar_sql_mapping.error_sql_info_clear()

Menghapus pernyataan SQL salah yang telah dicatat.

Mengganti pernyataan SQL yang berjalan normal

Jika Anda ingin mengganti pernyataan SQL yang berjalan tanpa kesalahan, lakukan langkah-langkah berikut:

  1. Atur parameter polar_sql_mapping.use_sql_mapping untuk mengaktifkan fitur SQL mapping. Nilai default-nya adalah off.

    alter database [dbname] set polar_sql_mapping.use_sql_mapping=on;
  2. Atur parameter polar_sql_mapping.record_error_sql untuk mengaktifkan fitur pengumpulan otomatis pernyataan SQL yang salah. Nilai default-nya adalah off.

    alter database [dbname] set polar_sql_mapping.record_error_sql=on;
    Catatan

    Setelah selesai menggunakan fitur SQL mapping, kami menyarankan agar Anda menonaktifkan fitur pencatatan kesalahan untuk mengurangi dampak terhadap kinerja.

    alter database [dbname] set polar_sql_mapping.record_error_sql=off;
  3. Tetapkan pola pencocokan. Semua pernyataan SQL yang sesuai dengan pola tersebut akan disimpan ke polar_sql_mapping.error_sql_info.

    Pada contoh berikut, semua pernyataan SQL yang mengandung test_table akan ditangkap (logika pencocokan konsisten dengan Operator LIKE dalam SQL).

    1. Tetapkan pola pencocokan.

      set polar_sql_mapping.error_pattern to '%test_table%';
    2. Aktifkan pola pencocokan.

      set polar_sql_mapping.record_error_sql to true;
    3. Buat pernyataan SQL yang akan ditangkap.

      select * from test_table;
      
      select a from test_table;
      
      select max(a) from test_table;
    4. Lihat hasil tangkapan di polar_sql_mapping.error_sql_info.

      select * from polar_sql_mapping.error_sql_info;

      Hasil berikut dikembalikan:

      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 ditangkap ke polar_sql_mapping.error_sql_info.

  4. Ganti pernyataan SQL yang salah dengan pernyataan SQL yang benar.

    select polar_sql_mapping.insert_mapping_id(x, 'text');
    Catatan

    Pada perintah ini, x menunjukkan ID pernyataan SQL, dan text menunjukkan teks pernyataan SQL. Gantilah keduanya sesuai kebutuhan aktual Anda.

  5. Setelah selesai menggunakan fitur ini, lakukan operasi restore untuk menghindari dampak terhadap kinerja.

    reset polar_sql_mapping.error_pattern;