]> granicus.if.org Git - postgresql/commitdiff
Re-add FAQ item:
authorBruce Momjian <bruce@momjian.us>
Wed, 17 Oct 2007 17:34:51 +0000 (17:34 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 17 Oct 2007 17:34:51 +0000 (17:34 +0000)
    <H3 id="item4.19">4.19) Why do I get "relation with OID #####
    does not exist" errors when accessing temporary tables in PL/PgSQL
    functions?</H3>

doc/FAQ
doc/src/FAQ/FAQ.html

diff --git a/doc/FAQ b/doc/FAQ
index ef35027ab087df5feee68504dfbcd44fc5f92a24..f41d21e20d5e1e06f61739fffc2ba058429784f7 100644 (file)
--- a/doc/FAQ
+++ b/doc/FAQ
@@ -1,7 +1,7 @@
 
                 Frequently Asked Questions (FAQ) for PostgreSQL
                                        
-   Last updated: Fri Oct 12 23:36:59 EDT 2007
+   Last updated: Wed Oct 17 13:34:42 EDT 2007
    
    Current maintainer: Bruce Momjian (bruce@momjian.us)
    
    4.16) How do I perform an outer join?
    4.17) How do I perform queries using multiple databases?
    4.18) How do I return multiple rows or columns from a function?
-   4.19) What replication solutions are available?
-   4.20) Why are my table and column names not recognized in my query?
+   4.19) Why do I get "relation with OID ##### does not exist" errors
+   when accessing temporary tables in PL/PgSQL functions?
+   4.20) What replication solutions are available?
+   4.21) Why are my table and column names not recognized in my query?
    Why is capitalization not preserved?
      _________________________________________________________________
    
    It is easy using set-returning functions,
    http://www.postgresql.org/docs/techdocs.17.
    
-  4.19) What replication solutions are available?
+  4.19) Why do I get "relation with OID ##### does not exist" errors when
+  accessing temporary tables in PL/PgSQL functions?
+  
+   In PostgreSQL versions < 8.3, PL/PgSQL caches function scripts, and an
+   unfortunate side effect is that if a PL/PgSQL function accesses a
+   temporary table, and that table is later dropped and recreated, and
+   the function called again, the function will fail because the cached
+   function contents still point to the old temporary table. The solution
+   is to use EXECUTE for temporary table access in PL/PgSQL. This will
+   cause the query to be reparsed every time.
+   
+   This problem does not occur in PostgreSQL 8.3 and later.
+   
+  4.20) What replication solutions are available?
   
    Though "replication" is a single term, there are several technologies
    for doing replication, with advantages and disadvantages for each.
    There are also commercial and hardware-based replication solutions
    available supporting a variety of replication models.
    
-  4.20) Why are my table and column names not recognized in my query? Why is
+  4.21) Why are my table and column names not recognized in my query? Why is
   capitalization not preserved?
   
    The most common cause of unrecognized names is the use of
index 38baf49798bf14975ad76f691b67a46097983899..78efa16078fae6bdfd1c5d91f3e740ab068bcecd 100644 (file)
@@ -10,7 +10,7 @@
   alink="#0000ff">
     <H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
 
-    <P>Last updated: Fri Oct 12 23:36:59 EDT 2007</P>
+    <P>Last updated: Wed Oct 17 13:34:42 EDT 2007</P>
 
     <P>Current maintainer: Bruce Momjian (<A href=
     "mailto:bruce@momjian.us">bruce@momjian.us</A>)
     databases?<BR>
      <A href="#item4.18">4.18</A>) How do I return multiple rows or columns
     from a function?<BR>
-     <A href="#item4.20">4.19</A>) What replication solutions are available?<BR>
-     <A href="#item4.21">4.20</A>) Why are my table and column names not
+     <A href="#item4.19">4.19</A>) Why do I get "relation with OID #####
+    does not exist" errors when accessing temporary tables in PL/PgSQL
+    functions?<BR>
+     <A href="#item4.20">4.20</A>) What replication solutions are available?<BR>
+     <A href="#item4.21">4.21</A>) Why are my table and column names not
     recognized in my query?  Why is capitalization not preserved?<BR>
 
 
@@ -1041,7 +1044,21 @@ length</TD></TR>
     <a href="http://www.postgresql.org/docs/techdocs.17">
     http://www.postgresql.org/docs/techdocs.17</a>.</P>
 
-    <H3 id="item4.19">4.19) What replication solutions are available?
+    <H3 id="item4.19">4.19) Why do I get "relation with OID #####
+    does not exist" errors when accessing temporary tables in PL/PgSQL
+    functions?</H3>
+
+    <P>In PostgreSQL versions < 8.3, PL/PgSQL caches function scripts, and
+    an unfortunate side effect is that if a PL/PgSQL function accesses a
+    temporary table, and that table is later dropped and recreated, and
+    the function called again, the function will fail because the cached
+    function contents still point to the old temporary table. The solution
+    is to use <SMALL>EXECUTE</SMALL> for temporary table access in
+    PL/PgSQL. This will cause the query to be reparsed every time.</P>
+
+    <P>This problem does not occur in PostgreSQL 8.3 and later.</P>
+
+    <H3 id="item4.20">4.20) What replication solutions are available?
     </H3>
 
     <P>Though "replication" is a single term, there are several technologies
@@ -1063,7 +1080,7 @@ length</TD></TR>
     <P>There are also commercial and hardware-based replication solutions
     available supporting a variety of replication models.</P>
 
-    <H3 id="item4.20">4.20) Why are my table and column names not
+    <H3 id="item4.21">4.21) Why are my table and column names not
     recognized in my query?  Why is capitalization not preserved?</H3>
 
     <P>The most common cause of unrecognized names is the use of
@@ -1080,5 +1097,6 @@ length</TD></TR>
     <LI>Use only lowercase characters in identifiers</LI>
     <LI>Double-quote identifiers when referencing them in queries</LI>
     </UL>
+
   </BODY>
 </HTML>