This patch includes some minor fixes and improvements to the SGML docs

for PL/PgSQL.

Neil Conway
This commit is contained in:
Bruce Momjian 2003-01-15 16:40:24 +00:00
parent ecbd8daaac
commit 3b6ca54cda
1 changed files with 32 additions and 41 deletions

View File

@ -1,5 +1,5 @@
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/plpgsql.sgml,v 1.12 2002/11/23 03:59:05 momjian Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/plpgsql.sgml,v 1.13 2003/01/15 16:40:24 momjian Exp $
--> -->
<chapter id="plpgsql"> <chapter id="plpgsql">
@ -68,6 +68,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/plpgsql.sgml,v 1.12 2002/11/23 03:59:05 mom
<acronym>SQL</acronym> expressions and <acronym>SQL</acronym> queries <acronym>SQL</acronym> expressions and <acronym>SQL</acronym> queries
used in the function are not translated immediately. used in the function are not translated immediately.
</para> </para>
<para> <para>
As each expression and <acronym>SQL</acronym> query is first used As each expression and <acronym>SQL</acronym> query is first used
in the function, the <application>PL/pgSQL</> interpreter creates in the function, the <application>PL/pgSQL</> interpreter creates
@ -84,12 +85,13 @@ $Header: /cvsroot/pgsql/doc/src/sgml/plpgsql.sgml,v 1.12 2002/11/23 03:59:05 mom
that errors in a specific expression or query may not be detected that errors in a specific expression or query may not be detected
until that part of the function is reached in execution. until that part of the function is reached in execution.
</para> </para>
<para>
Once <application>PL/pgSQL</> has made a query plan for a particular <para>
query in a function, it will re-use that plan for the life of the Once <application>PL/pgSQL</> has made a query plan for a particular
database connection. This is usually a win for performance, but it query in a function, it will re-use that plan for the life of the
can cause some problems if you dynamically database connection. This is usually a win for performance, but it
alter your database schema. For example: can cause some problems if you dynamically
alter your database schema. For example:
<programlisting> <programlisting>
CREATE FUNCTION populate() RETURNS INTEGER AS ' CREATE FUNCTION populate() RETURNS INTEGER AS '
@ -100,6 +102,7 @@ BEGIN
END; END;
' LANGUAGE 'plpgsql'; ' LANGUAGE 'plpgsql';
</programlisting> </programlisting>
If you execute the above function, it will reference the OID for If you execute the above function, it will reference the OID for
<function>my_function()</function> in the query plan produced for <function>my_function()</function> in the query plan produced for
the <command>PERFORM</command> statement. Later, if you the <command>PERFORM</command> statement. Later, if you
@ -107,7 +110,11 @@ END;
<function>populate()</function> will not be able to find <function>populate()</function> will not be able to find
<function>my_function()</function> anymore. You would then have to <function>my_function()</function> anymore. You would then have to
re-create <function>populate()</function>, or at least start a new re-create <function>populate()</function>, or at least start a new
database session so that it will be compiled afresh. database session so that it will be compiled afresh. Another way
to avoid this problem is to use <command>CREATE OR REPLACE
FUNCTION</command> when updating the definition of
<function>my_function</function> (when a function is
<quote>replaced</quote>, its OID is not changed).
</para> </para>
<para> <para>
@ -221,35 +228,17 @@ END;
<title>Developing in <application>PL/pgSQL</application></title> <title>Developing in <application>PL/pgSQL</application></title>
<para> <para>
Developing in <application>PL/pgSQL</application> is pretty straight forward, especially Developing in <application>PL/pgSQL</application> is pretty
if you have developed in other database procedural languages, straight forward, especially if you have developed in other
such as Oracle's <application>PL/SQL</application>. Two good ways of developing in database procedural languages, such as Oracle's
<application>PL/pgSQL</application> are: <application>PL/SQL</application>. One good way to develop in
<application>PL/pgSQL</> is to simply use the text editor of your
<itemizedlist> choice to create your functions, and in another window, use
<listitem> <command>psql</command> (<productname>PostgreSQL</>'s interactive
<para> monitor) to load those functions. If you are doing it this way, it
Using a text editor and reloading the file with <command>psql</command> is a good idea to write the function using <command>CREATE OR
</para> REPLACE FUNCTION</>. That way you can reload the file to update
</listitem> the function definition. For example:
<listitem>
<para>
Using <productname>PostgreSQL</>'s GUI Tool: <application>PgAccess</>
</para>
</listitem>
</itemizedlist>
</para>
<para>
One good way to develop in <application>PL/pgSQL</> is to simply
use the text editor of your choice to create your functions, and
in another window, use <command>psql</command>
(<productname>PostgreSQL</>'s interactive monitor) to load those
functions. If you are doing it this way, it is a good idea to
write the function using <command>CREATE OR REPLACE
FUNCTION</>. That way you can reload the file to update the
function definition. For example:
<programlisting> <programlisting>
CREATE OR REPLACE FUNCTION testfunc(INTEGER) RETURNS INTEGER AS ' CREATE OR REPLACE FUNCTION testfunc(INTEGER) RETURNS INTEGER AS '
.... ....
@ -268,10 +257,12 @@ end;
</para> </para>
<para> <para>
Another good way to develop in <application>PL/pgSQL</> is using Another good way to develop in <application>PL/pgSQL</> is using a
<productname>PostgreSQL</>'s GUI tool: <application>PgAccess</>. It does some GUI database access tool that facilitates development in a
nice things for you, like escaping single-quotes, and making procedural language. One example of such as a tool is
it easy to recreate and debug functions. <application>PgAccess</>, although others exist. These tools often
provide convenient features such as escaping single-quotes, and
making it easier to recreate and debug functions.
</para> </para>
</sect2> </sect2>
</sect1> </sect1>