In connection with the "pg_hba_file_settings view patch" thread, I was
wondering where we could logically insert a regression test case for that
view. I realized that there is no natural home for it among the existing
regression tests, because it's not really connected to any SQL language
feature. The same is true for a number of other built-in views, and
unsurprisingly, most of them are not exercised anywhere :-(.
Accordingly, I propose creating a new regression test file whose charter
is to exercise the SRFs underlying system views, as per attached.
I don't think we desperately need new tests for views that expand to
simple SQL, but these test cases correspond directly to code coverage
for C functions, so they seem worthwhile.
I did not do anything about testing the various pg_stat_xxx views.
Those could be added later, or maybe they deserve their own home.
(In many cases, those would need something smarter than the basic
count(*) technique used here, because the C functions are invoked
in the view's SELECT list not in FROM, so the planner would throw
away those calls.)
Comments/objections?
regards, tom lane
diff --git a/src/test/regress/expected/rangefuncs.out b/src/test/regress/expected/rangefuncs.out
index 56481de..526a4ae 100644
*** a/src/test/regress/expected/rangefuncs.out
--- b/src/test/regress/expected/rangefuncs.out
***************
*** 1,19 ****
- SELECT name, setting FROM pg_settings WHERE name LIKE 'enable%';
- name | setting
- ----------------------+---------
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | on
- enable_material | on
- enable_mergejoin | on
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- (11 rows)
-
CREATE TABLE foo2(fooid int, f2 int);
INSERT INTO foo2 VALUES(1, 11);
INSERT INTO foo2 VALUES(2, 22);
--- 1,3 ----
diff --git a/src/test/regress/expected/sysviews.out b/src/test/regress/expected/sysviews.out
index ...852a7c3 .
*** a/src/test/regress/expected/sysviews.out
--- b/src/test/regress/expected/sysviews.out
***************
*** 0 ****
--- 1,113 ----
+ --
+ -- Test assorted system views
+ --
+ -- This test is mainly meant to provide some code coverage for the
+ -- set-returning functions that underlie certain system views.
+ -- The output of most of these functions is very environment-dependent,
+ -- so our ability to test with fixed expected output is pretty limited;
+ -- but even a trivial check of count(*) will exercise the normal code path
+ -- through the SRF.
+ select count(*) >= 0 as ok from pg_available_extension_versions;
+ ok
+ ----
+ t
+ (1 row)
+
+ select count(*) >= 0 as ok from pg_available_extensions;
+ ok
+ ----
+ t
+ (1 row)
+
+ -- At introduction, pg_config had 23 entries; it may grow
+ select count(*) > 20 as ok from pg_config;
+ ok
+ ----
+ t
+ (1 row)
+
+ -- We expect no cursors in this test; see also portals.sql
+ select count(*) = 0 as ok from pg_cursors;
+ ok
+ ----
+ t
+ (1 row)
+
+ select count(*) >= 0 as ok from pg_file_settings;
+ ok
+ ----
+ t
+ (1 row)
+
+ -- There will surely be at least one active lock
+ select count(*) > 0 as ok from pg_locks;
+ ok
+ ----
+ t
+ (1 row)
+
+ -- We expect no prepared statements in this test; see also prepare.sql
+ select count(*) = 0 as ok from pg_prepared_statements;
+ ok
+ ----
+ t
+ (1 row)
+
+ -- See also prepared_xacts.sql
+ select count(*) >= 0 as ok from pg_prepared_xacts;
+ ok
+ ----
+ t
+ (1 row)
+
+ -- This is to record the prevailing planner enable_foo settings during
+ -- a regression test run.
+ select name, setting from pg_settings where name like 'enable%';
+ name | setting
+ ----------------------+---------
+ enable_bitmapscan | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | on
+ enable_material | on
+ enable_mergejoin | on
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ (11 rows)
+
+ -- Test that the pg_timezone_names and pg_timezone_abbrevs views are
+ -- more-or-less working. We can't test their contents in any great detail
+ -- without the outputs changing anytime IANA updates the underlying data,
+ -- but it seems reasonable to expect at least one entry per major meridian.
+ -- (At the time of writing, the actual counts are around 38 because of
+ -- zones using fractional GMT offsets, so this is a pretty loose test.)
+ select count(distinct utc_offset) >= 24 as ok from pg_timezone_names;
+ ok
+ ----
+ t
+ (1 row)
+
+ select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
+ ok
+ ----
+ t
+ (1 row)
+
+ -- Let's check the non-default timezone abbreviation sets, too
+ set timezone_abbreviations = 'Australia';
+ select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
+ ok
+ ----
+ t
+ (1 row)
+
+ set timezone_abbreviations = 'India';
+ select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
+ ok
+ ----
+ t
+ (1 row)
+
diff --git a/src/test/regress/expected/timestamptz.out b/src/test/regress/expected/timestamptz.out
index 51d4d21..69d3965 100644
*** a/src/test/regress/expected/timestamptz.out
--- b/src/test/regress/expected/timestamptz.out
*************** SELECT '2007-12-09 07:30:00 UTC'::timest
*** 2604,2644 ****
(1 row)
--
- -- Test that the pg_timezone_names and pg_timezone_abbrevs views are
- -- more-or-less working. We can't test their contents in any great detail
- -- without the outputs changing anytime IANA updates the underlying data,
- -- but it seems reasonable to expect at least one entry per major meridian.
- -- (At the time of writing, the actual counts are around 38 because of
- -- zones using fractional GMT offsets, so this is a pretty loose test.)
- --
- select count(distinct utc_offset) >= 24 as ok from pg_timezone_names;
- ok
- ----
- t
- (1 row)
-
- select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
- ok
- ----
- t
- (1 row)
-
- -- Let's check the non-default timezone abbreviation sets, too
- set timezone_abbreviations = 'Australia';
- select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
- ok
- ----
- t
- (1 row)
-
- set timezone_abbreviations = 'India';
- select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
- ok
- ----
- t
- (1 row)
-
- --
-- Test that AT TIME ZONE isn't misoptimized when using an index (bug #14504)
--
create temp table tmptz (f1 timestamptz primary key);
--- 2604,2609 ----
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index e9b2bad..edeb2d6 100644
*** a/src/test/regress/parallel_schedule
--- b/src/test/regress/parallel_schedule
*************** test: brin gin gist spgist privileges in
*** 89,95 ****
# ----------
# Another group of parallel tests
# ----------
! test: alter_generic alter_operator misc psql async dbsize misc_functions tsrf
# rules cannot run concurrently with any test that creates a view
test: rules psql_crosstab amutils
--- 89,95 ----
# ----------
# Another group of parallel tests
# ----------
! test: alter_generic alter_operator misc psql async dbsize misc_functions sysviews tsrf
# rules cannot run concurrently with any test that creates a view
test: rules psql_crosstab amutils
diff --git a/src/test/regress/serial_schedule b/src/test/regress/serial_schedule
index 7cdc0f6..27a46d7 100644
*** a/src/test/regress/serial_schedule
--- b/src/test/regress/serial_schedule
*************** test: psql
*** 123,128 ****
--- 123,129 ----
test: async
test: dbsize
test: misc_functions
+ test: sysviews
test: tsrf
test: rules
test: psql_crosstab
diff --git a/src/test/regress/sql/rangefuncs.sql b/src/test/regress/sql/rangefuncs.sql
index c8edc55..09ac8fb 100644
*** a/src/test/regress/sql/rangefuncs.sql
--- b/src/test/regress/sql/rangefuncs.sql
***************
*** 1,5 ****
- SELECT name, setting FROM pg_settings WHERE name LIKE 'enable%';
-
CREATE TABLE foo2(fooid int, f2 int);
INSERT INTO foo2 VALUES(1, 11);
INSERT INTO foo2 VALUES(2, 22);
--- 1,3 ----
diff --git a/src/test/regress/sql/sysviews.sql b/src/test/regress/sql/sysviews.sql
index ...0941b6b .
*** a/src/test/regress/sql/sysviews.sql
--- b/src/test/regress/sql/sysviews.sql
***************
*** 0 ****
--- 1,48 ----
+ --
+ -- Test assorted system views
+ --
+ -- This test is mainly meant to provide some code coverage for the
+ -- set-returning functions that underlie certain system views.
+ -- The output of most of these functions is very environment-dependent,
+ -- so our ability to test with fixed expected output is pretty limited;
+ -- but even a trivial check of count(*) will exercise the normal code path
+ -- through the SRF.
+
+ select count(*) >= 0 as ok from pg_available_extension_versions;
+
+ select count(*) >= 0 as ok from pg_available_extensions;
+
+ -- At introduction, pg_config had 23 entries; it may grow
+ select count(*) > 20 as ok from pg_config;
+
+ -- We expect no cursors in this test; see also portals.sql
+ select count(*) = 0 as ok from pg_cursors;
+
+ select count(*) >= 0 as ok from pg_file_settings;
+
+ -- There will surely be at least one active lock
+ select count(*) > 0 as ok from pg_locks;
+
+ -- We expect no prepared statements in this test; see also prepare.sql
+ select count(*) = 0 as ok from pg_prepared_statements;
+
+ -- See also prepared_xacts.sql
+ select count(*) >= 0 as ok from pg_prepared_xacts;
+
+ -- This is to record the prevailing planner enable_foo settings during
+ -- a regression test run.
+ select name, setting from pg_settings where name like 'enable%';
+
+ -- Test that the pg_timezone_names and pg_timezone_abbrevs views are
+ -- more-or-less working. We can't test their contents in any great detail
+ -- without the outputs changing anytime IANA updates the underlying data,
+ -- but it seems reasonable to expect at least one entry per major meridian.
+ -- (At the time of writing, the actual counts are around 38 because of
+ -- zones using fractional GMT offsets, so this is a pretty loose test.)
+ select count(distinct utc_offset) >= 24 as ok from pg_timezone_names;
+ select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
+ -- Let's check the non-default timezone abbreviation sets, too
+ set timezone_abbreviations = 'Australia';
+ select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
+ set timezone_abbreviations = 'India';
+ select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
diff --git a/src/test/regress/sql/timestamptz.sql b/src/test/regress/sql/timestamptz.sql
index ab86622..5898747 100644
*** a/src/test/regress/sql/timestamptz.sql
--- b/src/test/regress/sql/timestamptz.sql
*************** SELECT '2007-12-09 07:29:59 UTC'::timest
*** 470,491 ****
SELECT '2007-12-09 07:30:00 UTC'::timestamptz AT TIME ZONE 'VET';
--
- -- Test that the pg_timezone_names and pg_timezone_abbrevs views are
- -- more-or-less working. We can't test their contents in any great detail
- -- without the outputs changing anytime IANA updates the underlying data,
- -- but it seems reasonable to expect at least one entry per major meridian.
- -- (At the time of writing, the actual counts are around 38 because of
- -- zones using fractional GMT offsets, so this is a pretty loose test.)
- --
- select count(distinct utc_offset) >= 24 as ok from pg_timezone_names;
- select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
- -- Let's check the non-default timezone abbreviation sets, too
- set timezone_abbreviations = 'Australia';
- select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
- set timezone_abbreviations = 'India';
- select count(distinct utc_offset) >= 24 as ok from pg_timezone_abbrevs;
-
- --
-- Test that AT TIME ZONE isn't misoptimized when using an index (bug #14504)
--
create temp table tmptz (f1 timestamptz primary key);
--- 470,475 ----
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers