[REVIEW] Re: Re: BUG #9578: Undocumented behaviour for temp tables created inside query language (SQL) functions

From: Abhijit Menon-Sen <ams(at)2ndQuadrant(dot)com>
To: Haribabu Kommi <kommi(dot)haribabu(at)gmail(dot)com>
Cc: David Johnston <polobo(at)yahoo(dot)com>, pgsql-hackers(at)postgresql(dot)org
Subject: [REVIEW] Re: Re: BUG #9578: Undocumented behaviour for temp tables created inside query language (SQL) functions
Date: 2014-06-16 14:30:53
Message-ID: 20140616143053.GA13668@toroid.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

(Cc: to pgsql-bugs dropped.)

At 2014-03-17 18:24:55 +1100, kommi(dot)haribabu(at)gmail(dot)com wrote:
>
> *** a/doc/src/sgml/xfunc.sgml
> --- b/doc/src/sgml/xfunc.sgml
> ***************
> *** 153,159 **** SELECT clean_emp();
> --- 153,186 ----
> (<literal>\</>) (assuming escape string syntax) in the body of
> the function (see <xref linkend="sql-syntax-strings">).
> </para>
> +
> + <sect2 id="xfunc-sql-function-parsing-mechanism">
> + <title>Parsing mechanism of a function</title>
>
> + <indexterm>
> + <primary>function</primary>
> + <secondary>parsing mechanism</secondary>
> + </indexterm>

I suggest "Catalog changes within functions" instead of the above title.

> + <para>
> + The body of an SQL function is parsed as if it were a single - multi-part
> + statement and thus uses a constant snapshot of the system catalogs for
> + every sub-statement therein. Commands that alter the catalog will likely not
> + work as expected.
> + </para>
> +
> + <para>
> + For example: Issuing "CREATE TEMP TABLE" within an SQL function will add
> + the table to the catalog but subsequent statements in the same function will
> + not see those additions and thus the temporary table will be invisible to them.
> + </para>
> +
> + <para>
> + Thus it is generally advised that <application>PL/pgSQL</> be used, instead of
> + <acronym>SQL</acronym>, when any catalog visibilities are required in the same function.
> + </para>
> + </sect2>

I don't think that much text is warranted. I suggest something like the
following condensed wording:

<para>
The body of an SQL function is parsed as if it were a single
multi-part statement, using a constant snapshot of the system
catalogs. The effect of any commands that alter the catalogs
(e.g. "CREATE TEMP TABLE") will therefore not be visible to
subsequent commands in the function body.
</para>

<para>
The recommended workaround is to use <application>PL/PgSQL</>.
</para>

Does that seem sensible to you?

-- Abhijit

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message tgarnett 2014-06-16 16:06:02 BUG #10667: [9.2.4] Incorrect output for query involving where clause with coalesce
Previous Message xuxiaoci0819 2014-06-15 04:06:12 BUG #10655: when open ssl, the service will stop automatically

Browse pgsql-hackers by date

  From Date Subject
Next Message Kevin Grittner 2014-06-16 14:44:11 Re: API change advice: Passing plan invalidation info from the rewriter into the planner?
Previous Message Stephen Frost 2014-06-16 14:12:58 Re: API change advice: Passing plan invalidation info from the rewriter into the planner?