From 28bcc344b52823ccbbe9abd52cd5b18f08e8136a Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Mon, 14 Mar 2005 18:57:33 +0000
Subject: [PATCH] Make pg_dump emit a useful error message, instead of just
 dumping core, if it finds a pg_rewrite entry for which there is no pg_class
 entry. Per report from Andrew Slobodyanyk.

---
 src/bin/pg_dump/pg_dump.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index e2fb805d59e..f4e7c6e5f1f 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -12,7 +12,7 @@
  *	by PostgreSQL
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.403 2005/02/22 04:39:35 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.404 2005/03/14 18:57:33 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -3154,6 +3154,13 @@ getRules(int *numRules)
 		ruleinfo[i].dobj.name = strdup(PQgetvalue(res, i, i_rulename));
 		ruletableoid = atooid(PQgetvalue(res, i, i_ruletable));
 		ruleinfo[i].ruletable = findTableByOid(ruletableoid);
+		if (ruleinfo[i].ruletable == NULL)
+		{
+			write_msg(NULL, "failed sanity check, parent table OID %u of pg_rewrite entry OID %u not found\n",
+					  ruletableoid,
+					  ruleinfo[i].dobj.catId.oid);
+			exit_nicely();
+		}
 		ruleinfo[i].dobj.namespace = ruleinfo[i].ruletable->dobj.namespace;
 		ruleinfo[i].ev_type = *(PQgetvalue(res, i, i_ev_type));
 		ruleinfo[i].is_instead = *(PQgetvalue(res, i, i_is_instead)) == 't';
-- 
GitLab