From 9aac62305b13a5cf7e8ded2020ffca25f9d666be Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Mon, 10 Jun 2002 19:47:57 +0000
Subject: [PATCH] Add item for plpgsql temp table access.

---
 doc/FAQ              | 15 ++++++++++++++-
 doc/src/FAQ/FAQ.html | 41 ++++++++++++++++++++++++++---------------
 2 files changed, 40 insertions(+), 16 deletions(-)

diff --git a/doc/FAQ b/doc/FAQ
index 2c4193a833d..c8889819495 100644
--- a/doc/FAQ
+++ b/doc/FAQ
@@ -1,7 +1,7 @@
 
                 Frequently Asked Questions (FAQ) for PostgreSQL
                                        
-   Last updated: Fri Apr 26 23:03:46 EDT 2002
+   Last updated: Mon Jun 10 15:47:38 EDT 2002
    
    Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
    
@@ -92,6 +92,8 @@
    4.23) How do I perform an outer join?
    4.24) How do I perform queries using multiple databases?
    4.25) How do I return multiple rows or columns from a function?
+   4.26) Why can't I reliably create/drop temporary tables in PL/PgSQL
+   functions?
    
                             Extending PostgreSQL
                                       
@@ -1031,6 +1033,17 @@ SELECT *
    http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html,
    section 23.7.3.3.
    
+    4.26) Why can't I reliably create/drop temporary tables in PL/PgSQL
+    functions?
+    
+   PL/PgSQL caches function contents, 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.
+   
                             Extending PostgreSQL
                                       
     5.1) I wrote a user-defined function. When I run it in psql, why does it
diff --git a/doc/src/FAQ/FAQ.html b/doc/src/FAQ/FAQ.html
index 988aa3f968f..8ca6cd9c454 100644
--- a/doc/src/FAQ/FAQ.html
+++ b/doc/src/FAQ/FAQ.html
@@ -14,7 +14,7 @@
   alink="#0000ff">
     <H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
 
-    <P>Last updated: Fri Apr 26 23:03:46 EDT 2002</P>
+    <P>Last updated: Mon Jun 10 15:47:38 EDT 2002</P>
 
     <P>Current maintainer: Bruce Momjian (<A href=
     "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
@@ -138,7 +138,9 @@
      <A href="#4.24">4.24</A>) How do I perform queries using multiple
     databases?<BR>
      <A href="#4.25">4.25</A>) How do I return multiple rows or columns
-     from a function?<BR>
+    from a function?<BR>
+     <A href="#4.26">4.26</A>) Why can't I reliably create/drop
+    temporary tables in PL/PgSQL functions?<BR>
      
 
     <H2 align="center">Extending PostgreSQL</H2>
@@ -742,7 +744,7 @@
     <P>You can also compile with profiling to see what functions are
     taking execution time. The backend profile files will be deposited
     in the <I>pgsql/data/base/dbname</I> directory. The client profile
-    file will be put in the client's current directory.  Linux requires
+    file will be put in the client's current directory. Linux requires
     a compile with <I>-DLINUX_PROFILE</I> for proper profiling.</P>
 
     <H4><A name="3.8">3.8</A>) Why do I get <I>"Sorry, too many
@@ -900,9 +902,9 @@
     databases, and users are defined?</H4>
 
     <P><I>psql</I> has a variety of backslash commands to show such
-    information. Use \? to see them.  There are also system tables
-    beginning with <i>pg_</i> that describe these too.  Also, <i>psql
-    -l</i> will list all databases.</P>
+    information. Use \? to see them. There are also system tables
+    beginning with <I>pg_</I> that describe these too. Also, <I>psql
+    -l</I> will list all databases.</P>
 
     <P>Also try the file <I>pgsql/src/tutorial/syscat.source</I>. It
     illustrates many of the <SMALL>SELECT</SMALL>s needed to get
@@ -1307,16 +1309,25 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     different databases and merge the information that way.</P>
     <HR>
 
-    <H4><A name="4.25">4.25</A>) How do I return multiple rows or columns
-     from a function?</H4>
+    <H4><A name="4.25">4.25</A>) How do I return multiple rows or
+    columns from a function?</H4>
+
+    <P>You can return result sets from PL/pgSQL functions using
+    <I>refcursors</I>. See <A href=
+    "http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html">
+    http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html,</A>
+    section 23.7.3.3.</P>
+
+    <H4><A href="#4.26">4.26</A>) Why can't I reliably create/drop
+    temporary tables in PL/PgSQL functions?</H4>
+    PL/PgSQL caches function contents, 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>You can return result sets from PL/pgSQL functions using
-     <i>refcursors</i>. See <a
-     href="http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html">
-     http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html,</a>
-     section 23.7.3.3.</P>
-
-     
     <H2 align="center">Extending PostgreSQL</H2>
 
     <H4><A name="5.1">5.1</A>) I wrote a user-defined function. When I
-- 
GitLab