On Thu, Jul 30, 2015 at 5:54 AM, Andreas Karlsson <andr...@proxel.se> wrote: > What I do not like though is how the path src/test/tables_fk/t/ tells us > nothing about what features are of PostgreSQL are tested here. For this I > personally prefer the earlier versions where I think that was clear.
+Simple module used to check data dump ordering of pg_dump with tables +linked with foreign keys. The README mentions that this is to test pg_dump, perhaps referring to the TAP tests makes sense as well? > Another thought: would it be worthwhile to also add an assertion to check if > the data really was restored properly or would that just be redundant code? That seems worth doing, hence added something for it. Thanks for the suggestion. At the same time I have added an entry in .gitignore for the generated tmp_check/. Regards, -- Michael
From 26d507360aa8780ca51884fe3a8d82e5ae967481 Mon Sep 17 00:00:00 2001 From: Michael Paquier <mich...@otacoo.com> Date: Thu, 30 Jul 2015 11:46:54 +0900 Subject: [PATCH] Add TAP test for pg_dump checking data dump of extension tables The test added checks the data dump ordering of tables added in an extension linked among them with foreign keys. In order to do that, a test extension in the set of TAP tests of pg_dump, combined with a TAP test script making use of it. --- src/test/modules/Makefile | 1 + src/test/modules/tables_fk/.gitignore | 1 + src/test/modules/tables_fk/Makefile | 24 +++++++++++++++++ src/test/modules/tables_fk/README | 5 ++++ src/test/modules/tables_fk/t/001_dump_test.pl | 39 +++++++++++++++++++++++++++ src/test/modules/tables_fk/tables_fk--1.0.sql | 20 ++++++++++++++ src/test/modules/tables_fk/tables_fk.control | 5 ++++ 7 files changed, 95 insertions(+) create mode 100644 src/test/modules/tables_fk/.gitignore create mode 100644 src/test/modules/tables_fk/Makefile create mode 100644 src/test/modules/tables_fk/README create mode 100644 src/test/modules/tables_fk/t/001_dump_test.pl create mode 100644 src/test/modules/tables_fk/tables_fk--1.0.sql create mode 100644 src/test/modules/tables_fk/tables_fk.control diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile index 8213e23..683e9cb 100644 --- a/src/test/modules/Makefile +++ b/src/test/modules/Makefile @@ -7,6 +7,7 @@ include $(top_builddir)/src/Makefile.global SUBDIRS = \ commit_ts \ dummy_seclabel \ + tables_fk \ test_ddl_deparse \ test_parser \ test_rls_hooks \ diff --git a/src/test/modules/tables_fk/.gitignore b/src/test/modules/tables_fk/.gitignore new file mode 100644 index 0000000..b6a2a01 --- /dev/null +++ b/src/test/modules/tables_fk/.gitignore @@ -0,0 +1 @@ +/tmp_check/ diff --git a/src/test/modules/tables_fk/Makefile b/src/test/modules/tables_fk/Makefile new file mode 100644 index 0000000..d018517 --- /dev/null +++ b/src/test/modules/tables_fk/Makefile @@ -0,0 +1,24 @@ +# src/test/modules/tables_fk/Makefile + +EXTENSION = tables_fk +DATA = tables_fk--1.0.sql +PGFILEDESC = "tables_fk - set of dumpable tables linked by foreign keys" + +ifdef USE_PGXS +PG_CONFIG = pg_config +PGXS := $(shell $(PG_CONFIG) --pgxs) +include $(PGXS) +else +subdir = src/test/modules/tables_fk +top_builddir = ../../../.. +include $(top_builddir)/src/Makefile.global +include $(top_srcdir)/contrib/contrib-global.mk +endif + +check: all + $(prove_check) + +installcheck: install + $(prove_installcheck) + +temp-install: EXTRA_INSTALL=src/test/modules/tables_fk diff --git a/src/test/modules/tables_fk/README b/src/test/modules/tables_fk/README new file mode 100644 index 0000000..049b75c --- /dev/null +++ b/src/test/modules/tables_fk/README @@ -0,0 +1,5 @@ +tables_fk +========= + +Simple module used to check data dump ordering of pg_dump with tables +linked with foreign keys using TAP tests. diff --git a/src/test/modules/tables_fk/t/001_dump_test.pl b/src/test/modules/tables_fk/t/001_dump_test.pl new file mode 100644 index 0000000..9d3d5ff --- /dev/null +++ b/src/test/modules/tables_fk/t/001_dump_test.pl @@ -0,0 +1,39 @@ +use strict; +use warnings; +use TestLib; +use Test::More tests => 4; + +my $tempdir = tempdir; + +start_test_server $tempdir; + +psql 'postgres', 'CREATE EXTENSION tables_fk'; + +# Insert some data before running the dump, this is needed to check +# consistent data dump of tables with foreign key dependencies +psql 'postgres', 'INSERT INTO cc_tab_fkey VALUES (1)'; +psql 'postgres', 'INSERT INTO bb_tab_fkey VALUES (1)'; +psql 'postgres', 'INSERT INTO aa_tab_fkey VALUES (1)'; + +# Create a table depending on a FK defined in the extension +psql 'postgres', 'CREATE TABLE dd_tab_fkey (id int REFERENCES bb_tab_fkey(id))'; +psql 'postgres', 'INSERT INTO dd_tab_fkey VALUES (1)'; + +# Take a dump then re-deploy it to a new database +command_ok(['pg_dump', '-d', 'postgres', '-f', "$tempdir/dump.sql"], + 'taken dump with installed extension'); +command_ok(['createdb', 'foobar1'], 'created new database to redeploy dump'); +command_ok(['psql', '--set=ON_ERROR_STOP=on', '-d', 'foobar1', '-f', + "$tempdir/dump.sql"], 'dump restored'); + +# And check its content +my $result = psql 'foobar1', + q{SELECT id FROM aa_tab_fkey UNION ALL +SELECT id FROM bb_tab_fkey UNION ALL +SELECT id FROM cc_tab_fkey UNION ALL +SELECT id FROM dd_tab_fkey}; +is($result, qq(1 +1 +1 +1), + 'consistency of data restored'); diff --git a/src/test/modules/tables_fk/tables_fk--1.0.sql b/src/test/modules/tables_fk/tables_fk--1.0.sql new file mode 100644 index 0000000..e424610 --- /dev/null +++ b/src/test/modules/tables_fk/tables_fk--1.0.sql @@ -0,0 +1,20 @@ +/* src/test/modules/tables_fk/tables_fk--1.0.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "CREATE EXTENSION tables_fk" to load this file. \quit + +CREATE TABLE IF NOT EXISTS cc_tab_fkey ( + id int PRIMARY KEY +); + +CREATE TABLE IF NOT EXISTS bb_tab_fkey ( + id int PRIMARY KEY REFERENCES cc_tab_fkey(id) +); + +CREATE TABLE IF NOT EXISTS aa_tab_fkey ( + id int REFERENCES bb_tab_fkey(id) +); + +SELECT pg_catalog.pg_extension_config_dump('aa_tab_fkey', ''); +SELECT pg_catalog.pg_extension_config_dump('bb_tab_fkey', ''); +SELECT pg_catalog.pg_extension_config_dump('cc_tab_fkey', ''); diff --git a/src/test/modules/tables_fk/tables_fk.control b/src/test/modules/tables_fk/tables_fk.control new file mode 100644 index 0000000..b9f31ee --- /dev/null +++ b/src/test/modules/tables_fk/tables_fk.control @@ -0,0 +1,5 @@ +# tables_fk extension +comment = 'tables_fk - dumpable tables linked with foreign keys' +default_version = '1.0' +module_pathname = '$libdir/tables_fk' +relocatable = true -- 2.4.6
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers