NAME

Test::DBChanges::Pg - track changes to PostgreSQL tables

VERSION

version 1.0.2

SYNOPSIS

  my $dbchanges = Test::DBChanges::Pg->new({
    dbh => $dbh,
    source_names => [qw(things ledger)],
  });

  # later:
  my $changeset = $dbchanges->changeset_for_code(sub { do_something($dbh) });

  for my $row ($changeset->changes_for_source('things')->inserted_rows->@*) {
     # $row is a hashref with the inserted data
  }

DESCRIPTION

This class installs a set of triggers in the database, that record all changes (insert, update, delete) to a set of tables. This requires PostgreSQL version 9.4 at least, because it uses the JSONB type.

It can then parse this record into a changeset, which will build hashrefs corresponding to each changed row.

This should really only be used in tests. At the moment the table, stored procedure and triggers that this class needs are installed but never removed.

ATTRIBUTES

source_names

Arrayref of names of the tables to record changes for.

dbh

Connected database handle to track changes in.

METHODS

changeset_for_code

  my $changeset = $dbchanges->changeset_for_code(sub { ... });

Runs the given coderefs, and returns a Test::DBChanges::ChangeSet instance containing all changes to the tables referenced by the "source_names".

AUTHOR

Gianni Ceccarelli <gianni.ceccarelli@broadbean.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2019 by BroadBean UK, a CareerBuilder Company.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.