Sha256: c4609bfde7ef3e261d837bc174bc8bdee5acf472da4352e77cc8640d84628133

Contents?: true

Size: 1.03 KB

Versions: 25

Compression:

Stored size: 1.03 KB

Contents

CREATE OR REPLACE FUNCTION keys_2_logger() RETURNS TRIGGER AS $body$
  DECLARE
    size integer;
    old_j jsonb;
    changes_j jsonb;
    item record;
  BEGIN
    size := jsonb_array_length(NEW.log);
    old_j := to_jsonb(OLD);
    changes_j := to_jsonb(NEW);

    FOR item in SELECT key as k, value as v FROM jsonb_each(old_j)
    LOOP
      IF changes_j->item.k = item.v THEN
        changes_j := changes_j - item.k;
      END IF;
    END LOOP;

    NEW.log := jsonb_set(
      NEW.log,
      ARRAY[size::text],
      jsonb_build_object(
        'ts',
        extract(epoch from now())::int,
        'i',
        (NEW.log#>>ARRAY[(size - 1)::text, 'i'])::int + 1,
        'd',
        changes_j
      ),
      true
    );
    return NEW;
  END;
  $body$
  LANGUAGE plpgsql;


ALTER TABLE pgbench_accounts ADD COLUMN log jsonb DEFAULT '[]' NOT NULL;

UPDATE pgbench_accounts SET log = to_jsonb(ARRAY[json_build_object('i', 0)])::jsonb;

CREATE TRIGGER keys_log_accounts
BEFORE UPDATE ON pgbench_accounts FOR EACH ROW
EXECUTE PROCEDURE keys_2_logger();

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
logidze-0.12.0 bench/triggers/keys2_trigger_setup.sql
logidze-0.11.0 bench/triggers/keys2_trigger_setup.sql
logidze-0.10.0 bench/triggers/keys2_trigger_setup.sql
logidze-0.9.0 bench/triggers/keys2_trigger_setup.sql
logidze-0.8.1 bench/triggers/keys2_trigger_setup.sql
logidze-0.8.0 bench/triggers/keys2_trigger_setup.sql
logidze-0.7.0 bench/triggers/keys2_trigger_setup.sql
logidze-0.6.5 bench/triggers/keys2_trigger_setup.sql
logidze-0.6.4 bench/triggers/keys2_trigger_setup.sql
logidze-0.6.3 bench/triggers/keys2_trigger_setup.sql
logidze-0.6.2 bench/triggers/keys2_trigger_setup.sql
logidze-0.6.1 bench/triggers/keys2_trigger_setup.sql
logidze-0.6.0 bench/triggers/keys2_trigger_setup.sql
logidze-0.5.3 bench/triggers/keys2_trigger_setup.sql
logidze-0.5.2 bench/triggers/keys2_trigger_setup.sql
logidze-0.5.1 bench/triggers/keys2_trigger_setup.sql
logidze-0.5.0 bench/triggers/keys2_trigger_setup.sql
logidze-0.4.1 bench/triggers/keys2_trigger_setup.sql
logidze-0.4.0 bench/triggers/keys2_trigger_setup.sql
logidze-0.3.1 bench/triggers/keys2_trigger_setup.sql