Index: doc/src/sgml/plpgsql.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql-server/doc/src/sgml/plpgsql.sgml,v
retrieving revision 1.12
diff -c -r1.12 plpgsql.sgml
*** doc/src/sgml/plpgsql.sgml 23 Nov 2002 03:59:05 -0000 1.12
--- doc/src/sgml/plpgsql.sgml 10 Jan 2003 17:59:49 -0000
***************
*** 68,73 ****
--- 68,74 ----
SQL expressions and SQL queries
used in the function are not translated immediately.
+
As each expression and SQL query is first used
in the function, the PL/pgSQL> interpreter creates
***************
*** 84,95 ****
that errors in a specific expression or query may not be detected
until that part of the function is reached in execution.
!
! Once PL/pgSQL> has made a query plan for a particular
! query in a function, it will re-use that plan for the life of the
! database connection. This is usually a win for performance, but it
! can cause some problems if you dynamically
! alter your database schema. For example:
CREATE FUNCTION populate() RETURNS INTEGER AS '
--- 85,97 ----
that errors in a specific expression or query may not be detected
until that part of the function is reached in execution.
!
!
! Once PL/pgSQL> has made a query plan for a particular
! query in a function, it will re-use that plan for the life of the
! database connection. This is usually a win for performance, but it
! can cause some problems if you dynamically
! alter your database schema. For example:
CREATE FUNCTION populate() RETURNS INTEGER AS '
***************
*** 100,105 ****
--- 102,108 ----
END;
' LANGUAGE 'plpgsql';
+
If you execute the above function, it will reference the OID for
my_function() in the query plan produced for
the PERFORM statement. Later, if you
***************
*** 107,113 ****
populate() will not be able to find
my_function() anymore. You would then have to
re-create populate(), or at least start a new
! database session so that it will be compiled afresh.
--- 110,120 ----
populate() will not be able to find
my_function() anymore. You would then have to
re-create populate(), or at least start a new
! database session so that it will be compiled afresh. Another way
! to avoid this problem is to use CREATE OR REPLACE
! FUNCTION when updating the definition of
! my_function (when a function is
! replaced
, its OID is not changed).
***************
*** 221,255 ****
Developing in PL/pgSQL
! Developing in PL/pgSQL is pretty straight forward, especially
! if you have developed in other database procedural languages,
! such as Oracle's PL/SQL. Two good ways of developing in
! PL/pgSQL are:
!
!
!
!
! Using a text editor and reloading the file with psql
!
!
!
!
!
! Using PostgreSQL>'s GUI Tool: PgAccess>
!
!
!
!
!
!
! One good way to develop in PL/pgSQL> is to simply
! use the text editor of your choice to create your functions, and
! in another window, use psql
! (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 CREATE OR REPLACE
! FUNCTION>. That way you can reload the file to update the
! function definition. For example:
CREATE OR REPLACE FUNCTION testfunc(INTEGER) RETURNS INTEGER AS '
....
--- 228,244 ----
Developing in PL/pgSQL
! Developing in PL/pgSQL is pretty
! straight forward, especially if you have developed in other
! database procedural languages, such as Oracle's
! PL/SQL. One good way to develop in
! PL/pgSQL> is to simply use the text editor of your
! choice to create your functions, and in another window, use
! psql (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 CREATE OR
! REPLACE FUNCTION>. That way you can reload the file to update
! the function definition. For example:
CREATE OR REPLACE FUNCTION testfunc(INTEGER) RETURNS INTEGER AS '
....
***************
*** 268,277 ****
! Another good way to develop in PL/pgSQL> is using
! PostgreSQL>'s GUI tool: PgAccess>. It does some
! nice things for you, like escaping single-quotes, and making
! it easy to recreate and debug functions.
--- 257,268 ----
! Another good way to develop in PL/pgSQL> is using a
! GUI database access tool that facilitates development in a
! procedural language. One example of such as a tool is
! PgAccess>, although others exist. These tools often
! provide convenient features such as escaping single-quotes, and
! making it easier to recreate and debug functions.