diff --git a/doc/src/sgml/ref/declare.sgml b/doc/src/sgml/ref/declare.sgml index 641971149a..e93b4cf594 100644 --- a/doc/src/sgml/ref/declare.sgml +++ b/doc/src/sgml/ref/declare.sgml @@ -1,5 +1,5 @@ @@ -228,6 +228,20 @@ DECLARE name [ BINARY ] [ INSENSITI SCROLL may not be specified in this case. + + + Scrollable and WITH HOLD cursors may give unexpected + results if they invoke any volatile functions (see ). When a previously fetched row is + re-fetched, the functions might be re-executed, perhaps leading to + results different from the first time. One workaround for such cases + is to declare the cursor WITH HOLD and commit the + transaction before reading any rows from it. This will force the + entire output of the cursor to be materialized in temporary storage, + so that volatile functions are executed exactly once for each row. + + + If the cursor's query includes FOR UPDATE or FOR SHARE, then returned rows are locked at the time they are first