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   |/

Reply via email to