postgresql/src/test/modules
Tom Lane d8c2a21998 Rethink recent fix for pg_dump's handling of extension config tables.
Commit 3eb3d3e78 was a few bricks shy of a load: while it correctly
set the table's "interesting" flag when deciding to dump the data of
an extension config table, it was not correct to clear that flag
if we concluded we shouldn't dump the data.  This led to the crash
reported in bug #16655, because in fact we'll traverse dumpTableSchema
anyway for all extension tables (to see if they have user-added
seclabels or RLS policies).

The right thing to do is to force "interesting" true in makeTableDataInfo,
and otherwise leave the flag alone.  (Doing it there is more future-proof
in case additional calls are added, and it also avoids setting the flag
unnecessarily if that function decides the table is non-dumpable.)

This investigation also showed that while only the --inserts code path
had an obvious failure in the case considered by 3eb3d3e78, the COPY
code path also has a problem with not having loaded table subsidiary
data.  That causes fmtCopyColumnList to silently return an empty string
instead of the correct column list.  That accidentally mostly works,
which perhaps is why we didn't notice this before.  It would only fail
if the restore column order is different from the dump column order,
which only happens in weird inheritance cases, so it's not surprising
nobody had hit the case with an extension config table.  Nonetheless,
it's a bug, and it goes a long way back, not just to v12 where the
--inserts code path started to have a problem with this.

In hopes of catching such cases a bit sooner in future, add some
Asserts that "interesting" has been set in both dumpTableData and
dumpTableSchema.  Adjust the test case added by 3eb3d3e78 so that it
checks the COPY rather than INSERT form of that bug, allowing it to
detect the longer-standing symptom.

Per bug #16655 from Cameron Daniel.  Back-patch to all supported
branches.

Discussion: https://postgr.es/m/16655-5c92d6b3a9438137@postgresql.org
Discussion: https://postgr.es/m/18048b44-3414-b983-8c7c-9165b177900d@2ndQuadrant.com
2020-10-07 12:51:04 -04:00
..
brin Add PGXS options to control TAP and isolation tests, take two 2018-12-03 09:27:35 +09:00
commit_ts Initial pgperltidy run for v12. 2019-05-22 13:36:19 -04:00
dummy_seclabel doc: Fix naming of SELinux 2020-01-10 09:37:16 +09:00
snapshot_too_old Add PGXS options to control TAP and isolation tests, take two 2018-12-03 09:27:35 +09:00
test_bloomfilter Update copyright for 2019 2019-01-02 12:44:25 -05:00
test_ddl_deparse Fix handling of CREATE TABLE LIKE with inheritance. 2020-08-21 15:00:43 -04:00
test_extensions Avoid duplicates in ALTER ... DEPENDS ON EXTENSION 2020-03-11 11:04:59 -03:00
test_integerset Fix more typos and inconsistencies in the tree 2019-06-17 16:13:16 +09:00
test_misc Avoid using INFO elevel for what are fundamentally debug messages. 2019-09-07 19:03:11 -04:00
test_parser Update copyright for 2019 2019-01-02 12:44:25 -05:00
test_pg_dump Rethink recent fix for pg_dump's handling of extension config tables. 2020-10-07 12:51:04 -04:00
test_predtest Teach optimizer's predtest.c more things about ScalarArrayOpExpr. 2019-03-01 17:14:17 -05:00
test_rbtree Update copyright for 2019 2019-01-02 12:44:25 -05:00
test_rls_hooks Fix more strcmp() calls using boolean-like comparisons for result checks 2019-04-12 10:16:49 +09:00
test_shm_mq Phase 2 pgindent run for v12. 2019-05-22 13:04:48 -04:00
unsafe_tests Move rolenames test out of the core regression tests. 2019-06-30 12:51:12 -04:00
worker_spi worker_spi needs a .gitignore file now. 2019-06-02 11:13:23 -04:00
Makefile Avoid using INFO elevel for what are fundamentally debug messages. 2019-09-07 19:03:11 -04:00
README Add an enforcement mechanism for global object names in regression tests. 2019-06-29 11:34:00 -04:00

Test extensions and libraries
=============================

src/test/modules contains PostgreSQL extensions that are primarily or entirely
intended for testing PostgreSQL and/or to serve as example code. The extensions
here aren't intended to be installed in a production server and aren't suitable
for "real work".

Furthermore, while you can do "make install" and "make installcheck" in
this directory or its children, it is NOT ADVISABLE to do so with a server
containing valuable data.  Some of these tests may have undesirable
side-effects on roles or other global objects within the tested server.
"make installcheck-world" at the top level does not recurse into this
directory.

Most extensions have their own pg_regress tests or isolationtester specs. Some
are also used by tests elsewhere in the tree.

If you're adding new hooks or other functionality exposed as C-level API this
is where to add the tests for it.