Kyle Bateman <[EMAIL PROTECTED]> writes:
> Sorry, you're right.  I have now confirmed that this only happens when 
> updating via a view/rule (as you suspected).  Attached is a minimalist 
> sql file that demonstrates the same error message from a blank 
> database.  I'm using 8.1.0.  I'm pretty sure this problem did not exist 
> on 8.0.3.

Fixed --- attached is the patch if you need it right away.  Thanks for
the report!

                        regards, tom lane


Index: src/backend/rewrite/rewriteHandler.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v
retrieving revision 1.159
diff -c -r1.159 rewriteHandler.c
*** src/backend/rewrite/rewriteHandler.c        22 Nov 2005 18:17:19 -0000      
1.159
--- src/backend/rewrite/rewriteHandler.c        23 Nov 2005 17:10:01 -0000
***************
*** 374,379 ****
--- 374,387 ----
  
                        sub_action->jointree->fromlist =
                                list_concat(newjointree, 
sub_action->jointree->fromlist);
+ 
+                       /*
+                        * There could have been some SubLinks in newjointree, 
in which
+                        * case we'd better mark the sub_action correctly.
+                        */
+                       if (parsetree->hasSubLinks && !sub_action->hasSubLinks)
+                               sub_action->hasSubLinks =
+                                       checkExprHasSubLink((Node *) 
newjointree);
                }
        }
  
Index: src/backend/rewrite/rewriteManip.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v
retrieving revision 1.93
diff -c -r1.93 rewriteManip.c
*** src/backend/rewrite/rewriteManip.c  22 Nov 2005 18:17:19 -0000      1.93
--- src/backend/rewrite/rewriteManip.c  23 Nov 2005 17:10:01 -0000
***************
*** 930,935 ****
--- 930,936 ----
                   RangeTblEntry *target_rte,
                   List *targetlist, int event, int update_varno)
  {
+       Node       *result;
        ResolveNew_context context;
  
        context.target_varno = target_varno;
***************
*** 944,951 ****
         * Must be prepared to start with a Query or a bare expression tree; if
         * it's a Query, we don't want to increment sublevels_up.
         */
!       return query_or_expression_tree_mutator(node,
!                                                                               
        ResolveNew_mutator,
!                                                                               
        (void *) &context,
!                                                                               
        0);
  }
--- 945,965 ----
         * Must be prepared to start with a Query or a bare expression tree; if
         * it's a Query, we don't want to increment sublevels_up.
         */
!       result = query_or_expression_tree_mutator(node,
!                                                                               
          ResolveNew_mutator,
!                                                                               
          (void *) &context,
!                                                                               
          0);
! 
!       if (context.inserted_sublink)
!       {
!               if (IsA(result, Query))
!                       ((Query *) result)->hasSubLinks = true;
!               /*
!                * Note: if we're called on a non-Query node then it's the 
caller's
!                * responsibility to update hasSubLinks in the ancestor Query.
!                * This is pretty fragile and perhaps should be rethought ...
!                */
!       }
! 
!       return result;
  }

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to