summaryrefslogtreecommitdiff
path: root/src/backend/catalog/genbki.pl
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2021-06-30 08:29:03 +0200
committerPeter Eisentraut <peter@eisentraut.org>2021-06-30 08:50:26 +0200
commit735dc1a09469002fd659a4b1f5d582377b318977 (patch)
tree47c6c23e548e1173059bd746649259dea2feeae6 /src/backend/catalog/genbki.pl
parentab5e48f153cfea2c571dc177ae96faf4ab072b8e (diff)
downloadpostgresql-735dc1a09469002fd659a4b1f5d582377b318977.tar.gz
genbki stricter error handling
Instead of just writing warnings for invalid cross-catalog lookups, count the errors and error out at the end. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://www.postgresql.org/message-id/flat/ca8ee41d-241b-1bf3-71f0-aaf1add6d3c5%40enterprisedb.com
Diffstat (limited to 'src/backend/catalog/genbki.pl')
-rw-r--r--src/backend/catalog/genbki.pl19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl
index 9687376093..b82df348b8 100644
--- a/src/backend/catalog/genbki.pl
+++ b/src/backend/catalog/genbki.pl
@@ -26,6 +26,8 @@ my $output_path = '';
my $major_version;
my $include_path;
+my $num_errors = 0;
+
GetOptions(
'output:s' => \$output_path,
'set-version:s' => \$major_version,
@@ -796,7 +798,7 @@ Catalog::RenameTempFile($schemafile, $tmpext);
Catalog::RenameTempFile($fk_info_file, $tmpext);
Catalog::RenameTempFile($constraints_file, $tmpext);
-exit 0;
+exit ($num_errors != 0 ? 1 : 0);
#################### Subroutines ########################
@@ -1024,8 +1026,7 @@ sub morph_row_for_schemapg
# Perform OID lookups on an array of OID names.
# If we don't have a unique value to substitute, warn and
# leave the entry unchanged.
-# (A warning seems sufficient because the bootstrap backend will reject
-# non-numeric values anyway. So we might as well detect multiple problems
+# (We don't exit right away so that we can detect multiple problems
# within this genbki.pl run.)
sub lookup_oids
{
@@ -1045,16 +1046,20 @@ sub lookup_oids
push @lookupoids, $lookupname;
if ($lookupname eq '-' or $lookupname eq '0')
{
- warn sprintf
- "invalid zero OID reference in %s.dat field %s line %s\n",
- $catname, $attname, $bki_values->{line_number}
- if !$lookup_opt;
+ if (!$lookup_opt)
+ {
+ warn sprintf
+ "invalid zero OID reference in %s.dat field %s line %s\n",
+ $catname, $attname, $bki_values->{line_number};
+ $num_errors++;
+ }
}
else
{
warn sprintf
"unresolved OID reference \"%s\" in %s.dat field %s line %s\n",
$lookupname, $catname, $attname, $bki_values->{line_number};
+ $num_errors++;
}
}
}