Add item for plpgsql temp table access.

This commit is contained in:
Bruce Momjian 2002-06-10 19:47:57 +00:00
parent 090319b20f
commit 9aac62305b
2 changed files with 39 additions and 15 deletions

15
doc/FAQ
View File

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

View File

@ -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>
<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.
<H2 align="center">Extending PostgreSQL</H2>
<H4><A name="5.1">5.1</A>) I wrote a user-defined function. When I