PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Gunakan pemicu Postgres untuk merekam JSON hanya dari bidang yang dimodifikasi

Fungsi pemicu Anda tidak dapat berfungsi dengan baik, ini menghasilkan kesalahan saat memasukkan baris:

Anda harus menangani tiga kasus INSERT , UPDATE dan DELETE terpisah:

create or replace function changelog_procedure() 
returns trigger as $$
declare
    json_new jsonb;
    json_old jsonb;
begin
    if tg_op = 'INSERT' then
        json_new:= to_jsonb(new);
    elsif tg_op = 'DELETE' then
        json_old:= to_jsonb(old);
    else
        select jsonb_object_agg(new_key, new_value), jsonb_object_agg(old_key, old_value)
        into json_new, json_old
        from jsonb_each(to_jsonb(new)) as n(new_key, new_value)
        join jsonb_each(to_jsonb(old)) as o(old_key, old_value) 
        on new_key = old_key and new_value <> old_value;
    end if;
    insert into tbl_changelog(tbl, op, new, old)
    values (tg_table_name, tg_op, json_new, json_old);
    return null;
end;
$$ language plpgsql;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah memesan karakter beraksen di PostgreSQL 8.4

  2. kloning data hierarkis

  3. Bagaimana cara menghasilkan uuid dengan PostgreSQL 8.4.4 di Ubuntu 10.04?

  4. Format Bulan dalam Angka Romawi di PostgreSQL

  5. Cara mendapatkan pemicu yang terkait dengan tampilan atau tabel di PostgreSQL