public inbox for [email protected]
help / color / mirror / Atom feed[PATCH v32 04/11] Add Incremental View Maintenance support to pg_dump
6+ messages / 4 participants
[nested] [flat]
* [PATCH v32 04/11] Add Incremental View Maintenance support to pg_dump
@ 2020-11-11 08:01 Yugo Nagata <[email protected]>
0 siblings, 0 replies; 6+ messages in thread
From: Yugo Nagata @ 2020-11-11 08:01 UTC (permalink / raw)
Support CREATE INCREMENTAL MATERIALIZED VIEW syntax.
---
src/bin/pg_dump/pg_dump.c | 18 +++++++++++++++---
src/bin/pg_dump/pg_dump.h | 2 ++
src/bin/pg_dump/t/002_pg_dump.pl | 18 ++++++++++++++++++
3 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index b1c4c3ec7f..92a8cbf244 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -6677,6 +6677,7 @@ getTables(Archive *fout, int *numTables)
int i_relacl;
int i_acldefault;
int i_ispartition;
+ int i_isivm;
/*
* Find all the tables and table-like objects.
@@ -6779,10 +6780,17 @@ getTables(Archive *fout, int *numTables)
if (fout->remoteVersion >= 100000)
appendPQExpBufferStr(query,
- "c.relispartition AS ispartition ");
+ "c.relispartition AS ispartition, ");
else
appendPQExpBufferStr(query,
- "false AS ispartition ");
+ "false AS ispartition, ");
+
+ if (fout->remoteVersion >= 170000)
+ appendPQExpBufferStr(query,
+ "c.relisivm AS isivm ");
+ else
+ appendPQExpBufferStr(query,
+ "false AS isivm ");
/*
* Left join to pg_depend to pick up dependency info linking sequences to
@@ -6891,6 +6899,7 @@ getTables(Archive *fout, int *numTables)
i_relacl = PQfnumber(res, "relacl");
i_acldefault = PQfnumber(res, "acldefault");
i_ispartition = PQfnumber(res, "ispartition");
+ i_isivm = PQfnumber(res, "isivm");
if (dopt->lockWaitTimeout)
{
@@ -6970,6 +6979,7 @@ getTables(Archive *fout, int *numTables)
tblinfo[i].amname = pg_strdup(PQgetvalue(res, i, i_amname));
tblinfo[i].is_identity_sequence = (strcmp(PQgetvalue(res, i, i_is_identity_sequence), "t") == 0);
tblinfo[i].ispartition = (strcmp(PQgetvalue(res, i, i_ispartition), "t") == 0);
+ tblinfo[i].isivm = (strcmp(PQgetvalue(res, i, i_isivm), "t") == 0);
/* other fields were zeroed above */
@@ -16023,9 +16033,11 @@ dumpTableSchema(Archive *fout, const TableInfo *tbinfo)
binary_upgrade_set_pg_class_oids(fout, q,
tbinfo->dobj.catId.oid, false);
- appendPQExpBuffer(q, "CREATE %s%s %s",
+ appendPQExpBuffer(q, "CREATE %s%s%s %s",
tbinfo->relpersistence == RELPERSISTENCE_UNLOGGED ?
"UNLOGGED " : "",
+ tbinfo->relkind == RELKIND_MATVIEW && tbinfo->isivm ?
+ "INCREMENTAL " : "",
reltypename,
qualrelname);
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 9bc93520b4..4e240f8832 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -325,6 +325,8 @@ typedef struct _tableInfo
int numParents; /* number of (immediate) parent tables */
struct _tableInfo **parents; /* TableInfos of immediate parents */
+ bool isivm; /* is incrementally maintainable materialized view? */
+
/*
* These fields are computed only if we decide the table is interesting
* (it's either a table to dump, or a direct parent of a dumpable table).
diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl
index f0410ce6a1..a119ec8db1 100644
--- a/src/bin/pg_dump/t/002_pg_dump.pl
+++ b/src/bin/pg_dump/t/002_pg_dump.pl
@@ -2832,6 +2832,24 @@ my %tests = (
},
},
+ 'CREATE MATERIALIZED VIEW matview_ivm' => {
+ create_order => 21,
+ create_sql => 'CREATE INCREMENTAL MATERIALIZED VIEW dump_test.matview_ivm (col1) AS
+ SELECT col1 FROM dump_test.test_table;',
+ regexp => qr/^
+ \QCREATE INCREMENTAL MATERIALIZED VIEW dump_test.matview_ivm AS\E
+ \n\s+\QSELECT col1\E
+ \n\s+\QFROM dump_test.test_table\E
+ \n\s+\QWITH NO DATA;\E
+ /xm,
+ like =>
+ { %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
+ },
+
'CREATE POLICY p1 ON test_table' => {
create_order => 22,
create_sql => 'CREATE POLICY p1 ON dump_test.test_table
--
2.25.1
--Multipart=_Sun__31_Mar_2024_22_59_31_+0900_msknEviJj08_wgqO
Content-Type: text/x-diff;
name="v32-0005-Add-Incremental-View-Maintenance-support-to-psql.patch"
Content-Disposition: attachment;
filename="v32-0005-Add-Incremental-View-Maintenance-support-to-psql.patch"
Content-Transfer-Encoding: 7bit
^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: [Proposal] Allow pg_dump to include all child tables with the root table
@ 2023-03-12 18:05 Stéphane Tachoires <[email protected]>
2023-03-13 15:15 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table Gilles Darold <[email protected]>
0 siblings, 1 reply; 6+ messages in thread
From: Stéphane Tachoires @ 2023-03-12 18:05 UTC (permalink / raw)
To: Gilles Darold <[email protected]>; +Cc: [email protected]; Tom Lane <[email protected]>; Cary Huang <[email protected]>
Hi Gilles,
On Ubuntu 22.04.2 all deb's updated, I have an error on a test
I'll try to find where and why, but I think you should know first.
1/1 postgresql:pg_dump / pg_dump/002_pg_dump ERROR 24.40s
exit status 1
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
✀
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
stderr:
# Failed test 'only_dump_measurement: should dump CREATE TABLE
test_compression'
# at /media/hddisk/stephane/postgresql/src/postgresql/src/bin/pg_dump/t/
002_pg_dump.pl line 4729.
# Review only_dump_measurement results in
/media/hddisk/stephane/postgresql/build/testrun/pg_dump/002_pg_dump/data/tmp_test_iJxJ
# Looks like you failed 1 test of 10264.
(test program exited with status code 1)
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Summary of Failures:
1/1 postgresql:pg_dump / pg_dump/002_pg_dump ERROR 24.40s exit
status 1
Ok: 0
Expected Fail: 0
Fail: 1
Unexpected Pass: 0
Skipped: 0
Timeout: 0
Join, only_dump_measurement.sql from
/media/hddisk/stephane/postgresql/build/testrun/pg_dump/002_pg_dump/data/tmp_test_iJxJ
If you need more information, please ask...
Stéphane.
Le dim. 12 mars 2023 à 10:04, Gilles Darold <[email protected]> a écrit :
> Le 11/03/2023 à 19:51, Gilles Darold a écrit :
> > Le 04/03/2023 à 20:18, Tom Lane a écrit :
> >> As noted, "childs" is bad English and "partitions" is flat out wrong
> >> (unless you change it to recurse only to partitions, which doesn't
> >> seem like a better definition). We could go with
> >> --[exclude-]table-and-children, or maybe
> >> --[exclude-]table-and-child-tables, but those are getting into
> >> carpal-tunnel-syndrome-inducing territory 🙁. I lack a better
> >> naming suggestion offhand.
> >
> >
> > In attachment is version 3 of the patch, it includes the use of
> > options suggested by Stephane and Tom:
> >
> > --table-and-children,
> >
> > --exclude-table-and-children
> >
> > --exclude-table-data-and-children.
> >
> > Documentation have been updated too.
> >
> >
> > Thanks
> >
>
> New version v4 of the patch attached with a typo in documentation fixed.
>
> --
> Gilles Darold.
>
--
"Où se posaient les hirondelles avant l'invention du téléphone ?"
-- Grégoire Lacroix
Attachments:
[application/sql] only_dump_measurement.sql (11.8K, ../../CA+gpmfKgujFY6zLddhpoa8RYVrQo4ptcHAPdijvRg0O2-Brhfw@mail.gmail.com/3-only_dump_measurement.sql)
download
^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: [Proposal] Allow pg_dump to include all child tables with the root table
2023-03-12 18:05 Re: [Proposal] Allow pg_dump to include all child tables with the root table Stéphane Tachoires <[email protected]>
@ 2023-03-13 15:15 ` Gilles Darold <[email protected]>
2023-03-14 09:49 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table Stéphane Tachoires <[email protected]>
2023-03-14 09:50 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table stephane tachoires <[email protected]>
0 siblings, 2 replies; 6+ messages in thread
From: Gilles Darold @ 2023-03-13 15:15 UTC (permalink / raw)
To: Stéphane Tachoires <[email protected]>; +Cc: [email protected]; Tom Lane <[email protected]>; Cary Huang <[email protected]>
Le 12/03/2023 à 19:05, Stéphane Tachoires a écrit :
>
> Hi Gilles,
>
> On Ubuntu 22.04.2 all deb's updated, I have an error on a test
> I'll try to find where and why, but I think you should know first.
>
> 1/1 postgresql:pg_dump / pg_dump/002_pg_dump ERROR
> 24.40s exit status 1
> ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
> ✀
> ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
> stderr:
> # Failed test 'only_dump_measurement: should dump CREATE TABLE
> test_compression'
> # at
> /media/hddisk/stephane/postgresql/src/postgresql/src/bin/pg_dump/t/002_pg_dump.pl
> <http://002_pg_dump.pl; line 4729.
> # Review only_dump_measurement results in
> /media/hddisk/stephane/postgresql/build/testrun/pg_dump/002_pg_dump/data/tmp_test_iJxJ
> # Looks like you failed 1 test of 10264.
Hi Stephane,
Odd, I do not have this error when running make installcheck, I have the
same OS version as you.
+++ tap check in src/bin/pg_dump +++
t/001_basic.pl ................ ok
t/002_pg_dump.pl .............. ok
t/003_pg_dump_with_server.pl .. ok
t/010_dump_connstr.pl ......... ok
All tests successful.
Files=4, Tests=9531, 11 wallclock secs ( 0.33 usr 0.04 sys + 3.05
cusr 1.22 csys = 4.64 CPU)
Result: PASS
Anyway this test must be fixed and this is done in version v5 of the
patch attached here.
Thanks for the review.
--
Gilles Darold
Attachments:
[text/x-patch] 0001-dump-with-child-v5.patch (47.2K, ../../[email protected]/3-0001-dump-with-child-v5.patch)
download | inline diff:
diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml
index 334e4b7fd1..8ce4d5ff41 100644
--- a/doc/src/sgml/ref/pg_dump.sgml
+++ b/doc/src/sgml/ref/pg_dump.sgml
@@ -775,6 +775,16 @@ PostgreSQL documentation
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--exclude-table-and-children=<replaceable class="parameter">pattern</replaceable></option></term>
+ <listitem>
+ <para>
+ Same as <option>-T</option>/<option>--exclude-table</option> option but automatically
+ exclude partitions or child tables of the specified tables if any.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><option>--exclude-table-data=<replaceable class="parameter">pattern</replaceable></option></term>
<listitem>
@@ -793,6 +803,17 @@ PostgreSQL documentation
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--exclude-table-data-and-children=<replaceable class="parameter">pattern</replaceable></option></term>
+ <listitem>
+ <para>
+ Same as <option>--exclude-table-data</option> but automatically
+ exclude partitions or child tables of the specified tables if any.
+ </para>
+ </listitem>
+ </varlistentry>
+
+
<varlistentry>
<term><option>--extra-float-digits=<replaceable class="parameter">ndigits</replaceable></option></term>
<listitem>
@@ -1158,6 +1179,16 @@ PostgreSQL documentation
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--table-and-children=<replaceable class="parameter">pattern</replaceable></option></term>
+ <listitem>
+ <para>
+ Same as <option>-t</option>/<option>--table</option> option but automatically
+ include partitions or child tables of the specified tables if any.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><option>--use-set-session-authorization</option></term>
<listitem>
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 4217908f84..09d37991d6 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -130,6 +130,10 @@ static SimpleOidList foreign_servers_include_oids = {NULL, NULL};
static SimpleStringList extension_include_patterns = {NULL, NULL};
static SimpleOidList extension_include_oids = {NULL, NULL};
+static SimpleStringList table_include_patterns_and_children = {NULL, NULL};
+static SimpleStringList table_exclude_patterns_and_children = {NULL, NULL};
+static SimpleStringList tabledata_exclude_patterns_and_children = {NULL, NULL};
+
static const CatalogId nilCatalogId = {0, 0};
/* override for standard extra_float_digits setting */
@@ -180,7 +184,8 @@ static void expand_foreign_server_name_patterns(Archive *fout,
static void expand_table_name_patterns(Archive *fout,
SimpleStringList *patterns,
SimpleOidList *oids,
- bool strict_names);
+ bool strict_names,
+ bool with_child_tables);
static void prohibit_crossdb_refs(PGconn *conn, const char *dbname,
const char *pattern);
@@ -421,6 +426,9 @@ main(int argc, char **argv)
{"on-conflict-do-nothing", no_argument, &dopt.do_nothing, 1},
{"rows-per-insert", required_argument, NULL, 10},
{"include-foreign-data", required_argument, NULL, 11},
+ {"table-and-children", required_argument, NULL, 12},
+ {"exclude-table-and-children", required_argument, NULL, 13},
+ {"exclude-table-data-and-children", required_argument, NULL, 14},
{NULL, 0, NULL, 0}
};
@@ -631,6 +639,19 @@ main(int argc, char **argv)
optarg);
break;
+ case 12: /* include table(s) with children */
+ simple_string_list_append(&table_include_patterns_and_children, optarg);
+ dopt.include_everything = false;
+ break;
+
+ case 13: /* exclude table(s) with children */
+ simple_string_list_append(&table_exclude_patterns_and_children, optarg);
+ break;
+
+ case 14: /* exclude table(s) data */
+ simple_string_list_append(&tabledata_exclude_patterns_and_children, optarg);
+ break;
+
default:
/* getopt_long already emitted a complaint */
pg_log_error_hint("Try \"%s --help\" for more information.", progname);
@@ -814,17 +835,34 @@ main(int argc, char **argv)
{
expand_table_name_patterns(fout, &table_include_patterns,
&table_include_oids,
- strict_names);
+ strict_names, false);
if (table_include_oids.head == NULL)
pg_fatal("no matching tables were found");
}
expand_table_name_patterns(fout, &table_exclude_patterns,
&table_exclude_oids,
- false);
+ false, false);
expand_table_name_patterns(fout, &tabledata_exclude_patterns,
&tabledata_exclude_oids,
- false);
+ false, false);
+
+ /* Expand table and children selection patterns into OID lists */
+ if (table_include_patterns_and_children.head != NULL)
+ {
+ expand_table_name_patterns(fout, &table_include_patterns_and_children,
+ &table_include_oids,
+ strict_names, true);
+ if (table_include_oids.head == NULL)
+ pg_fatal("no matching tables were found");
+ }
+ expand_table_name_patterns(fout, &table_exclude_patterns_and_children,
+ &table_exclude_oids,
+ false, true);
+
+ expand_table_name_patterns(fout, &tabledata_exclude_patterns_and_children,
+ &tabledata_exclude_oids,
+ false, true);
expand_foreign_server_name_patterns(fout, &foreign_servers_include_patterns,
&foreign_servers_include_oids);
@@ -1060,7 +1098,11 @@ help(const char *progname)
printf(_(" --disable-triggers disable triggers during data-only restore\n"));
printf(_(" --enable-row-security enable row security (dump only content user has\n"
" access to)\n"));
+ printf(_(" --exclude-table-and-children=PATTERN do NOT dump the specified table(s) including\n"
+ " child and partition tables\n"));
printf(_(" --exclude-table-data=PATTERN do NOT dump data for the specified table(s)\n"));
+ printf(_(" --exclude-table-data-and-children=PATTERN do NOT dump data for the specified\n"
+ " table(s) including child and partition tables\n"));
printf(_(" --extra-float-digits=NUM override default setting for extra_float_digits\n"));
printf(_(" --if-exists use IF EXISTS when dropping objects\n"));
printf(_(" --include-foreign-data=PATTERN\n"
@@ -1084,6 +1126,8 @@ help(const char *progname)
printf(_(" --snapshot=SNAPSHOT use given snapshot for the dump\n"));
printf(_(" --strict-names require table and/or schema include patterns to\n"
" match at least one entity each\n"));
+ printf(_(" --table-and-children=PATTERN dump the specified table(s) only including child\n"
+ " and partition tables\n"));
printf(_(" --use-set-session-authorization\n"
" use SET SESSION AUTHORIZATION commands instead of\n"
" ALTER OWNER commands to set ownership\n"));
@@ -1497,7 +1541,7 @@ expand_foreign_server_name_patterns(Archive *fout,
static void
expand_table_name_patterns(Archive *fout,
SimpleStringList *patterns, SimpleOidList *oids,
- bool strict_names)
+ bool strict_names, bool with_child_tables)
{
PQExpBuffer query;
PGresult *res;
@@ -1519,6 +1563,15 @@ expand_table_name_patterns(Archive *fout,
PQExpBufferData dbbuf;
int dotcnt;
+ /*
+ * With --include_child we look recursively to the inheritance
+ * tree to find the partitions tables of the matching include filter
+ */
+ if (with_child_tables)
+ {
+ appendPQExpBuffer(query, "WITH RECURSIVE partition_tree (relid) AS (\n");
+ }
+
/*
* Query must remain ABSOLUTELY devoid of unqualified names. This
* would be unnecessary given a pg_table_is_visible() variant taking a
@@ -1546,6 +1599,20 @@ expand_table_name_patterns(Archive *fout,
prohibit_crossdb_refs(GetConnection(fout), dbbuf.data, cell->val);
termPQExpBuffer(&dbbuf);
+ if (with_child_tables)
+ {
+ appendPQExpBuffer(query, "\n UNION ALL"
+ "\n SELECT c.oid AS relid"
+ "\n FROM partition_tree AS p"
+ "\n JOIN pg_catalog.pg_inherits AS i"
+ "\n ON (p.relid OPERATOR(pg_catalog.=) i.inhparent)"
+ "\n JOIN pg_catalog.pg_class AS c"
+ "\n ON (c.oid OPERATOR(pg_catalog.=) i.inhrelid)"
+ "\n)"
+ "\nSELECT relid FROM partition_tree");
+
+ }
+
ExecuteSqlStatement(fout, "RESET search_path");
res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
PQclear(ExecuteSqlQueryForSingleRow(fout,
diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl
index 9c354213ce..a22f27f300 100644
--- a/src/bin/pg_dump/t/002_pg_dump.pl
+++ b/src/bin/pg_dump/t/002_pg_dump.pl
@@ -393,6 +393,24 @@ my %pgdump_runs = (
'--exclude-table=dump_test.test_table', 'postgres',
],
},
+ exclude_measurement => {
+ dump_cmd => [
+ 'pg_dump', '--no-sync',
+ "--file=$tempdir/exclude_measurement.sql",
+ '--exclude-table-and-children=dump_test.measurement',
+ 'postgres',
+ ],
+ },
+ exclude_measurement_data => {
+ dump_cmd => [
+ 'pg_dump',
+ '--no-sync',
+ "--file=$tempdir/exclude_measurement_data.sql",
+ '--exclude-table-data-and-children=dump_test.measurement',
+ '--no-unlogged-table-data',
+ 'postgres',
+ ],
+ },
exclude_test_table_data => {
dump_cmd => [
'pg_dump',
@@ -487,6 +505,17 @@ my %pgdump_runs = (
'postgres',
],
},
+ only_dump_measurement => {
+ dump_cmd => [
+ 'pg_dump',
+ '--no-sync',
+ "--file=$tempdir/only_dump_measurement.sql",
+ '--table-and-children=dump_test.measurement',
+ '--lock-wait-timeout='
+ . (1000 * $PostgreSQL::Test::Utils::timeout_default),
+ 'postgres',
+ ],
+ },
role => {
dump_cmd => [
'pg_dump',
@@ -604,6 +633,7 @@ my %pgdump_runs = (
# Tests which target the 'dump_test' schema, specifically.
my %dump_test_schema_runs = (
only_dump_test_schema => 1,
+ only_dump_measurement => 1,
test_schema_plus_large_objects => 1,);
# Tests which are considered 'full' dumps by pg_dump, but there
@@ -618,6 +648,8 @@ my %full_runs = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
exclude_test_table_data => 1,
+ exclude_measurement => 1,
+ exclude_measurement_data => 1,
no_toast_compression => 1,
no_large_objects => 1,
no_owner => 1,
@@ -644,6 +676,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_privs => 1,
+ only_dump_measurement => 1,
},
},
@@ -663,6 +696,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_privs => 1,
+ only_dump_measurement => 1,
},
},
@@ -741,6 +775,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_owner => 1,
+ only_dump_measurement => 1,
},
},
@@ -754,6 +789,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_owner => 1,
+ only_dump_measurement => 1,
},
},
@@ -786,7 +822,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'ALTER OPERATOR CLASS dump_test.op_class OWNER TO' => {
@@ -799,6 +838,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_owner => 1,
+ only_dump_measurement => 1,
},
},
@@ -838,6 +878,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_owner => 1,
+ only_dump_measurement => 1,
},
},
@@ -884,6 +925,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -901,6 +943,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -920,6 +963,7 @@ my %tests = (
},
unlike => {
exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
},
},
@@ -939,6 +983,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -958,6 +1003,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -977,6 +1023,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -996,6 +1043,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -1010,6 +1058,10 @@ my %tests = (
role => 1,
section_pre_data => 1,
binary_upgrade => 1,
+ only_dump_measurement => 1,
+ },
+ unlike => {
+ exclude_measurement => 1,
},
},
@@ -1029,6 +1081,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -1050,7 +1103,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'ALTER TABLE test_table OWNER TO' => {
@@ -1064,6 +1120,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
no_owner => 1,
},
},
@@ -1083,6 +1140,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -1094,16 +1152,22 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_owner => 1,
+ only_dump_measurement => 1,
},
},
'ALTER TABLE measurement OWNER TO' => {
regexp => qr/^\QALTER TABLE dump_test.measurement OWNER TO \E.+;/m,
- like =>
- { %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
+ like => {
+ %full_runs,
+ %dump_test_schema_runs,
+ section_pre_data => 1,
+ only_dump_measurement => 1,
+ },
unlike => {
exclude_dump_test_schema => 1,
no_owner => 1,
+ exclude_measurement => 1,
},
},
@@ -1114,8 +1178,12 @@ my %tests = (
%full_runs,
role => 1,
section_pre_data => 1,
+ only_dump_measurement => 1,
+ },
+ unlike => {
+ no_owner => 1,
+ exclude_measurement => 1,
},
- unlike => { no_owner => 1, },
},
'ALTER FOREIGN TABLE foreign_table OWNER TO' => {
@@ -1126,6 +1194,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_owner => 1,
+ only_dump_measurement => 1,
},
},
@@ -1137,6 +1206,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_owner => 1,
+ only_dump_measurement => 1,
},
},
@@ -1150,6 +1220,7 @@ my %tests = (
only_dump_test_table => 1,
no_owner => 1,
role => 1,
+ only_dump_measurement => 1,
},
},
@@ -1240,6 +1311,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -1259,6 +1331,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -1271,7 +1344,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COMMENT ON COLUMN dump_test.test_second_table.col1' => {
@@ -1283,7 +1359,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COMMENT ON COLUMN dump_test.test_second_table.col2' => {
@@ -1295,7 +1374,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COMMENT ON CONVERSION dump_test.test_conversion' => {
@@ -1306,7 +1388,10 @@ my %tests = (
qr/^\QCOMMENT ON CONVERSION dump_test.test_conversion IS 'comment on test conversion';\E/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COMMENT ON COLLATION test0' => {
@@ -1372,7 +1457,10 @@ my %tests = (
qr/^\QCOMMENT ON TEXT SEARCH CONFIGURATION dump_test.alt_ts_conf1 IS 'comment on text search configuration';\E/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COMMENT ON TEXT SEARCH DICTIONARY dump_test.alt_ts_dict1' => {
@@ -1384,7 +1472,10 @@ my %tests = (
qr/^\QCOMMENT ON TEXT SEARCH DICTIONARY dump_test.alt_ts_dict1 IS 'comment on text search dictionary';\E/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COMMENT ON TEXT SEARCH PARSER dump_test.alt_ts_prs1' => {
@@ -1395,7 +1486,10 @@ my %tests = (
qr/^\QCOMMENT ON TEXT SEARCH PARSER dump_test.alt_ts_prs1 IS 'comment on text search parser';\E/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COMMENT ON TEXT SEARCH TEMPLATE dump_test.alt_ts_temp1' => {
@@ -1406,7 +1500,10 @@ my %tests = (
qr/^\QCOMMENT ON TEXT SEARCH TEMPLATE dump_test.alt_ts_temp1 IS 'comment on text search template';\E/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COMMENT ON TYPE dump_test.planets - ENUM' => {
@@ -1417,7 +1514,10 @@ my %tests = (
qr/^\QCOMMENT ON TYPE dump_test.planets IS 'comment on enum type';\E/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COMMENT ON TYPE dump_test.textrange - RANGE' => {
@@ -1428,7 +1528,10 @@ my %tests = (
qr/^\QCOMMENT ON TYPE dump_test.textrange IS 'comment on range type';\E/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COMMENT ON TYPE dump_test.int42 - Regular' => {
@@ -1439,7 +1542,10 @@ my %tests = (
qr/^\QCOMMENT ON TYPE dump_test.int42 IS 'comment on regular type';\E/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COMMENT ON TYPE dump_test.undefined - Undefined' => {
@@ -1450,7 +1556,10 @@ my %tests = (
qr/^\QCOMMENT ON TYPE dump_test.undefined IS 'comment on undefined type';\E/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'COPY test_table' => {
@@ -1474,6 +1583,7 @@ my %tests = (
exclude_test_table => 1,
exclude_test_table_data => 1,
schema_only => 1,
+ only_dump_measurement => 1,
},
},
@@ -1497,6 +1607,7 @@ my %tests = (
binary_upgrade => 1,
exclude_dump_test_schema => 1,
schema_only => 1,
+ only_dump_measurement => 1,
},
},
@@ -1532,6 +1643,7 @@ my %tests = (
binary_upgrade => 1,
exclude_dump_test_schema => 1,
schema_only => 1,
+ only_dump_measurement => 1,
},
},
@@ -1553,6 +1665,7 @@ my %tests = (
binary_upgrade => 1,
exclude_dump_test_schema => 1,
schema_only => 1,
+ only_dump_measurement => 1,
},
},
@@ -1575,6 +1688,7 @@ my %tests = (
binary_upgrade => 1,
exclude_dump_test_schema => 1,
schema_only => 1,
+ only_dump_measurement => 1,
},
},
@@ -1596,6 +1710,7 @@ my %tests = (
binary_upgrade => 1,
exclude_dump_test_schema => 1,
schema_only => 1,
+ only_dump_measurement => 1,
},
},
@@ -1617,6 +1732,7 @@ my %tests = (
binary_upgrade => 1,
exclude_dump_test_schema => 1,
schema_only => 1,
+ only_dump_measurement => 1,
},
},
@@ -1796,7 +1912,10 @@ my %tests = (
exclude_test_table => 1,
section_pre_data => 1,
},
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE CONVERSION dump_test.test_conversion' => {
@@ -1807,7 +1926,10 @@ my %tests = (
qr/^\QCREATE DEFAULT CONVERSION dump_test.test_conversion FOR 'LATIN1' TO 'UTF8' FROM iso8859_1_to_utf8;\E/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE DOMAIN dump_test.us_postal_code' => {
@@ -1829,7 +1951,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE FUNCTION dump_test.pltestlang_call_handler' => {
@@ -1846,7 +1971,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE FUNCTION dump_test.trigger_func' => {
@@ -1862,7 +1990,10 @@ my %tests = (
\$\$;/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE FUNCTION dump_test.event_trigger_func' => {
@@ -1878,7 +2009,10 @@ my %tests = (
\$\$;/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE OPERATOR FAMILY dump_test.op_family' => {
@@ -1890,7 +2024,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE OPERATOR CLASS dump_test.op_class' => {
@@ -1920,7 +2057,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
# verify that a custom operator/opclass/range type is dumped in right order
@@ -1950,7 +2090,10 @@ my %tests = (
/xms,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE OPERATOR CLASS dump_test.op_class_empty' => {
@@ -1965,7 +2108,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE EVENT TRIGGER test_event_trigger' => {
@@ -2001,6 +2147,7 @@ my %tests = (
unlike => {
exclude_test_table => 1,
exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
},
},
@@ -2019,6 +2166,7 @@ my %tests = (
unlike => {
binary_upgrade => 1,
exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
},
},
@@ -2047,7 +2195,10 @@ my %tests = (
\n\);/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TYPE dump_test.int42' => {
@@ -2056,7 +2207,10 @@ my %tests = (
regexp => qr/^\QCREATE TYPE dump_test.int42;\E/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TEXT SEARCH CONFIGURATION dump_test.alt_ts_conf1' => {
@@ -2068,7 +2222,10 @@ my %tests = (
\s+\QPARSER = pg_catalog."default" );\E/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'ALTER TEXT SEARCH CONFIGURATION dump_test.alt_ts_conf1 ...' => {
@@ -2133,7 +2290,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TEXT SEARCH TEMPLATE dump_test.alt_ts_temp1' => {
@@ -2145,7 +2305,10 @@ my %tests = (
\s+\QLEXIZE = dsimple_lexize );\E/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TEXT SEARCH PARSER dump_test.alt_ts_prs1' => {
@@ -2161,7 +2324,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TEXT SEARCH DICTIONARY dump_test.alt_ts_dict1' => {
@@ -2174,7 +2340,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE FUNCTION dump_test.int42_in' => {
@@ -2189,7 +2358,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE FUNCTION dump_test.int42_out' => {
@@ -2204,7 +2376,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE FUNCTION ... SUPPORT' => {
@@ -2218,7 +2393,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE PROCEDURE dump_test.ptest1' => {
@@ -2232,7 +2410,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TYPE dump_test.int42 populated' => {
@@ -2256,7 +2437,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TYPE dump_test.composite' => {
@@ -2273,7 +2457,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TYPE dump_test.undefined' => {
@@ -2282,7 +2469,10 @@ my %tests = (
regexp => qr/^\QCREATE TYPE dump_test.undefined;\E/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE FOREIGN DATA WRAPPER dummy' => {
@@ -2315,7 +2505,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE USER MAPPING FOR regress_dump_test_role SERVER s1' => {
@@ -2360,7 +2553,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE MATERIALIZED VIEW matview_second' => {
@@ -2376,7 +2572,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE MATERIALIZED VIEW matview_third' => {
@@ -2392,7 +2591,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE MATERIALIZED VIEW matview_fourth' => {
@@ -2408,7 +2610,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE MATERIALIZED VIEW matview_compression' => {
@@ -2429,8 +2634,11 @@ my %tests = (
lz4 => 1,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike =>
- { exclude_dump_test_schema => 1, no_toast_compression => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ no_toast_compression => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE POLICY p1 ON test_table' => {
@@ -2451,6 +2659,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -2471,6 +2680,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -2491,6 +2701,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -2511,6 +2722,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -2531,6 +2743,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -2551,6 +2764,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -2746,7 +2960,10 @@ my %tests = (
regexp => qr/^CREATE SCHEMA dump_test;/m,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE SCHEMA dump_test_second_schema' => {
@@ -2791,6 +3008,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
+ only_dump_measurement => 1,
},
},
@@ -2806,7 +3024,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE test_second_table' => {
@@ -2823,7 +3044,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE test_compression' => {
@@ -2843,8 +3067,11 @@ my %tests = (
lz4 => 1,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike =>
- { exclude_dump_test_schema => 1, no_toast_compression => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ no_toast_compression => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE measurement PARTITIONED BY' => {
@@ -2867,11 +3094,16 @@ my %tests = (
\)\n
\QPARTITION BY RANGE (logdate);\E\n
/xm,
- like =>
- { %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
+ like => {
+ %full_runs,
+ %dump_test_schema_runs,
+ section_pre_data => 1,
+ only_dump_measurement => 1,
+ },
unlike => {
binary_upgrade => 1,
exclude_dump_test_schema => 1,
+ exclude_measurement => 1,
},
},
@@ -2898,6 +3130,10 @@ my %tests = (
section_pre_data => 1,
role => 1,
binary_upgrade => 1,
+ only_dump_measurement => 1,
+ },
+ unlike => {
+ exclude_measurement => 1,
},
},
@@ -2913,9 +3149,40 @@ my %tests = (
/xm,
like => {
%full_runs, %dump_test_schema_runs, section_post_data => 1,
+ only_dump_measurement => 1,
},
unlike => {
exclude_dump_test_schema => 1,
+ exclude_measurement => 1,
+ },
+ },
+
+ 'COPY measurement' => {
+ create_order => 93,
+ create_sql => 'INSERT INTO dump_test.measurement (city_id, logdate, peaktemp, unitsales) '
+ . "VALUES (1, '2006-02-12', 35, 1);",
+ regexp => qr/^
+ \QCOPY dump_test_second_schema.measurement_y2006m2 (city_id, logdate, peaktemp, unitsales) FROM stdin;\E
+ \n(?:1\t2006-02-12\t35\t1\n)\\\.\n
+ /xm,
+ like => {
+ %full_runs,
+ %dump_test_schema_runs,
+ data_only => 1,
+ only_dump_measurement => 1,
+ section_data => 1,
+ only_dump_test_schema => 1,
+ role_parallel => 1,
+ role => 1,
+ },
+ unlike => {
+ binary_upgrade => 1,
+ schema_only => 1,
+ exclude_measurement => 1,
+ only_dump_test_schema => 1,
+ test_schema_plus_large_objects => 1,
+ exclude_measurement => 1,
+ exclude_measurement_data => 1,
},
},
@@ -2943,6 +3210,10 @@ my %tests = (
section_post_data => 1,
role => 1,
binary_upgrade => 1,
+ only_dump_measurement => 1,
+ },
+ unlike => {
+ exclude_measurement => 1,
},
},
@@ -2955,6 +3226,10 @@ my %tests = (
section_post_data => 1,
role => 1,
binary_upgrade => 1,
+ only_dump_measurement => 1,
+ },
+ unlike => {
+ exclude_measurement => 1,
},
},
@@ -2967,6 +3242,10 @@ my %tests = (
section_post_data => 1,
role => 1,
binary_upgrade => 1,
+ only_dump_measurement => 1,
+ },
+ unlike => {
+ exclude_measurement => 1,
},
},
@@ -3002,7 +3281,11 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { binary_upgrade => 1, exclude_dump_test_schema => 1, },
+ unlike => {
+ binary_upgrade => 1,
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE test_fourth_table_zero_col' => {
@@ -3015,7 +3298,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE test_fifth_table' => {
@@ -3038,7 +3324,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE test_sixth_table' => {
@@ -3057,7 +3346,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE test_seventh_table' => {
@@ -3076,7 +3368,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE test_table_identity' => {
@@ -3102,7 +3397,10 @@ my %tests = (
/xms,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE test_table_generated' => {
@@ -3119,7 +3417,10 @@ my %tests = (
/xms,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE test_table_generated_child1 (without local columns)' => {
@@ -3136,6 +3437,7 @@ my %tests = (
unlike => {
binary_upgrade => 1,
exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
},
},
@@ -3165,6 +3467,7 @@ my %tests = (
unlike => {
binary_upgrade => 1,
exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
},
},
@@ -3187,7 +3490,10 @@ my %tests = (
/xms,
like =>
{ %full_runs, %dump_test_schema_runs, section_post_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE test_inheritance_parent' => {
@@ -3205,7 +3511,10 @@ my %tests = (
/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE TABLE test_inheritance_child' => {
@@ -3227,6 +3536,7 @@ my %tests = (
unlike => {
binary_upgrade => 1,
exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
},
},
@@ -3239,7 +3549,10 @@ my %tests = (
/xms,
like =>
{ %full_runs, %dump_test_schema_runs, section_post_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE STATISTICS extended_stats_options' => {
@@ -3251,7 +3564,10 @@ my %tests = (
/xms,
like =>
{ %full_runs, %dump_test_schema_runs, section_post_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'ALTER STATISTICS extended_stats_options' => {
@@ -3263,7 +3579,10 @@ my %tests = (
/xms,
like =>
{ %full_runs, %dump_test_schema_runs, section_post_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE STATISTICS extended_stats_expression' => {
@@ -3275,7 +3594,10 @@ my %tests = (
/xms,
like =>
{ %full_runs, %dump_test_schema_runs, section_post_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE SEQUENCE test_table_col1_seq' => {
@@ -3294,7 +3616,10 @@ my %tests = (
only_dump_test_table => 1,
section_pre_data => 1,
},
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE INDEX ON ONLY measurement' => {
@@ -3324,6 +3649,8 @@ my %tests = (
schema_only => 1,
section_post_data => 1,
test_schema_plus_large_objects => 1,
+ only_dump_measurement => 1,
+ exclude_measurement_data => 1,
},
unlike => {
exclude_dump_test_schema => 1,
@@ -3332,6 +3659,7 @@ my %tests = (
pg_dumpall_globals_clean => 1,
role => 1,
section_pre_data => 1,
+ exclude_measurement => 1,
},
},
@@ -3345,9 +3673,16 @@ my %tests = (
\QALTER TABLE ONLY dump_test.measurement\E \n^\s+
\QADD CONSTRAINT measurement_pkey PRIMARY KEY (city_id, logdate);\E
/xm,
- like =>
- { %full_runs, %dump_test_schema_runs, section_post_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ like => {
+ %full_runs,
+ %dump_test_schema_runs,
+ section_post_data => 1,
+ only_dump_measurement => 1,
+ },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ exclude_measurement => 1,
+ },
},
'CREATE INDEX ... ON measurement_y2006_m2' => {
@@ -3358,6 +3693,10 @@ my %tests = (
%full_runs,
role => 1,
section_post_data => 1,
+ only_dump_measurement => 1,
+ },
+ unlike => {
+ exclude_measurement => 1,
},
},
@@ -3369,6 +3708,11 @@ my %tests = (
%full_runs,
role => 1,
section_post_data => 1,
+ only_dump_measurement => 1,
+ exclude_measurement_data => 1,
+ },
+ unlike => {
+ exclude_measurement => 1,
},
},
@@ -3398,6 +3742,8 @@ my %tests = (
role => 1,
schema_only => 1,
section_post_data => 1,
+ only_dump_measurement => 1,
+ exclude_measurement_data => 1,
},
unlike => {
only_dump_test_schema => 1,
@@ -3406,6 +3752,7 @@ my %tests = (
pg_dumpall_globals_clean => 1,
section_pre_data => 1,
test_schema_plus_large_objects => 1,
+ exclude_measurement => 1,
},
},
@@ -3421,7 +3768,10 @@ my %tests = (
\n\s+\QWITH LOCAL CHECK OPTION;\E/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
'ALTER VIEW test_view SET DEFAULT' => {
@@ -3432,7 +3782,10 @@ my %tests = (
\QALTER TABLE ONLY dump_test.test_view ALTER COLUMN col1 SET DEFAULT 1;\E/xm,
like =>
{ %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
- unlike => { exclude_dump_test_schema => 1, },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ only_dump_measurement => 1,
+ },
},
# FIXME
@@ -3604,6 +3957,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_privs => 1,
+ only_dump_measurement => 1,
},
},
@@ -3619,6 +3973,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_privs => 1,
+ only_dump_measurement => 1,
},
},
@@ -3634,6 +3989,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_privs => 1,
+ only_dump_measurement => 1,
},
},
@@ -3649,6 +4005,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_privs => 1,
+ only_dump_measurement => 1,
},
},
@@ -3678,6 +4035,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_privs => 1,
+ only_dump_measurement => 1,
},
},
@@ -3688,11 +4046,16 @@ my %tests = (
TO regress_dump_test_role;',
regexp =>
qr/^\QGRANT SELECT ON TABLE dump_test.measurement TO regress_dump_test_role;\E/m,
- like =>
- { %full_runs, %dump_test_schema_runs, section_pre_data => 1, },
+ like => {
+ %full_runs,
+ %dump_test_schema_runs,
+ section_pre_data => 1,
+ only_dump_measurement => 1,
+ },
unlike => {
exclude_dump_test_schema => 1,
no_privs => 1,
+ exclude_measurement => 1,
},
},
@@ -3710,8 +4073,12 @@ my %tests = (
%full_runs,
role => 1,
section_pre_data => 1,
+ only_dump_measurement => 1,
+ },
+ unlike => {
+ no_privs => 1,
+ exclude_measurement => 1,
},
- unlike => { no_privs => 1, },
},
'GRANT ALL ON LARGE OBJECT ...' => {
@@ -3755,6 +4122,7 @@ my %tests = (
unlike => {
exclude_dump_test_schema => 1,
no_privs => 1,
+ only_dump_measurement => 1,
},
},
@@ -3856,6 +4224,7 @@ my %tests = (
binary_upgrade => 1,
exclude_dump_test_schema => 1,
schema_only => 1,
+ only_dump_measurement => 1,
},
},
@@ -3871,6 +4240,7 @@ my %tests = (
binary_upgrade => 1,
exclude_dump_test_schema => 1,
schema_only => 1,
+ only_dump_measurement => 1,
},
},
@@ -3958,6 +4328,7 @@ my %tests = (
only_dump_test_table => 1,
role => 1,
section_pre_data => 1,
+ only_dump_measurement => 1,
},
unlike => { no_privs => 1, },
},
@@ -3996,8 +4367,11 @@ my %tests = (
like => {
%full_runs, %dump_test_schema_runs, section_pre_data => 1,
},
- unlike =>
- { exclude_dump_test_schema => 1, no_table_access_method => 1 },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ no_table_access_method => 1,
+ only_dump_measurement => 1,
+ },
},
'CREATE MATERIALIZED VIEW regress_pg_dump_matview_am' => {
@@ -4017,8 +4391,11 @@ my %tests = (
like => {
%full_runs, %dump_test_schema_runs, section_pre_data => 1,
},
- unlike =>
- { exclude_dump_test_schema => 1, no_table_access_method => 1 },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ no_table_access_method => 1,
+ only_dump_measurement => 1,
+ },
});
#########################################
^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: [Proposal] Allow pg_dump to include all child tables with the root table
2023-03-12 18:05 Re: [Proposal] Allow pg_dump to include all child tables with the root table Stéphane Tachoires <[email protected]>
2023-03-13 15:15 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table Gilles Darold <[email protected]>
@ 2023-03-14 09:49 ` Stéphane Tachoires <[email protected]>
1 sibling, 0 replies; 6+ messages in thread
From: Stéphane Tachoires @ 2023-03-14 09:49 UTC (permalink / raw)
To: Gilles Darold <[email protected]>; +Cc: [email protected]; Tom Lane <[email protected]>; Cary Huang <[email protected]>
Hi Gilles,
V5 is ok (aside for LLVM 14 deprecated warnings, but that's another
problem) with meson compile and meson test on Ubuntu 20.04.2.
Code fits well and looks standart, --help explain what it does clearly, and
documentation is ok (but as a Français, I'm not an expert in English).
Stéphane
Le lun. 13 mars 2023 à 16:15, Gilles Darold <[email protected]> a écrit :
> Le 12/03/2023 à 19:05, Stéphane Tachoires a écrit :
>
>
> Hi Gilles,
>
> On Ubuntu 22.04.2 all deb's updated, I have an error on a test
> I'll try to find where and why, but I think you should know first.
>
> 1/1 postgresql:pg_dump / pg_dump/002_pg_dump ERROR
> 24.40s exit status 1
> ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
> ✀
> ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
> stderr:
> # Failed test 'only_dump_measurement: should dump CREATE TABLE
> test_compression'
> # at /media/hddisk/stephane/postgresql/src/postgresql/src/bin/pg_dump/t/
> 002_pg_dump.pl line 4729.
> # Review only_dump_measurement results in
> /media/hddisk/stephane/postgresql/build/testrun/pg_dump/002_pg_dump/data/tmp_test_iJxJ
> # Looks like you failed 1 test of 10264.
>
>
> Hi Stephane,
>
>
> Odd, I do not have this error when running make installcheck, I have the
> same OS version as you.
>
>
> +++ tap check in src/bin/pg_dump +++
> t/001_basic.pl ................ ok
> t/002_pg_dump.pl .............. ok
> t/003_pg_dump_with_server.pl .. ok
> t/010_dump_connstr.pl ......... ok
> All tests successful.
> Files=4, Tests=9531, 11 wallclock secs ( 0.33 usr 0.04 sys + 3.05
> cusr 1.22 csys = 4.64 CPU)
> Result: PASS
>
> Anyway this test must be fixed and this is done in version v5 of the patch
> attached here.
>
>
> Thanks for the review.
>
> --
> Gilles Darold
>
>
--
"Où se posaient les hirondelles avant l'invention du téléphone ?"
-- Grégoire Lacroix
^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: [Proposal] Allow pg_dump to include all child tables with the root table
2023-03-12 18:05 Re: [Proposal] Allow pg_dump to include all child tables with the root table Stéphane Tachoires <[email protected]>
2023-03-13 15:15 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table Gilles Darold <[email protected]>
@ 2023-03-14 09:50 ` stephane tachoires <[email protected]>
2023-03-14 10:44 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table Gilles Darold <[email protected]>
1 sibling, 1 reply; 6+ messages in thread
From: stephane tachoires @ 2023-03-14 09:50 UTC (permalink / raw)
To: [email protected]; +Cc: Gilles Darold <[email protected]>
The following review has been posted through the commitfest application:
make installcheck-world: tested, passed
Implements feature: tested, passed
Spec compliant: tested, passed
Documentation: tested, passed
V5 is ok (aside for LLVM 14 deprecated warnings, but that's another problem) with meson compile and meson test on Ubuntu 20.04.2.
Code fits well and looks standart, --help explain what it does clearly, and documentation is ok (but as a Français, I'm not an expert in English).
^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: [Proposal] Allow pg_dump to include all child tables with the root table
2023-03-12 18:05 Re: [Proposal] Allow pg_dump to include all child tables with the root table Stéphane Tachoires <[email protected]>
2023-03-13 15:15 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table Gilles Darold <[email protected]>
2023-03-14 09:50 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table stephane tachoires <[email protected]>
@ 2023-03-14 10:44 ` Gilles Darold <[email protected]>
0 siblings, 0 replies; 6+ messages in thread
From: Gilles Darold @ 2023-03-14 10:44 UTC (permalink / raw)
To: stephane tachoires <[email protected]>; [email protected]; +Cc: Gilles Darold <[email protected]>
Le 14/03/2023 à 10:50, stephane tachoires a écrit :
> The following review has been posted through the commitfest application:
> make installcheck-world: tested, passed
> Implements feature: tested, passed
> Spec compliant: tested, passed
> Documentation: tested, passed
>
> V5 is ok (aside for LLVM 14 deprecated warnings, but that's another problem) with meson compile and meson test on Ubuntu 20.04.2.
> Code fits well and looks standart, --help explain what it does clearly, and documentation is ok (but as a Français, I'm not an expert in English).
Thanks Stepane, I've changed commit fest status to "Ready for committers".
--
Gilles Darold
^ permalink raw reply [nested|flat] 6+ messages in thread
end of thread, other threads:[~2023-03-14 10:44 UTC | newest]
Thread overview: 6+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2020-11-11 08:01 [PATCH v32 04/11] Add Incremental View Maintenance support to pg_dump Yugo Nagata <[email protected]>
2023-03-12 18:05 Re: [Proposal] Allow pg_dump to include all child tables with the root table Stéphane Tachoires <[email protected]>
2023-03-13 15:15 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table Gilles Darold <[email protected]>
2023-03-14 09:49 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table Stéphane Tachoires <[email protected]>
2023-03-14 09:50 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table stephane tachoires <[email protected]>
2023-03-14 10:44 ` Re: [Proposal] Allow pg_dump to include all child tables with the root table Gilles Darold <[email protected]>
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox