At 16:29 17/09/00 -0400, Tom Lane wrote:
>
>create table test (f1 int);
>create view v_test as select f1+1 as f11 from test;
>drop table test;
>
>then run pg_dump:
>
>getTables(): SELECT failed. Explanation from backend: 'ERROR: cache
lookup of attribute 1 in relation 400384 failed
>'.
>
FWIW, the patch below causes get_viewdef to produce:
ERROR: pg_get_viewdef: cache lookup of attribute 1 in relation 19136
failed for rule v_test
when a table has been deleted.
----------------------------------------------------
--- ruleutils.c.orig Wed Sep 13 22:08:04 2000
+++ ruleutils.c Mon Sep 18 20:59:25 2000
@@ -72,6 +72,7 @@
* ----------
*/
static char *rulename = NULL;
+static char *toproutinename = NULL;
static void *plan_getrule = NULL;
static char *query_getrule = "SELECT * FROM pg_rewrite WHERE rulename = $1";
static void *plan_getview = NULL;
@@ -134,6 +135,12 @@
int len;
/* ----------
+ * We use this in reporting errors.
+ * ----------
+ */
+ toproutinename = "pg_get_ruledef";
+
+ /* ----------
* We need the rules name somewhere deep down: rulename is global
* ----------
*/
@@ -234,6 +241,12 @@
char *name;
/* ----------
+ * We use this in reporting errors.
+ * ----------
+ */
+ toproutinename = "pg_get_viewdef";
+
+ /* ----------
* We need the view name somewhere deep down
* ----------
*/
@@ -337,6 +350,13 @@
char *sep;
/* ----------
+ * We use this in reporting errors.
+ * ----------
+ */
+ toproutinename = "pg_get_indexdef";
+ rulename = NULL;
+
+ /* ----------
* Connect to SPI manager
* ----------
*/
@@ -554,6 +574,13 @@
Form_pg_shadow user_rec;
/* ----------
+ * We use this in reporting errors.
+ * ----------
+ */
+ toproutinename = "pg_get_userbyid";
+ rulename = NULL;
+
+ /* ----------
* Allocate space for the result
* ----------
*/
@@ -2014,8 +2041,16 @@
ObjectIdGetDatum(relid), (Datum) attnum,
0, 0);
if (!HeapTupleIsValid(atttup))
- elog(ERROR, "cache lookup of attribute %d in relation %u failed",
- attnum, relid);
+ {
+ if (rulename != NULL)
+ {
+ elog(ERROR, "%s: cache lookup of attribute %d in relation %u
+failed for
rule %s",
+ toproutinename, attnum, relid, rulename);
+ } else {
+ elog(ERROR, "%s: cache lookup of attribute %d in relation %u
+failed",
+ toproutinename, attnum, relid);
+ }
+ }
attStruct = (Form_pg_attribute) GETSTRUCT(atttup);
return pstrdup(NameStr(attStruct->attname));
----------------------------------------------------------------
Philip Warner | __---_____
Albatross Consulting Pty. Ltd. |----/ - \
(A.B.N. 75 008 659 498) | /(@) ______---_
Tel: (+61) 0500 83 82 81 | _________ \
Fax: (+61) 0500 83 82 82 | ___________ |
Http://www.rhyme.com.au | / \|
| --________--
PGP key available upon request, | /
and from pgp5.ai.mit.edu:11371 |/