use DBI;
use Data::Dumper;

$dad = DBI->connect('dbi:Pg:dbname=template1;host=localhost', '', '', {AutoCommit => 0, RaiseError => 1});
$kid = DBI->connect('dbi:Pg:dbname=template1;host=localhost', '', '', {AutoCommit => 0, RaiseError => 1});

# Cleanup...
$kid->do("DROP TABLE IF EXISTS kidseen");
$kid->do("DROP TABLE IF EXISTS kidtest");
$kid->commit();

# Dad opens a transaction...
$dad->rollback();
$dad->do("SET bytea_output = 'escape'");

# Dad exports its snapshot for the kid to take it over...
($snap) = $dad->selectrow_array('SELECT pg_export_snapshot()');
print "Dad: " . Dumper($dad->selectall_arrayref("SELECT * FROM pg_class where relname = 'kidtest'"));

# The kid creates a table that will disappear when it takes over dad's snapshot...
$kid->do("CREATE TABLE kidtest (a int);");
$kid->commit();


# READ COMMITTED

$kid->do("set default_transaction_isolation to 'read committed'");
$kid->commit();

$kid->do("DO \$\$BEGIN
PERFORM pg_import_snapshot('$snap');
CREATE TABLE kidseen AS SELECT * FROM pg_class WHERE relname = 'kidtest';
END\$\$");
print "Kid RC: " . Dumper($kid->selectall_arrayref("SELECT * FROM kidseen"));
$kid->rollback();



# SERIALIZABLE

$kid->do("set default_transaction_isolation to serializable");
$kid->commit();

$kid->do("DO \$\$BEGIN
PERFORM pg_import_snapshot('$snap');
CREATE TABLE kidseen AS SELECT * FROM pg_class WHERE relname = 'kidtest';
END\$\$");
print "Kid SERIAL: " . Dumper($kid->selectall_arrayref("SELECT * FROM kidseen"));
$kid->rollback();
