Per prior discussion, this small Makefile change allows anything that
uses $(prove_check) or $(prove_installcheck) to have the list of tests
overridden by passing a PROVE_TESTS as a list of space-separated test
file paths.

Particularly handy for src/test/recovery when you want to run
t/ without running 001 through 008 each and every
time. The current workaround is deleting the tests you don't want,
which dirties up your git tree and is really annoying when checking
out and rebasing etc.

Please backpatch to at least 9.6 since it's trivial and we seem to be
doing that for TAP. 9.5 and 9.4 would be nice too :)

 Craig Ringer         
 PostgreSQL Development, 24x7 Support, Training & Services
From 1180cfaca9b92c401095f9766cbb46e2ca4371f3 Mon Sep 17 00:00:00 2001
From: Craig Ringer <>
Date: Fri, 11 Nov 2016 16:21:41 +0800
Subject: [PATCH 1/2] Allow individual TAP tests to be run via PROVE_TESTS

Add a new optional Makefile variable PROVE_TESTS that, if passed
as a space-separated list of paths relative to the Makefile
invoking $(prove_check) or $(prove_installcheck), runs just
those tests instead of t/*.pl .
 src/ | 4 ++--
 src/test/perl/README   | 6 ++++++
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/ b/src/
index ea61eb5..c5036d8 100644
--- a/src/
+++ b/src/
@@ -354,12 +354,12 @@ ifeq ($(enable_tap_tests),yes)
 define prove_installcheck
 rm -rf $(CURDIR)/tmp_check/log
-cd $(srcdir) && TESTDIR='$(CURDIR)' PATH="$(bindir):$$PATH" PGPORT='6$(DEF_PGPORT)' top_builddir='$(CURDIR)/$(top_builddir)' PG_REGRESS='$(CURDIR)/$(top_builddir)/src/test/regress/pg_regress' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) t/*.pl
+cd $(srcdir) && TESTDIR='$(CURDIR)' PATH="$(bindir):$$PATH" PGPORT='6$(DEF_PGPORT)' top_builddir='$(CURDIR)/$(top_builddir)' PG_REGRESS='$(CURDIR)/$(top_builddir)/src/test/regress/pg_regress' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) $(or $(PROVE_TESTS),t/*.pl)
 define prove_check
 rm -rf $(CURDIR)/tmp_check/log
-cd $(srcdir) && TESTDIR='$(CURDIR)' $(with_temp_install) PGPORT='6$(DEF_PGPORT)' PG_REGRESS='$(CURDIR)/$(top_builddir)/src/test/regress/pg_regress' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) t/*.pl
+cd $(srcdir) && TESTDIR='$(CURDIR)' $(with_temp_install) PGPORT='6$(DEF_PGPORT)' PG_REGRESS='$(CURDIR)/$(top_builddir)/src/test/regress/pg_regress' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) $(or $(PROVE_TESTS),t/*.pl)
diff --git a/src/test/perl/README b/src/test/perl/README
index 710a0d8..cfb45a1 100644
--- a/src/test/perl/README
+++ b/src/test/perl/README
@@ -6,6 +6,12 @@ across the source tree, particularly tests in src/bin and src/test. It's used
 to drive tests for backup and restore, replication, etc - anything that can't
 really be expressed using pg_regress or the isolation test framework.
+The tests are invoked via perl's 'prove' command, wrapped in PostgreSQL
+makefiles to handle instance setup etc. See the $(prove_check) and
+$(prove_installcheck) targets in By default every test in the
+t/ subdirectory is run. Individual test(s) can be run instead by passing
+something like PROVE_TESTS="t/ t/" to make.
 You should prefer to write tests using pg_regress in src/test/regress, or
 isolation tester specs in src/test/isolation, if possible. If not, check to
 see if your new tests make sense under an existing tree in src/test, like

Sent via pgsql-hackers mailing list (
To make changes to your subscription:

Reply via email to