PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

केवल संशोधित फ़ील्ड के JSON को रिकॉर्ड करने के लिए Postgres ट्रिगर का उपयोग करें

आपका ट्रिगर फ़ंक्शन ठीक से काम नहीं कर सकता है, यह एक पंक्ति सम्मिलित करते समय त्रुटि उत्पन्न करता है:

आपको INSERT . के तीन मामलों का इलाज करना चाहिए , UPDATE और DELETE अलग से:

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. Oracle SQL चयन को PostgreSQL चयन में परिवर्तित करना

  2. PostgreSQL 9.3 . में एक्सेल डेटा आयात करें

  3. Haproxy और Keepalived की स्थापना कैसे करें

  4. PgAdmin का उपयोग करके Amazon EC2 इंस्टेंस पर दूरस्थ रूप से PostgreSQL से कनेक्ट नहीं हो सकता

  5. पूर्ण बाहरी जॉइन का उपयोग किए बिना कॉलम में सशर्त रूप से समूह कैसे करें