From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-hackers@postgreSQL.org
Subject: Create a separate test file for exercising system views
Date: Sun, 29 Jan 2017 16:02:21 -0500
Message-ID: <19359.1485723741@sss.pgh.pa.us> (raw)
List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
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
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackersAttachments:
[text/x-diff] new-sysviews-test-1.patch (10.7K, ../19359.1485723741@sss.pgh.pa.us/2-new-sysviews-test-1.patch)
download | inline diff:diff --git a/src/test/regress/expected/rangefuncs.out b/src/test/regress/expected/rangefuncs.outindex 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.outindex ...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.outindex 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_scheduleindex 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_scheduleindex 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.sqlindex 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.sqlindex ...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.sqlindex 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 ----
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: tgl@sss.pgh.pa.us
Subject: Re: Create a separate test file for exercising system views
In-Reply-To: <19359.1485723741@sss.pgh.pa.us>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox