*** a/doc/src/sgml/xfunc.sgml
--- b/doc/src/sgml/xfunc.sgml
***************
*** 153,159 **** SELECT clean_emp();
--- 153,181 ----
      (<literal>\</>) (assuming escape string syntax) in the body of
      the function (see <xref linkend="sql-syntax-strings">).
     </para>
+    
+    <sect2 id="xfunc-sql-function-Catalog-changes-within-functions">
+     <title>Catalog changes within functions</title>
  
+    <indexterm>
+     <primary>function</primary>
+     <secondary>Catalog changes within functions</secondary>
+    </indexterm>
+ 
+     <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>
+      In case of such visibility requirements, the recommended
+      workaround is to use <application>PL/PgSQL</>.
+     </para>
+    </sect2>
+    
     <sect2 id="xfunc-sql-function-arguments">
      <title>Arguments for <acronym>SQL</acronym> Functions</title>
  
