]> granicus.if.org Git - postgresql/commitdiff
Add note about how to make the SRF detoasted arguments live accross calls.
authorFujii Masao <fujii@postgresql.org>
Thu, 26 Feb 2015 06:48:07 +0000 (15:48 +0900)
committerFujii Masao <fujii@postgresql.org>
Thu, 26 Feb 2015 06:48:07 +0000 (15:48 +0900)
Andrew Gierth and Ali Akbar

doc/src/sgml/xfunc.sgml

index 97a56562d3e40293b8bee91df37de90f974844a2..b85f2adc453eb5bd862d5b317952fee5eb738ede 100644 (file)
@@ -2981,6 +2981,20 @@ SRF_RETURN_DONE(funcctx)
      <structfield>multi_call_memory_ctx</> while doing the first-call setup.
     </para>
 
+    <warning>
+     <para>
+      While the actual arguments to the function remain unchanged between
+      calls, if you detoast the argument values (which is normally done
+      transparently by the
+      <function>PG_GETARG_<replaceable>xxx</replaceable></function> macro)
+      in the transient context then the detoasted copies will be freed on
+      each cycle. Accordingly, if you keep references to such values in
+      your <structfield>user_fctx</>, you must either copy them into the
+      <structfield>multi_call_memory_ctx</> after detoasting, or ensure
+      that you detoast the values only in that context.
+     </para>
+    </warning>
+
     <para>
      A complete pseudo-code example looks like the following:
 <programlisting>