aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2011-03-23 16:57:41 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2011-03-23 16:57:41 -0400
commit63fe94d1652a376bdd698d7ad68477e66640e246 (patch)
tree2bc137bbb9fe4c1398c41b3de41888067e37f390
parent24cdee8606086699a634f424333b894509c5cbd0 (diff)
downloadpostgresql-63fe94d1652a376bdd698d7ad68477e66640e246.tar.gz
postgresql-63fe94d1652a376bdd698d7ad68477e66640e246.zip
Improve user-defined-aggregates documentation.
On closer inspection, that two-element initcond value seems to have been a little white lie to avoid explaining the full behavior of float8_accum. But if people are going to expect the examples to be exactly correct, I suppose we'd better explain. Per comment from Thom Brown.
-rw-r--r--doc/src/sgml/xaggr.sgml13
1 files changed, 9 insertions, 4 deletions
diff --git a/doc/src/sgml/xaggr.sgml b/doc/src/sgml/xaggr.sgml
index 1d691e7759d..82197e13816 100644
--- a/doc/src/sgml/xaggr.sgml
+++ b/doc/src/sgml/xaggr.sgml
@@ -70,7 +70,7 @@ SELECT sum(a) FROM test_complex;
expects <function>sum</function> to behave that way. We can do this simply by
omitting the <literal>initcond</literal> phrase, so that the initial state
condition is null. Ordinarily this would mean that the <literal>sfunc</literal>
- would need to check for a null state-condition input, but for
+ would need to check for a null state-condition input. But for
<function>sum</function> and some other simple aggregates like
<function>max</> and <function>min</>,
it is sufficient to insert the first nonnull input value into
@@ -95,8 +95,8 @@ SELECT sum(a) FROM test_complex;
It requires
two pieces of running state: the sum of the inputs and the count
of the number of inputs. The final result is obtained by dividing
- these quantities. Average is typically implemented by using a
- two-element array as the state value. For example,
+ these quantities. Average is typically implemented by using an
+ array as the state value. For example,
the built-in implementation of <function>avg(float8)</function>
looks like:
@@ -106,9 +106,14 @@ CREATE AGGREGATE avg (float8)
sfunc = float8_accum,
stype = float8[],
finalfunc = float8_avg,
- initcond = '{0,0,0}'
+ initcond = '{0,0}'
);
</programlisting>
+
+ (<function>float8_accum</> requires a three-element array, not just
+ two elements, because it accumulates the sum of squares as well as
+ the sum and count of the inputs. This is so that it can be used for
+ some other aggregates besides <function>avg</>.)
</para>
<para>