1 <!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.479 2009/05/13 21:53:41 tgl Exp $ -->
3 <chapter id="functions">
4 <title>Functions and Operators</title>
6 <indexterm zone="functions">
7 <primary>function</primary>
10 <indexterm zone="functions">
11 <primary>operator</primary>
15 <productname>PostgreSQL</productname> provides a large number of
16 functions and operators for the built-in data types. Users can also
17 define their own functions and operators, as described in
18 <xref linkend="server-programming">. The
19 <application>psql</application> commands <command>\df</command> and
20 <command>\do</command> can be used to list all
21 available functions and operators, respectively.
25 If you are concerned about portability then note that most of
26 the functions and operators described in this chapter, with the
27 exception of the most trivial arithmetic and comparison operators
28 and some explicitly marked functions, are not specified by the
29 <acronym>SQL</acronym> standard. Some of this extended functionality
30 is present in other <acronym>SQL</acronym> database management
31 systems, and in many cases this functionality is compatible and
32 consistent between the various implementations. This chapter is also
33 not exhaustive; additional functions appear in relevant sections of
38 <sect1 id="functions-logical">
39 <title>Logical Operators</title>
41 <indexterm zone="functions-logical">
42 <primary>operator</primary>
43 <secondary>logical</secondary>
47 <primary>Boolean</primary>
48 <secondary>operators</secondary>
49 <see>operators, logical</see>
53 The usual logical operators are available:
56 <primary>AND (operator)</primary>
60 <primary>OR (operator)</primary>
64 <primary>NOT (operator)</primary>
68 <primary>conjunction</primary>
72 <primary>disjunction</primary>
76 <primary>negation</primary>
80 <member><literal>AND</></member>
81 <member><literal>OR</></member>
82 <member><literal>NOT</></member>
85 <acronym>SQL</acronym> uses a three-valued Boolean logic where the null value represents
86 <quote>unknown</quote>. Observe the following truth tables:
92 <entry><replaceable>a</replaceable></entry>
93 <entry><replaceable>b</replaceable></entry>
94 <entry><replaceable>a</replaceable> AND <replaceable>b</replaceable></entry>
95 <entry><replaceable>a</replaceable> OR <replaceable>b</replaceable></entry>
149 <entry><replaceable>a</replaceable></entry>
150 <entry>NOT <replaceable>a</replaceable></entry>
175 The operators <literal>AND</literal> and <literal>OR</literal> are
176 commutative, that is, you can switch the left and right operand
177 without affecting the result. But see <xref
178 linkend="syntax-express-eval"> for more information about the
179 order of evaluation of subexpressions.
183 <sect1 id="functions-comparison">
184 <title>Comparison Operators</title>
186 <indexterm zone="functions-comparison">
187 <primary>comparison</primary>
188 <secondary>operators</secondary>
192 The usual comparison operators are available, shown in <xref
193 linkend="functions-comparison-table">.
196 <table id="functions-comparison-table">
197 <title>Comparison Operators</title>
201 <entry>Operator</entry>
202 <entry>Description</entry>
208 <entry> <literal><</literal> </entry>
209 <entry>less than</entry>
213 <entry> <literal>></literal> </entry>
214 <entry>greater than</entry>
218 <entry> <literal><=</literal> </entry>
219 <entry>less than or equal to</entry>
223 <entry> <literal>>=</literal> </entry>
224 <entry>greater than or equal to</entry>
228 <entry> <literal>=</literal> </entry>
233 <entry> <literal><></literal> or <literal>!=</literal> </entry>
234 <entry>not equal</entry>
242 The <literal>!=</literal> operator is converted to
243 <literal><></literal> in the parser stage. It is not
244 possible to implement <literal>!=</literal> and
245 <literal><></literal> operators that do different things.
250 Comparison operators are available for all relevant data types.
251 All comparison operators are binary operators that
252 return values of type <type>boolean</type>; expressions like
253 <literal>1 < 2 < 3</literal> are not valid (because there is
254 no <literal><</literal> operator to compare a Boolean value with
255 <literal>3</literal>).
260 <primary>BETWEEN</primary>
262 In addition to the comparison operators, the special
263 <token>BETWEEN</token> construct is available:
265 <replaceable>a</replaceable> BETWEEN <replaceable>x</replaceable> AND <replaceable>y</replaceable>
269 <replaceable>a</replaceable> >= <replaceable>x</replaceable> AND <replaceable>a</replaceable> <= <replaceable>y</replaceable>
271 Note <token>BETWEEN</token> is inclusive in comparing the endpoint
272 values. <literal>NOT BETWEEN</literal> does the opposite comparison:
274 <replaceable>a</replaceable> NOT BETWEEN <replaceable>x</replaceable> AND <replaceable>y</replaceable>
278 <replaceable>a</replaceable> < <replaceable>x</replaceable> OR <replaceable>a</replaceable> > <replaceable>y</replaceable>
281 <primary>BETWEEN SYMMETRIC</primary>
283 <token>BETWEEN SYMMETRIC</> is the same as <literal>BETWEEN</>
284 except there is no requirement that the argument to the left of <literal>AND</> be less than
285 or equal to the argument on the right; the proper range is automatically determined.
290 <primary>IS NULL</primary>
293 <primary>IS NOT NULL</primary>
296 <primary>ISNULL</primary>
299 <primary>NOTNULL</primary>
301 To check whether a value is or is not null, use the constructs:
303 <replaceable>expression</replaceable> IS NULL
304 <replaceable>expression</replaceable> IS NOT NULL
306 or the equivalent, but nonstandard, constructs:
308 <replaceable>expression</replaceable> ISNULL
309 <replaceable>expression</replaceable> NOTNULL
311 <indexterm><primary>null value</primary><secondary>comparing</secondary></indexterm>
315 Do <emphasis>not</emphasis> write
316 <literal><replaceable>expression</replaceable> = NULL</literal>
317 because <literal>NULL</> is not <quote>equal to</quote>
318 <literal>NULL</>. (The null value represents an unknown value,
319 and it is not known whether two unknown values are equal.) This
320 behavior conforms to the SQL standard.
325 Some applications might expect
326 <literal><replaceable>expression</replaceable> = NULL</literal>
327 returns true if <replaceable>expression</replaceable> evaluates to
328 the null value. It is highly recommended that these applications
329 be modified to comply with the SQL standard. However, if that
330 cannot be done the <xref linkend="guc-transform-null-equals">
331 configuration variable is available. If it is enabled,
332 <productname>PostgreSQL</productname> will convert <literal>x =
333 NULL</literal> clauses to <literal>x IS NULL</literal>.
339 If the <replaceable>expression</replaceable> is row-valued, then
340 <literal>IS NULL</> is true when the row expression itself is null
341 or when all the row's fields are null, while
342 <literal>IS NOT NULL</> is true when the row expression itself is non-null
343 and all the row's fields are non-null. Because of this behavior,
344 <literal>IS NULL</> and <literal>IS NOT NULL</> do not always return
345 inverse results for row-valued expressions, i.e., a row-valued
346 expression that contains both NULL and non-null values will return false
348 This definition conforms to the SQL standard, and is a change from the
349 inconsistent behavior exhibited by <productname>PostgreSQL</productname>
350 versions prior to 8.2.
356 <primary>IS DISTINCT FROM</primary>
359 <primary>IS NOT DISTINCT FROM</primary>
361 Ordinary comparison operators yield null (signifying <quote>unknown</>)
362 when either input is null, not true or false, e.g., <literal>7 =
364 Another way to do comparisons is with the
365 <literal>IS <optional> NOT </> DISTINCT FROM</literal> construct:
367 <replaceable>expression</replaceable> IS DISTINCT FROM <replaceable>expression</replaceable>
368 <replaceable>expression</replaceable> IS NOT DISTINCT FROM <replaceable>expression</replaceable>
370 For non-null inputs, <literal>IS DISTINCT FROM</literal> is
371 the same as the <literal><></> operator. However, if both
372 inputs are null it returns false, and if only one input is
373 null it returns true. Similarly, <literal>IS NOT DISTINCT
374 FROM</literal> is identical to <literal>=</literal> for non-null
375 inputs, but it returns true when both inputs are null, and false when only
376 one input is null. Thus, these constructs effectively act as though null
377 were a normal data value, rather than <quote>unknown</>.
382 <primary>IS TRUE</primary>
385 <primary>IS NOT TRUE</primary>
388 <primary>IS FALSE</primary>
391 <primary>IS NOT FALSE</primary>
394 <primary>IS UNKNOWN</primary>
397 <primary>IS NOT UNKNOWN</primary>
399 Boolean values can also be tested using the constructs
401 <replaceable>expression</replaceable> IS TRUE
402 <replaceable>expression</replaceable> IS NOT TRUE
403 <replaceable>expression</replaceable> IS FALSE
404 <replaceable>expression</replaceable> IS NOT FALSE
405 <replaceable>expression</replaceable> IS UNKNOWN
406 <replaceable>expression</replaceable> IS NOT UNKNOWN
408 These will always return true or false, never a null value, even when the
410 A null input is treated as the logical value <quote>unknown</>.
411 Notice that <literal>IS UNKNOWN</> and <literal>IS NOT UNKNOWN</> are
412 effectively the same as <literal>IS NULL</literal> and
413 <literal>IS NOT NULL</literal>, respectively, except that the input
414 expression must be of Boolean type.
417 <!-- IS OF does not conform to the ISO SQL behavior, so it is undocumented here
420 <primary>IS OF</primary>
423 <primary>IS NOT OF</primary>
425 It is possible to check the data type of an expression using the
428 <replaceable>expression</replaceable> IS OF (typename, ...)
429 <replaceable>expression</replaceable> IS NOT OF (typename, ...)
431 They return a boolean value based on whether the expression's data
432 type is one of the listed data types.
438 <sect1 id="functions-math">
439 <title>Mathematical Functions and Operators</title>
442 Mathematical operators are provided for many
443 <productname>PostgreSQL</productname> types. For types that support
444 only limited mathematical operations
445 (e.g., date/time types) we
446 describe the actual behavior in subsequent sections.
450 <xref linkend="functions-math-op-table"> shows the available mathematical operators.
453 <table id="functions-math-op-table">
454 <title>Mathematical Operators</title>
459 <entry>Operator</entry>
460 <entry>Description</entry>
461 <entry>Example</entry>
462 <entry>Result</entry>
468 <entry> <literal>+</literal> </entry>
469 <entry>addition</entry>
470 <entry><literal>2 + 3</literal></entry>
471 <entry><literal>5</literal></entry>
475 <entry> <literal>-</literal> </entry>
476 <entry>subtraction</entry>
477 <entry><literal>2 - 3</literal></entry>
478 <entry><literal>-1</literal></entry>
482 <entry> <literal>*</literal> </entry>
483 <entry>multiplication</entry>
484 <entry><literal>2 * 3</literal></entry>
485 <entry><literal>6</literal></entry>
489 <entry> <literal>/</literal> </entry>
490 <entry>division (integer division truncates the result)</entry>
491 <entry><literal>4 / 2</literal></entry>
492 <entry><literal>2</literal></entry>
496 <entry> <literal>%</literal> </entry>
497 <entry>modulo (remainder)</entry>
498 <entry><literal>5 % 4</literal></entry>
499 <entry><literal>1</literal></entry>
503 <entry> <literal>^</literal> </entry>
504 <entry>exponentiation</entry>
505 <entry><literal>2.0 ^ 3.0</literal></entry>
506 <entry><literal>8</literal></entry>
510 <entry> <literal>|/</literal> </entry>
511 <entry>square root</entry>
512 <entry><literal>|/ 25.0</literal></entry>
513 <entry><literal>5</literal></entry>
517 <entry> <literal>||/</literal> </entry>
518 <entry>cube root</entry>
519 <entry><literal>||/ 27.0</literal></entry>
520 <entry><literal>3</literal></entry>
524 <entry> <literal>!</literal> </entry>
525 <entry>factorial</entry>
526 <entry><literal>5 !</literal></entry>
527 <entry><literal>120</literal></entry>
531 <entry> <literal>!!</literal> </entry>
532 <entry>factorial (prefix operator)</entry>
533 <entry><literal>!! 5</literal></entry>
534 <entry><literal>120</literal></entry>
538 <entry> <literal>@</literal> </entry>
539 <entry>absolute value</entry>
540 <entry><literal>@ -5.0</literal></entry>
541 <entry><literal>5</literal></entry>
545 <entry> <literal>&</literal> </entry>
546 <entry>bitwise AND</entry>
547 <entry><literal>91 & 15</literal></entry>
548 <entry><literal>11</literal></entry>
552 <entry> <literal>|</literal> </entry>
553 <entry>bitwise OR</entry>
554 <entry><literal>32 | 3</literal></entry>
555 <entry><literal>35</literal></entry>
559 <entry> <literal>#</literal> </entry>
560 <entry>bitwise XOR</entry>
561 <entry><literal>17 # 5</literal></entry>
562 <entry><literal>20</literal></entry>
566 <entry> <literal>~</literal> </entry>
567 <entry>bitwise NOT</entry>
568 <entry><literal>~1</literal></entry>
569 <entry><literal>-2</literal></entry>
573 <entry> <literal><<</literal> </entry>
574 <entry>bitwise shift left</entry>
575 <entry><literal>1 << 4</literal></entry>
576 <entry><literal>16</literal></entry>
580 <entry> <literal>>></literal> </entry>
581 <entry>bitwise shift right</entry>
582 <entry><literal>8 >> 2</literal></entry>
583 <entry><literal>2</literal></entry>
591 The bitwise operators work only on integral data types, whereas
592 the others are available for all numeric data types. The bitwise
593 operators are also available for the bit
594 string types <type>bit</type> and <type>bit varying</type>, as
595 shown in <xref linkend="functions-bit-string-op-table">.
599 <xref linkend="functions-math-func-table"> shows the available
600 mathematical functions. In the table, <literal>dp</literal>
601 indicates <type>double precision</type>. Many of these functions
602 are provided in multiple forms with different argument types.
603 Except where noted, any given form of a function returns the same
604 data type as its argument.
605 The functions working with <type>double precision</type> data are mostly
606 implemented on top of the host system's C library; accuracy and behavior in
607 boundary cases can therefore vary depending on the host system.
611 <primary>abs</primary>
614 <primary>cbrt</primary>
617 <primary>ceiling</primary>
620 <primary>degrees</primary>
623 <primary>div</primary>
626 <primary>exp</primary>
629 <primary>floor</primary>
632 <primary>ln</primary>
635 <primary>log</primary>
638 <primary>mod</primary>
641 <primary>pi</primary>
644 <primary>power</primary>
647 <primary>radians</primary>
650 <primary>random</primary>
653 <primary>round</primary>
656 <primary>setseed</primary>
659 <primary>sign</primary>
662 <primary>sqrt</primary>
665 <primary>trunc</primary>
668 <primary>width_bucket</primary>
671 <table id="functions-math-func-table">
672 <title>Mathematical Functions</title>
676 <entry>Function</entry>
677 <entry>Return Type</entry>
678 <entry>Description</entry>
679 <entry>Example</entry>
680 <entry>Result</entry>
686 <entry><literal><function>abs</>(<replaceable>x</replaceable>)</literal></entry>
687 <entry>(same as input)</entry>
688 <entry>absolute value</entry>
689 <entry><literal>abs(-17.4)</literal></entry>
690 <entry><literal>17.4</literal></entry>
694 <entry><literal><function>cbrt</function>(<type>dp</type>)</literal></entry>
695 <entry><type>dp</type></entry>
696 <entry>cube root</entry>
697 <entry><literal>cbrt(27.0)</literal></entry>
698 <entry><literal>3</literal></entry>
702 <entry><literal><function>ceil</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
703 <entry>(same as input)</entry>
704 <entry>smallest integer not less than argument</entry>
705 <entry><literal>ceil(-42.8)</literal></entry>
706 <entry><literal>-42</literal></entry>
710 <entry><literal><function>ceiling</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
711 <entry>(same as input)</entry>
712 <entry>smallest integer not less than argument (alias for <function>ceil</function>)</entry>
713 <entry><literal>ceiling(-95.3)</literal></entry>
714 <entry><literal>-95</literal></entry>
718 <entry><literal><function>degrees</function>(<type>dp</type>)</literal></entry>
719 <entry><type>dp</type></entry>
720 <entry>radians to degrees</entry>
721 <entry><literal>degrees(0.5)</literal></entry>
722 <entry><literal>28.6478897565412</literal></entry>
726 <entry><literal><function>div</function>(<parameter>y</parameter> <type>numeric</>,
727 <parameter>x</parameter> <type>numeric</>)</literal></entry>
728 <entry><type>numeric</></entry>
729 <entry>integer quotient of <parameter>y</parameter>/<parameter>x</parameter></entry>
730 <entry><literal>div(9,4)</literal></entry>
731 <entry><literal>2</literal></entry>
735 <entry><literal><function>exp</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
736 <entry>(same as input)</entry>
737 <entry>exponential</entry>
738 <entry><literal>exp(1.0)</literal></entry>
739 <entry><literal>2.71828182845905</literal></entry>
743 <entry><literal><function>floor</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
744 <entry>(same as input)</entry>
745 <entry>largest integer not greater than argument</entry>
746 <entry><literal>floor(-42.8)</literal></entry>
747 <entry><literal>-43</literal></entry>
751 <entry><literal><function>ln</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
752 <entry>(same as input)</entry>
753 <entry>natural logarithm</entry>
754 <entry><literal>ln(2.0)</literal></entry>
755 <entry><literal>0.693147180559945</literal></entry>
759 <entry><literal><function>log</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
760 <entry>(same as input)</entry>
761 <entry>base 10 logarithm</entry>
762 <entry><literal>log(100.0)</literal></entry>
763 <entry><literal>2</literal></entry>
767 <entry><literal><function>log</function>(<parameter>b</parameter> <type>numeric</type>,
768 <parameter>x</parameter> <type>numeric</type>)</literal></entry>
769 <entry><type>numeric</type></entry>
770 <entry>logarithm to base <parameter>b</parameter></entry>
771 <entry><literal>log(2.0, 64.0)</literal></entry>
772 <entry><literal>6.0000000000</literal></entry>
776 <entry><literal><function>mod</function>(<parameter>y</parameter>,
777 <parameter>x</parameter>)</literal></entry>
778 <entry>(same as argument types)</entry>
779 <entry>remainder of <parameter>y</parameter>/<parameter>x</parameter></entry>
780 <entry><literal>mod(9,4)</literal></entry>
781 <entry><literal>1</literal></entry>
785 <entry><literal><function>pi</function>()</literal></entry>
786 <entry><type>dp</type></entry>
787 <entry><quote>π</quote> constant</entry>
788 <entry><literal>pi()</literal></entry>
789 <entry><literal>3.14159265358979</literal></entry>
793 <entry><literal><function>power</function>(<parameter>a</parameter> <type>dp</type>,
794 <parameter>b</parameter> <type>dp</type>)</literal></entry>
795 <entry><type>dp</type></entry>
796 <entry><parameter>a</> raised to the power of <parameter>b</parameter></entry>
797 <entry><literal>power(9.0, 3.0)</literal></entry>
798 <entry><literal>729</literal></entry>
802 <entry><literal><function>power</function>(<parameter>a</parameter> <type>numeric</type>,
803 <parameter>b</parameter> <type>numeric</type>)</literal></entry>
804 <entry><type>numeric</type></entry>
805 <entry><parameter>a</> raised to the power of <parameter>b</parameter></entry>
806 <entry><literal>power(9.0, 3.0)</literal></entry>
807 <entry><literal>729</literal></entry>
811 <entry><literal><function>radians</function>(<type>dp</type>)</literal></entry>
812 <entry><type>dp</type></entry>
813 <entry>degrees to radians</entry>
814 <entry><literal>radians(45.0)</literal></entry>
815 <entry><literal>0.785398163397448</literal></entry>
819 <entry><literal><function>random</function>()</literal></entry>
820 <entry><type>dp</type></entry>
821 <entry>random value between 0.0 and 1.0, inclusive</entry>
822 <entry><literal>random()</literal></entry>
827 <entry><literal><function>round</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
828 <entry>(same as input)</entry>
829 <entry>round to nearest integer</entry>
830 <entry><literal>round(42.4)</literal></entry>
831 <entry><literal>42</literal></entry>
835 <entry><literal><function>round</function>(<parameter>v</parameter> <type>numeric</type>, <parameter>s</parameter> <type>int</type>)</literal></entry>
836 <entry><type>numeric</type></entry>
837 <entry>round to <parameter>s</parameter> decimal places</entry>
838 <entry><literal>round(42.4382, 2)</literal></entry>
839 <entry><literal>42.44</literal></entry>
843 <entry><literal><function>setseed</function>(<type>dp</type>)</literal></entry>
844 <entry><type>void</type></entry>
845 <entry>set seed for subsequent <literal>random()</literal> calls (value between -1.0 and
846 1.0, inclusive)</entry>
847 <entry><literal>setseed(0.54823)</literal></entry>
852 <entry><literal><function>sign</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
853 <entry>(same as input)</entry>
854 <entry>sign of the argument (-1, 0, +1)</entry>
855 <entry><literal>sign(-8.4)</literal></entry>
856 <entry><literal>-1</literal></entry>
860 <entry><literal><function>sqrt</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
861 <entry>(same as input)</entry>
862 <entry>square root</entry>
863 <entry><literal>sqrt(2.0)</literal></entry>
864 <entry><literal>1.4142135623731</literal></entry>
868 <entry><literal><function>trunc</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
869 <entry>(same as input)</entry>
870 <entry>truncate toward zero</entry>
871 <entry><literal>trunc(42.8)</literal></entry>
872 <entry><literal>42</literal></entry>
876 <entry><literal><function>trunc</function>(<parameter>v</parameter> <type>numeric</type>, <parameter>s</parameter> <type>int</type>)</literal></entry>
877 <entry><type>numeric</type></entry>
878 <entry>truncate to <parameter>s</parameter> decimal places</entry>
879 <entry><literal>trunc(42.4382, 2)</literal></entry>
880 <entry><literal>42.43</literal></entry>
884 <entry><literal><function>width_bucket</function>(<parameter>op</parameter> <type>numeric</type>, <parameter>b1</parameter> <type>numeric</type>, <parameter>b2</parameter> <type>numeric</type>, <parameter>count</parameter> <type>int</type>)</literal></entry>
885 <entry><type>int</type></entry>
886 <entry>return the bucket to which <parameter>operand</> would
887 be assigned in an equidepth histogram with <parameter>count</>
888 buckets, in the range <parameter>b1</> to <parameter>b2</></entry>
889 <entry><literal>width_bucket(5.35, 0.024, 10.06, 5)</literal></entry>
890 <entry><literal>3</literal></entry>
894 <entry><literal><function>width_bucket</function>(<parameter>op</parameter> <type>dp</type>, <parameter>b1</parameter> <type>dp</type>, <parameter>b2</parameter> <type>dp</type>, <parameter>count</parameter> <type>int</type>)</literal></entry>
895 <entry><type>int</type></entry>
896 <entry>return the bucket to which <parameter>operand</> would
897 be assigned in an equidepth histogram with <parameter>count</>
898 buckets, in the range <parameter>b1</> to <parameter>b2</></entry>
899 <entry><literal>width_bucket(5.35, 0.024, 10.06, 5)</literal></entry>
900 <entry><literal>3</literal></entry>
907 Finally, <xref linkend="functions-math-trig-table"> shows the
908 available trigonometric functions. All trigonometric functions
909 take arguments and return values of type <type>double
914 <primary>acos</primary>
917 <primary>asin</primary>
920 <primary>atan</primary>
923 <primary>atan2</primary>
926 <primary>cos</primary>
929 <primary>cot</primary>
932 <primary>sin</primary>
935 <primary>tan</primary>
938 <table id="functions-math-trig-table">
939 <title>Trigonometric Functions</title>
944 <entry>Function</entry>
945 <entry>Description</entry>
951 <entry><literal><function>acos</function>(<replaceable>x</replaceable>)</literal></entry>
952 <entry>inverse cosine</entry>
956 <entry><literal><function>asin</function>(<replaceable>x</replaceable>)</literal></entry>
957 <entry>inverse sine</entry>
961 <entry><literal><function>atan</function>(<replaceable>x</replaceable>)</literal></entry>
962 <entry>inverse tangent</entry>
966 <entry><literal><function>atan2</function>(<replaceable>y</replaceable>,
967 <replaceable>x</replaceable>)</literal></entry>
968 <entry>inverse tangent of
969 <literal><replaceable>y</replaceable>/<replaceable>x</replaceable></literal></entry>
973 <entry><literal><function>cos</function>(<replaceable>x</replaceable>)</literal></entry>
974 <entry>cosine</entry>
978 <entry><literal><function>cot</function>(<replaceable>x</replaceable>)</literal></entry>
979 <entry>cotangent</entry>
983 <entry><literal><function>sin</function>(<replaceable>x</replaceable>)</literal></entry>
988 <entry><literal><function>tan</function>(<replaceable>x</replaceable>)</literal></entry>
989 <entry>tangent</entry>
998 <sect1 id="functions-string">
999 <title>String Functions and Operators</title>
1002 This section describes functions and operators for examining and
1003 manipulating string values. Strings in this context include values
1004 of the types <type>character</type>, <type>character varying</type>,
1005 and <type>text</type>. Unless otherwise noted, all
1006 of the functions listed below work on all of these types, but be
1007 wary of potential effects of automatic space-padding when using the
1008 <type>character</type> type. Some functions also exist
1009 natively for the bit-string types.
1013 <acronym>SQL</acronym> defines some string functions with a special syntax
1014 wherein certain key words rather than commas are used to separate the
1015 arguments. Details are in <xref linkend="functions-string-sql">.
1016 These functions are also implemented using the regular syntax for
1017 function invocation. (See <xref linkend="functions-string-other">.)
1022 Before <productname>PostgreSQL</productname> 8.3, these functions would
1023 silently accept values of several non-string data types as well, due to
1024 the presence of implicit coercions from those data types to
1025 <type>text</>. Those coercions have been removed because they frequently
1026 caused surprising behaviors. However, the string concatenation operator
1027 (<literal>||</>) still accepts non-string input, so long as at least one
1028 input is of a string type, as shown in <xref
1029 linkend="functions-string-sql">. For other cases, insert an explicit
1030 coercion to <type>text</> if you need to duplicate the previous behavior.
1035 <primary>bit_length</primary>
1038 <primary>char_length</primary>
1041 <primary>lower</primary>
1044 <primary>octet_length</primary>
1047 <primary>overlay</primary>
1050 <primary>position</primary>
1053 <primary>substring</primary>
1056 <primary>trim</primary>
1059 <primary>upper</primary>
1062 <table id="functions-string-sql">
1063 <title><acronym>SQL</acronym> String Functions and Operators</title>
1067 <entry>Function</entry>
1068 <entry>Return Type</entry>
1069 <entry>Description</entry>
1070 <entry>Example</entry>
1071 <entry>Result</entry>
1077 <entry><literal><parameter>string</parameter> <literal>||</literal>
1078 <parameter>string</parameter></literal></entry>
1079 <entry> <type>text</type> </entry>
1081 String concatenation
1083 <primary>character string</primary>
1084 <secondary>concatenation</secondary>
1087 <entry><literal>'Post' || 'greSQL'</literal></entry>
1088 <entry><literal>PostgreSQL</literal></entry>
1093 <literal><parameter>string</parameter> <literal>||</literal>
1094 <parameter>non-string</parameter></literal>
1096 <literal><parameter>non-string</parameter> <literal>||</literal>
1097 <parameter>string</parameter></literal>
1099 <entry> <type>text</type> </entry>
1101 String concatenation with one non-string input
1103 <entry><literal>'Value: ' || 42</literal></entry>
1104 <entry><literal>Value: 42</literal></entry>
1108 <entry><literal><function>bit_length</function>(<parameter>string</parameter>)</literal></entry>
1109 <entry><type>int</type></entry>
1110 <entry>Number of bits in string</entry>
1111 <entry><literal>bit_length('jose')</literal></entry>
1112 <entry><literal>32</literal></entry>
1116 <entry><literal><function>char_length</function>(<parameter>string</parameter>)</literal> or <literal><function>character_length</function>(<parameter>string</parameter>)</literal></entry>
1117 <entry><type>int</type></entry>
1119 Number of characters in string
1121 <primary>character string</primary>
1122 <secondary>length</secondary>
1125 <primary>length</primary>
1126 <secondary sortas="character string">of a character string</secondary>
1127 <see>character string, length</see>
1130 <entry><literal>char_length('jose')</literal></entry>
1131 <entry><literal>4</literal></entry>
1135 <entry><literal><function>lower</function>(<parameter>string</parameter>)</literal></entry>
1136 <entry><type>text</type></entry>
1137 <entry>Convert string to lower case</entry>
1138 <entry><literal>lower('TOM')</literal></entry>
1139 <entry><literal>tom</literal></entry>
1143 <entry><literal><function>octet_length</function>(<parameter>string</parameter>)</literal></entry>
1144 <entry><type>int</type></entry>
1145 <entry>Number of bytes in string</entry>
1146 <entry><literal>octet_length('jose')</literal></entry>
1147 <entry><literal>4</literal></entry>
1151 <entry><literal><function>overlay</function>(<parameter>string</parameter> placing <parameter>string</parameter> from <type>int</type> <optional>for <type>int</type></optional>)</literal></entry>
1152 <entry><type>text</type></entry>
1156 <entry><literal>overlay('Txxxxas' placing 'hom' from 2 for 4)</literal></entry>
1157 <entry><literal>Thomas</literal></entry>
1161 <entry><literal><function>position</function>(<parameter>substring</parameter> in <parameter>string</parameter>)</literal></entry>
1162 <entry><type>int</type></entry>
1163 <entry>Location of specified substring</entry>
1164 <entry><literal>position('om' in 'Thomas')</literal></entry>
1165 <entry><literal>3</literal></entry>
1169 <entry><literal><function>substring</function>(<parameter>string</parameter> <optional>from <type>int</type></optional> <optional>for <type>int</type></optional>)</literal></entry>
1170 <entry><type>text</type></entry>
1174 <entry><literal>substring('Thomas' from 2 for 3)</literal></entry>
1175 <entry><literal>hom</literal></entry>
1179 <entry><literal><function>substring</function>(<parameter>string</parameter> from <replaceable>pattern</replaceable>)</literal></entry>
1180 <entry><type>text</type></entry>
1182 Extract substring matching POSIX regular expression. See
1183 <xref linkend="functions-matching"> for more information on pattern
1186 <entry><literal>substring('Thomas' from '...$')</literal></entry>
1187 <entry><literal>mas</literal></entry>
1191 <entry><literal><function>substring</function>(<parameter>string</parameter> from <replaceable>pattern</replaceable> for <replaceable>escape</replaceable>)</literal></entry>
1192 <entry><type>text</type></entry>
1194 Extract substring matching <acronym>SQL</acronym> regular expression.
1195 See <xref linkend="functions-matching"> for more information on
1198 <entry><literal>substring('Thomas' from '%#"o_a#"_' for '#')</literal></entry>
1199 <entry><literal>oma</literal></entry>
1204 <literal><function>trim</function>(<optional>leading | trailing | both</optional>
1205 <optional><parameter>characters</parameter></optional> from
1206 <parameter>string</parameter>)</literal>
1208 <entry><type>text</type></entry>
1210 Remove the longest string containing only the
1211 <parameter>characters</parameter> (a space by default) from the
1212 start/end/both ends of the <parameter>string</parameter>
1214 <entry><literal>trim(both 'x' from 'xTomxx')</literal></entry>
1215 <entry><literal>Tom</literal></entry>
1219 <entry><literal><function>upper</function>(<parameter>string</parameter>)</literal></entry>
1220 <entry><type>text</type></entry>
1221 <entry>Convert string to uppercase</entry>
1222 <entry><literal>upper('tom')</literal></entry>
1223 <entry><literal>TOM</literal></entry>
1230 Additional string manipulation functions are available and are
1231 listed in <xref linkend="functions-string-other">. Some of them are used internally to implement the
1232 <acronym>SQL</acronym>-standard string functions listed in <xref linkend="functions-string-sql">.
1236 <primary>ascii</primary>
1239 <primary>btrim</primary>
1242 <primary>chr</primary>
1245 <primary>convert</primary>
1248 <primary>convert_from</primary>
1251 <primary>convert_to</primary>
1254 <primary>decode</primary>
1257 <primary>encode</primary>
1260 <primary>initcap</primary>
1263 <primary>lpad</primary>
1266 <primary>ltrim</primary>
1269 <primary>md5</primary>
1272 <primary>pg_client_encoding</primary>
1275 <primary>quote_ident</primary>
1278 <primary>quote_literal</primary>
1281 <primary>quote_nullable</primary>
1284 <primary>repeat</primary>
1287 <primary>replace</primary>
1290 <primary>rpad</primary>
1293 <primary>rtrim</primary>
1296 <primary>split_part</primary>
1299 <primary>strpos</primary>
1302 <primary>substr</primary>
1305 <primary>to_ascii</primary>
1308 <primary>to_hex</primary>
1311 <primary>translate</primary>
1314 <table id="functions-string-other">
1315 <title>Other String Functions</title>
1319 <entry>Function</entry>
1320 <entry>Return Type</entry>
1321 <entry>Description</entry>
1322 <entry>Example</entry>
1323 <entry>Result</entry>
1329 <entry><literal><function>ascii</function>(<parameter>string</parameter>)</literal></entry>
1330 <entry><type>int</type></entry>
1332 <acronym>ASCII</acronym> code of the first character of the
1333 argument. For <acronym>UTF8</acronym> returns the Unicode code
1334 point of the character. For other multibyte encodings, the
1335 argument must be an <acronym>ASCII</acronym> character.
1337 <entry><literal>ascii('x')</literal></entry>
1338 <entry><literal>120</literal></entry>
1342 <entry><literal><function>btrim</function>(<parameter>string</parameter> <type>text</type>
1343 <optional>, <parameter>characters</parameter> <type>text</type></optional>)</literal></entry>
1344 <entry><type>text</type></entry>
1346 Remove the longest string consisting only of characters
1347 in <parameter>characters</parameter> (a space by default)
1348 from the start and end of <parameter>string</parameter>
1350 <entry><literal>btrim('xyxtrimyyx', 'xy')</literal></entry>
1351 <entry><literal>trim</literal></entry>
1355 <entry><literal><function>chr</function>(<type>int</type>)</literal></entry>
1356 <entry><type>text</type></entry>
1358 Character with the given code. For <acronym>UTF8</acronym> the
1359 argument is treated as a Unicode code point. For other multibyte
1360 encodings the argument must designate an
1361 <acronym>ASCII</acronym> character. The NULL (0) character is not
1362 allowed because text data types cannot store such bytes.
1364 <entry><literal>chr(65)</literal></entry>
1365 <entry><literal>A</literal></entry>
1370 <literal><function>convert</function>(<parameter>string</parameter> <type>bytea</type>,
1371 <parameter>src_encoding</parameter> <type>name</type>,
1372 <parameter>dest_encoding</parameter> <type>name</type>)</literal>
1374 <entry><type>bytea</type></entry>
1376 Convert string to <parameter>dest_encoding</parameter>. The
1377 original encoding is specified by
1378 <parameter>src_encoding</parameter>. The
1379 <parameter>string</parameter> must be valid in this encoding.
1380 Conversions can be defined by <command>CREATE CONVERSION</command>.
1381 Also there are some predefined conversions. See <xref
1382 linkend="conversion-names"> for available conversions.
1384 <entry><literal>convert('text_in_utf8', 'UTF8', 'LATIN1')</literal></entry>
1385 <entry><literal>text_in_utf8</literal> represented in Latin-1
1386 encoding (ISO 8859-1)</entry>
1391 <literal><function>convert_from</function>(<parameter>string</parameter> <type>bytea</type>,
1392 <parameter>src_encoding</parameter> <type>name</type>)</literal>
1394 <entry><type>text</type></entry>
1396 Convert string to the database encoding. The original encoding
1397 is specified by <parameter>src_encoding</parameter>. The
1398 <parameter>string</parameter> must be valid in this encoding.
1400 <entry><literal>convert_from('text_in_utf8', 'UTF8')</literal></entry>
1401 <entry><literal>text_in_utf8</literal> represented in the current database encoding</entry>
1406 <literal><function>convert_to</function>(<parameter>string</parameter> <type>text</type>,
1407 <parameter>dest_encoding</parameter> <type>name</type>)</literal>
1409 <entry><type>bytea</type></entry>
1411 Convert string to <parameter>dest_encoding</parameter>.
1413 <entry><literal>convert_to('some text', 'UTF8')</literal></entry>
1414 <entry><literal>some text</literal> represented in the UTF8 encoding</entry>
1419 <literal><function>decode</function>(<parameter>string</parameter> <type>text</type>,
1420 <parameter>type</parameter> <type>text</type>)</literal>
1422 <entry><type>bytea</type></entry>
1424 Decode binary data from <parameter>string</parameter> previously
1425 encoded with <function>encode</>. Parameter type is same as in <function>encode</>.
1427 <entry><literal>decode('MTIzAAE=', 'base64')</literal></entry>
1428 <entry><literal>123\000\001</literal></entry>
1433 <literal><function>encode</function>(<parameter>data</parameter> <type>bytea</type>,
1434 <parameter>type</parameter> <type>text</type>)</literal>
1436 <entry><type>text</type></entry>
1438 Encode binary data to different representation. Supported
1439 types are: <literal>base64</>, <literal>hex</>, <literal>escape</>.
1440 <literal>Escape</> merely outputs null bytes as <literal>\000</> and
1441 doubles backslashes.
1443 <entry><literal>encode(E'123\\000\\001', 'base64')</literal></entry>
1444 <entry><literal>MTIzAAE=</literal></entry>
1448 <entry><literal><function>initcap</function>(<parameter>string</parameter>)</literal></entry>
1449 <entry><type>text</type></entry>
1451 Convert the first letter of each word to uppercase and the
1452 rest to lowercase. Words are sequences of alphanumeric
1453 characters separated by non-alphanumeric characters.
1455 <entry><literal>initcap('hi THOMAS')</literal></entry>
1456 <entry><literal>Hi Thomas</literal></entry>
1460 <entry><literal><function>length</function>(<parameter>string</parameter>)</literal></entry>
1461 <entry><type>int</type></entry>
1463 Number of characters in <parameter>string</parameter>
1465 <entry><literal>length('jose')</literal></entry>
1466 <entry><literal>4</literal></entry>
1470 <entry><literal><function>length</function>(<parameter>string</parameter><type>bytea</type>,
1471 <parameter>encoding</parameter> <type>name</type> )</literal></entry>
1472 <entry><type>int</type></entry>
1474 Number of characters in <parameter>string</parameter> in the given
1475 <parameter>encoding</parameter>. The <parameter>string</parameter>
1476 must be valid in this encoding.
1478 <entry><literal>length('jose', 'UTF8')</literal></entry>
1479 <entry><literal>4</literal></entry>
1484 <literal><function>lpad</function>(<parameter>string</parameter> <type>text</type>,
1485 <parameter>length</parameter> <type>int</type>
1486 <optional>, <parameter>fill</parameter> <type>text</type></optional>)</literal>
1488 <entry><type>text</type></entry>
1490 Fill up the <parameter>string</parameter> to length
1491 <parameter>length</parameter> by prepending the characters
1492 <parameter>fill</parameter> (a space by default). If the
1493 <parameter>string</parameter> is already longer than
1494 <parameter>length</parameter> then it is truncated (on the
1497 <entry><literal>lpad('hi', 5, 'xy')</literal></entry>
1498 <entry><literal>xyxhi</literal></entry>
1502 <entry><literal><function>ltrim</function>(<parameter>string</parameter> <type>text</type>
1503 <optional>, <parameter>characters</parameter> <type>text</type></optional>)</literal>
1505 <entry><type>text</type></entry>
1507 Remove the longest string containing only characters from
1508 <parameter>characters</parameter> (a space by default) from the start of
1509 <parameter>string</parameter>
1511 <entry><literal>ltrim('zzzytrim', 'xyz')</literal></entry>
1512 <entry><literal>trim</literal></entry>
1516 <entry><literal><function>md5</function>(<parameter>string</parameter>)</literal></entry>
1517 <entry><type>text</type></entry>
1519 Calculates the MD5 hash of <parameter>string</parameter>,
1520 returning the result in hexadecimal
1522 <entry><literal>md5('abc')</literal></entry>
1523 <entry><literal>900150983cd24fb0 d6963f7d28e17f72</literal></entry>
1527 <entry><literal><function>pg_client_encoding</function>()</literal></entry>
1528 <entry><type>name</type></entry>
1530 Current client encoding name
1532 <entry><literal>pg_client_encoding()</literal></entry>
1533 <entry><literal>SQL_ASCII</literal></entry>
1537 <entry><literal><function>quote_ident</function>(<parameter>string</parameter> <type>text</type>)</literal></entry>
1538 <entry><type>text</type></entry>
1540 Return the given string suitably quoted to be used as an identifier
1541 in an <acronym>SQL</acronym> statement string.
1542 Quotes are added only if necessary (i.e., if the string contains
1543 non-identifier characters or would be case-folded).
1544 Embedded quotes are properly doubled.
1545 See also <xref linkend="plpgsql-quote-literal-example">.
1547 <entry><literal>quote_ident('Foo bar')</literal></entry>
1548 <entry><literal>"Foo bar"</literal></entry>
1552 <entry><literal><function>quote_literal</function>(<parameter>string</parameter> <type>text</type>)</literal></entry>
1553 <entry><type>text</type></entry>
1555 Return the given string suitably quoted to be used as a string literal
1556 in an <acronym>SQL</acronym> statement string.
1557 Embedded single-quotes and backslashes are properly doubled.
1558 Note that <function>quote_literal</function> returns null on null
1559 input; if the argument might be null,
1560 <function>quote_nullable</function> is often more suitable.
1561 See also <xref linkend="plpgsql-quote-literal-example">.
1563 <entry><literal>quote_literal('O\'Reilly')</literal></entry>
1564 <entry><literal>'O''Reilly'</literal></entry>
1568 <entry><literal><function>quote_literal</function>(<parameter>value</parameter> <type>anyelement</type>)</literal></entry>
1569 <entry><type>text</type></entry>
1571 Coerce the given value to text and then quote it as a literal.
1572 Embedded single-quotes and backslashes are properly doubled.
1574 <entry><literal>quote_literal(42.5)</literal></entry>
1575 <entry><literal>'42.5'</literal></entry>
1579 <entry><literal><function>quote_nullable</function>(<parameter>string</parameter> <type>text</type>)</literal></entry>
1580 <entry><type>text</type></entry>
1582 Return the given string suitably quoted to be used as a string literal
1583 in an <acronym>SQL</acronym> statement string; or, if the argument
1584 is null, return <literal>NULL</>.
1585 Embedded single-quotes and backslashes are properly doubled.
1586 See also <xref linkend="plpgsql-quote-literal-example">.
1588 <entry><literal>quote_nullable(NULL)</literal></entry>
1589 <entry><literal>NULL</literal></entry>
1593 <entry><literal><function>quote_nullable</function>(<parameter>value</parameter> <type>anyelement</type>)</literal></entry>
1594 <entry><type>text</type></entry>
1596 Coerce the given value to text and then quote it as a literal;
1597 or, if the argument is null, return <literal>NULL</>.
1598 Embedded single-quotes and backslashes are properly doubled.
1600 <entry><literal>quote_nullable(42.5)</literal></entry>
1601 <entry><literal>'42.5'</literal></entry>
1605 <entry><literal><function>regexp_matches</function>(<parameter>string</parameter> <type>text</type>, <parameter>pattern</parameter> <type>text</type> [, <parameter>flags</parameter> <type>text</type>])</literal></entry>
1606 <entry><type>setof text[]</type></entry>
1608 Return all captured substrings resulting from matching a POSIX regular
1609 expression against the <parameter>string</parameter>. See
1610 <xref linkend="functions-posix-regexp"> for more information.
1612 <entry><literal>regexp_matches('foobarbequebaz', '(bar)(beque)')</literal></entry>
1613 <entry><literal>{bar,beque}</literal></entry>
1617 <entry><literal><function>regexp_replace</function>(<parameter>string</parameter> <type>text</type>, <parameter>pattern</parameter> <type>text</type>, <parameter>replacement</parameter> <type>text</type> [, <parameter>flags</parameter> <type>text</type>])</literal></entry>
1618 <entry><type>text</type></entry>
1620 Replace substring(s) matching a POSIX regular expression. See
1621 <xref linkend="functions-posix-regexp"> for more information.
1623 <entry><literal>regexp_replace('Thomas', '.[mN]a.', 'M')</literal></entry>
1624 <entry><literal>ThM</literal></entry>
1628 <entry><literal><function>regexp_split_to_array</function>(<parameter>string</parameter> <type>text</type>, <parameter>pattern</parameter> <type>text</type> [, <parameter>flags</parameter> <type>text</type> ])</literal></entry>
1629 <entry><type>text[]</type></entry>
1631 Split <parameter>string</parameter> using a POSIX regular expression as
1632 the delimiter. See <xref linkend="functions-posix-regexp"> for more
1635 <entry><literal>regexp_split_to_array('hello world', E'\\s+')</literal></entry>
1636 <entry><literal>{hello,world}</literal></entry>
1640 <entry><literal><function>regexp_split_to_table</function>(<parameter>string</parameter> <type>text</type>, <parameter>pattern</parameter> <type>text</type> [, <parameter>flags</parameter> <type>text</type>])</literal></entry>
1641 <entry><type>setof text</type></entry>
1643 Split <parameter>string</parameter> using a POSIX regular expression as
1644 the delimiter. See <xref linkend="functions-posix-regexp"> for more
1647 <entry><literal>regexp_split_to_table('hello world', E'\\s+')</literal></entry>
1648 <entry><literal>hello</literal><para><literal>world</literal></para> (2 rows)</entry>
1652 <entry><literal><function>repeat</function>(<parameter>string</parameter> <type>text</type>, <parameter>number</parameter> <type>int</type>)</literal></entry>
1653 <entry><type>text</type></entry>
1654 <entry>Repeat <parameter>string</parameter> the specified
1655 <parameter>number</parameter> of times</entry>
1656 <entry><literal>repeat('Pg', 4)</literal></entry>
1657 <entry><literal>PgPgPgPg</literal></entry>
1661 <entry><literal><function>replace</function>(<parameter>string</parameter> <type>text</type>,
1662 <parameter>from</parameter> <type>text</type>,
1663 <parameter>to</parameter> <type>text</type>)</literal></entry>
1664 <entry><type>text</type></entry>
1665 <entry>Replace all occurrences in <parameter>string</parameter> of substring
1666 <parameter>from</parameter> with substring <parameter>to</parameter>
1668 <entry><literal>replace('abcdefabcdef', 'cd', 'XX')</literal></entry>
1669 <entry><literal>abXXefabXXef</literal></entry>
1674 <literal><function>rpad</function>(<parameter>string</parameter> <type>text</type>,
1675 <parameter>length</parameter> <type>int</type>
1676 <optional>, <parameter>fill</parameter> <type>text</type></optional>)</literal>
1678 <entry><type>text</type></entry>
1680 Fill up the <parameter>string</parameter> to length
1681 <parameter>length</parameter> by appending the characters
1682 <parameter>fill</parameter> (a space by default). If the
1683 <parameter>string</parameter> is already longer than
1684 <parameter>length</parameter> then it is truncated.
1686 <entry><literal>rpad('hi', 5, 'xy')</literal></entry>
1687 <entry><literal>hixyx</literal></entry>
1691 <entry><literal><function>rtrim</function>(<parameter>string</parameter> <type>text</type>
1692 <optional>, <parameter>characters</parameter> <type>text</type></optional>)</literal>
1694 <entry><type>text</type></entry>
1696 Remove the longest string containing only characters from
1697 <parameter>characters</parameter> (a space by default) from the end of
1698 <parameter>string</parameter>
1700 <entry><literal>rtrim('trimxxxx', 'x')</literal></entry>
1701 <entry><literal>trim</literal></entry>
1705 <entry><literal><function>split_part</function>(<parameter>string</parameter> <type>text</type>,
1706 <parameter>delimiter</parameter> <type>text</type>,
1707 <parameter>field</parameter> <type>int</type>)</literal></entry>
1708 <entry><type>text</type></entry>
1709 <entry>Split <parameter>string</parameter> on <parameter>delimiter</parameter>
1710 and return the given field (counting from one)
1712 <entry><literal>split_part('abc~@~def~@~ghi', '~@~', 2)</literal></entry>
1713 <entry><literal>def</literal></entry>
1717 <entry><literal><function>strpos</function>(<parameter>string</parameter>, <parameter>substring</parameter>)</literal></entry>
1718 <entry><type>int</type></entry>
1720 Location of specified substring (same as
1721 <literal>position(<parameter>substring</parameter> in
1722 <parameter>string</parameter>)</literal>, but note the reversed
1725 <entry><literal>strpos('high', 'ig')</literal></entry>
1726 <entry><literal>2</literal></entry>
1730 <entry><literal><function>substr</function>(<parameter>string</parameter>, <parameter>from</parameter> <optional>, <parameter>count</parameter></optional>)</literal></entry>
1731 <entry><type>text</type></entry>
1733 Extract substring (same as
1734 <literal>substring(<parameter>string</parameter> from <parameter>from</parameter> for <parameter>count</parameter>)</literal>)
1736 <entry><literal>substr('alphabet', 3, 2)</literal></entry>
1737 <entry><literal>ph</literal></entry>
1741 <entry><literal><function>to_ascii</function>(<parameter>string</parameter> <type>text</type>
1742 <optional>, <parameter>encoding</parameter> <type>text</type></optional>)</literal></entry>
1743 <entry><type>text</type></entry>
1746 Convert <parameter>string</parameter> to <acronym>ASCII</acronym> from another encoding
1747 (only supports conversion from <literal>LATIN1</>, <literal>LATIN2</>, <literal>LATIN9</>,
1748 and <literal>WIN1250</> encodings)
1751 <entry><literal>to_ascii('Karel')</literal></entry>
1752 <entry><literal>Karel</literal></entry>
1756 <entry><literal><function>to_hex</function>(<parameter>number</parameter> <type>int</type>
1757 or <type>bigint</type>)</literal></entry>
1758 <entry><type>text</type></entry>
1759 <entry>Convert <parameter>number</parameter> to its equivalent hexadecimal
1762 <entry><literal>to_hex(2147483647)</literal></entry>
1763 <entry><literal>7fffffff</literal></entry>
1768 <literal><function>translate</function>(<parameter>string</parameter> <type>text</type>,
1769 <parameter>from</parameter> <type>text</type>,
1770 <parameter>to</parameter> <type>text</type>)</literal>
1772 <entry><type>text</type></entry>
1774 Any character in <parameter>string</parameter> that matches a
1775 character in the <parameter>from</parameter> set is replaced by
1776 the corresponding character in the <parameter>to</parameter>
1779 <entry><literal>translate('12345', '14', 'ax')</literal></entry>
1780 <entry><literal>a23x5</literal></entry>
1788 <table id="conversion-names">
1789 <title>Built-in Conversions</title>
1793 <entry>Conversion Name
1796 The conversion names follow a standard naming scheme: The
1797 official name of the source encoding with all
1798 non-alphanumeric characters replaced by underscores followed
1799 by <literal>_to_</literal> followed by similarly
1800 destination encoding name. Therefore, the names might deviate
1801 from the customary encoding names.
1805 <entry>Source Encoding</entry>
1806 <entry>Destination Encoding</entry>
1812 <entry><literal>ascii_to_mic</literal></entry>
1813 <entry><literal>SQL_ASCII</literal></entry>
1814 <entry><literal>MULE_INTERNAL</literal></entry>
1818 <entry><literal>ascii_to_utf8</literal></entry>
1819 <entry><literal>SQL_ASCII</literal></entry>
1820 <entry><literal>UTF8</literal></entry>
1824 <entry><literal>big5_to_euc_tw</literal></entry>
1825 <entry><literal>BIG5</literal></entry>
1826 <entry><literal>EUC_TW</literal></entry>
1830 <entry><literal>big5_to_mic</literal></entry>
1831 <entry><literal>BIG5</literal></entry>
1832 <entry><literal>MULE_INTERNAL</literal></entry>
1836 <entry><literal>big5_to_utf8</literal></entry>
1837 <entry><literal>BIG5</literal></entry>
1838 <entry><literal>UTF8</literal></entry>
1842 <entry><literal>euc_cn_to_mic</literal></entry>
1843 <entry><literal>EUC_CN</literal></entry>
1844 <entry><literal>MULE_INTERNAL</literal></entry>
1848 <entry><literal>euc_cn_to_utf8</literal></entry>
1849 <entry><literal>EUC_CN</literal></entry>
1850 <entry><literal>UTF8</literal></entry>
1854 <entry><literal>euc_jp_to_mic</literal></entry>
1855 <entry><literal>EUC_JP</literal></entry>
1856 <entry><literal>MULE_INTERNAL</literal></entry>
1860 <entry><literal>euc_jp_to_sjis</literal></entry>
1861 <entry><literal>EUC_JP</literal></entry>
1862 <entry><literal>SJIS</literal></entry>
1866 <entry><literal>euc_jp_to_utf8</literal></entry>
1867 <entry><literal>EUC_JP</literal></entry>
1868 <entry><literal>UTF8</literal></entry>
1872 <entry><literal>euc_kr_to_mic</literal></entry>
1873 <entry><literal>EUC_KR</literal></entry>
1874 <entry><literal>MULE_INTERNAL</literal></entry>
1878 <entry><literal>euc_kr_to_utf8</literal></entry>
1879 <entry><literal>EUC_KR</literal></entry>
1880 <entry><literal>UTF8</literal></entry>
1884 <entry><literal>euc_tw_to_big5</literal></entry>
1885 <entry><literal>EUC_TW</literal></entry>
1886 <entry><literal>BIG5</literal></entry>
1890 <entry><literal>euc_tw_to_mic</literal></entry>
1891 <entry><literal>EUC_TW</literal></entry>
1892 <entry><literal>MULE_INTERNAL</literal></entry>
1896 <entry><literal>euc_tw_to_utf8</literal></entry>
1897 <entry><literal>EUC_TW</literal></entry>
1898 <entry><literal>UTF8</literal></entry>
1902 <entry><literal>gb18030_to_utf8</literal></entry>
1903 <entry><literal>GB18030</literal></entry>
1904 <entry><literal>UTF8</literal></entry>
1908 <entry><literal>gbk_to_utf8</literal></entry>
1909 <entry><literal>GBK</literal></entry>
1910 <entry><literal>UTF8</literal></entry>
1914 <entry><literal>iso_8859_10_to_utf8</literal></entry>
1915 <entry><literal>LATIN6</literal></entry>
1916 <entry><literal>UTF8</literal></entry>
1920 <entry><literal>iso_8859_13_to_utf8</literal></entry>
1921 <entry><literal>LATIN7</literal></entry>
1922 <entry><literal>UTF8</literal></entry>
1926 <entry><literal>iso_8859_14_to_utf8</literal></entry>
1927 <entry><literal>LATIN8</literal></entry>
1928 <entry><literal>UTF8</literal></entry>
1932 <entry><literal>iso_8859_15_to_utf8</literal></entry>
1933 <entry><literal>LATIN9</literal></entry>
1934 <entry><literal>UTF8</literal></entry>
1938 <entry><literal>iso_8859_16_to_utf8</literal></entry>
1939 <entry><literal>LATIN10</literal></entry>
1940 <entry><literal>UTF8</literal></entry>
1944 <entry><literal>iso_8859_1_to_mic</literal></entry>
1945 <entry><literal>LATIN1</literal></entry>
1946 <entry><literal>MULE_INTERNAL</literal></entry>
1950 <entry><literal>iso_8859_1_to_utf8</literal></entry>
1951 <entry><literal>LATIN1</literal></entry>
1952 <entry><literal>UTF8</literal></entry>
1956 <entry><literal>iso_8859_2_to_mic</literal></entry>
1957 <entry><literal>LATIN2</literal></entry>
1958 <entry><literal>MULE_INTERNAL</literal></entry>
1962 <entry><literal>iso_8859_2_to_utf8</literal></entry>
1963 <entry><literal>LATIN2</literal></entry>
1964 <entry><literal>UTF8</literal></entry>
1968 <entry><literal>iso_8859_2_to_windows_1250</literal></entry>
1969 <entry><literal>LATIN2</literal></entry>
1970 <entry><literal>WIN1250</literal></entry>
1974 <entry><literal>iso_8859_3_to_mic</literal></entry>
1975 <entry><literal>LATIN3</literal></entry>
1976 <entry><literal>MULE_INTERNAL</literal></entry>
1980 <entry><literal>iso_8859_3_to_utf8</literal></entry>
1981 <entry><literal>LATIN3</literal></entry>
1982 <entry><literal>UTF8</literal></entry>
1986 <entry><literal>iso_8859_4_to_mic</literal></entry>
1987 <entry><literal>LATIN4</literal></entry>
1988 <entry><literal>MULE_INTERNAL</literal></entry>
1992 <entry><literal>iso_8859_4_to_utf8</literal></entry>
1993 <entry><literal>LATIN4</literal></entry>
1994 <entry><literal>UTF8</literal></entry>
1998 <entry><literal>iso_8859_5_to_koi8_r</literal></entry>
1999 <entry><literal>ISO_8859_5</literal></entry>
2000 <entry><literal>KOI8</literal></entry>
2004 <entry><literal>iso_8859_5_to_mic</literal></entry>
2005 <entry><literal>ISO_8859_5</literal></entry>
2006 <entry><literal>MULE_INTERNAL</literal></entry>
2010 <entry><literal>iso_8859_5_to_utf8</literal></entry>
2011 <entry><literal>ISO_8859_5</literal></entry>
2012 <entry><literal>UTF8</literal></entry>
2016 <entry><literal>iso_8859_5_to_windows_1251</literal></entry>
2017 <entry><literal>ISO_8859_5</literal></entry>
2018 <entry><literal>WIN1251</literal></entry>
2022 <entry><literal>iso_8859_5_to_windows_866</literal></entry>
2023 <entry><literal>ISO_8859_5</literal></entry>
2024 <entry><literal>WIN866</literal></entry>
2028 <entry><literal>iso_8859_6_to_utf8</literal></entry>
2029 <entry><literal>ISO_8859_6</literal></entry>
2030 <entry><literal>UTF8</literal></entry>
2034 <entry><literal>iso_8859_7_to_utf8</literal></entry>
2035 <entry><literal>ISO_8859_7</literal></entry>
2036 <entry><literal>UTF8</literal></entry>
2040 <entry><literal>iso_8859_8_to_utf8</literal></entry>
2041 <entry><literal>ISO_8859_8</literal></entry>
2042 <entry><literal>UTF8</literal></entry>
2046 <entry><literal>iso_8859_9_to_utf8</literal></entry>
2047 <entry><literal>LATIN5</literal></entry>
2048 <entry><literal>UTF8</literal></entry>
2052 <entry><literal>johab_to_utf8</literal></entry>
2053 <entry><literal>JOHAB</literal></entry>
2054 <entry><literal>UTF8</literal></entry>
2058 <entry><literal>koi8_r_to_iso_8859_5</literal></entry>
2059 <entry><literal>KOI8</literal></entry>
2060 <entry><literal>ISO_8859_5</literal></entry>
2064 <entry><literal>koi8_r_to_mic</literal></entry>
2065 <entry><literal>KOI8</literal></entry>
2066 <entry><literal>MULE_INTERNAL</literal></entry>
2070 <entry><literal>koi8_r_to_utf8</literal></entry>
2071 <entry><literal>KOI8</literal></entry>
2072 <entry><literal>UTF8</literal></entry>
2076 <entry><literal>koi8_r_to_windows_1251</literal></entry>
2077 <entry><literal>KOI8</literal></entry>
2078 <entry><literal>WIN1251</literal></entry>
2082 <entry><literal>koi8_r_to_windows_866</literal></entry>
2083 <entry><literal>KOI8</literal></entry>
2084 <entry><literal>WIN866</literal></entry>
2088 <entry><literal>mic_to_ascii</literal></entry>
2089 <entry><literal>MULE_INTERNAL</literal></entry>
2090 <entry><literal>SQL_ASCII</literal></entry>
2094 <entry><literal>mic_to_big5</literal></entry>
2095 <entry><literal>MULE_INTERNAL</literal></entry>
2096 <entry><literal>BIG5</literal></entry>
2100 <entry><literal>mic_to_euc_cn</literal></entry>
2101 <entry><literal>MULE_INTERNAL</literal></entry>
2102 <entry><literal>EUC_CN</literal></entry>
2106 <entry><literal>mic_to_euc_jp</literal></entry>
2107 <entry><literal>MULE_INTERNAL</literal></entry>
2108 <entry><literal>EUC_JP</literal></entry>
2112 <entry><literal>mic_to_euc_kr</literal></entry>
2113 <entry><literal>MULE_INTERNAL</literal></entry>
2114 <entry><literal>EUC_KR</literal></entry>
2118 <entry><literal>mic_to_euc_tw</literal></entry>
2119 <entry><literal>MULE_INTERNAL</literal></entry>
2120 <entry><literal>EUC_TW</literal></entry>
2124 <entry><literal>mic_to_iso_8859_1</literal></entry>
2125 <entry><literal>MULE_INTERNAL</literal></entry>
2126 <entry><literal>LATIN1</literal></entry>
2130 <entry><literal>mic_to_iso_8859_2</literal></entry>
2131 <entry><literal>MULE_INTERNAL</literal></entry>
2132 <entry><literal>LATIN2</literal></entry>
2136 <entry><literal>mic_to_iso_8859_3</literal></entry>
2137 <entry><literal>MULE_INTERNAL</literal></entry>
2138 <entry><literal>LATIN3</literal></entry>
2142 <entry><literal>mic_to_iso_8859_4</literal></entry>
2143 <entry><literal>MULE_INTERNAL</literal></entry>
2144 <entry><literal>LATIN4</literal></entry>
2148 <entry><literal>mic_to_iso_8859_5</literal></entry>
2149 <entry><literal>MULE_INTERNAL</literal></entry>
2150 <entry><literal>ISO_8859_5</literal></entry>
2154 <entry><literal>mic_to_koi8_r</literal></entry>
2155 <entry><literal>MULE_INTERNAL</literal></entry>
2156 <entry><literal>KOI8</literal></entry>
2160 <entry><literal>mic_to_sjis</literal></entry>
2161 <entry><literal>MULE_INTERNAL</literal></entry>
2162 <entry><literal>SJIS</literal></entry>
2166 <entry><literal>mic_to_windows_1250</literal></entry>
2167 <entry><literal>MULE_INTERNAL</literal></entry>
2168 <entry><literal>WIN1250</literal></entry>
2172 <entry><literal>mic_to_windows_1251</literal></entry>
2173 <entry><literal>MULE_INTERNAL</literal></entry>
2174 <entry><literal>WIN1251</literal></entry>
2178 <entry><literal>mic_to_windows_866</literal></entry>
2179 <entry><literal>MULE_INTERNAL</literal></entry>
2180 <entry><literal>WIN866</literal></entry>
2184 <entry><literal>sjis_to_euc_jp</literal></entry>
2185 <entry><literal>SJIS</literal></entry>
2186 <entry><literal>EUC_JP</literal></entry>
2190 <entry><literal>sjis_to_mic</literal></entry>
2191 <entry><literal>SJIS</literal></entry>
2192 <entry><literal>MULE_INTERNAL</literal></entry>
2196 <entry><literal>sjis_to_utf8</literal></entry>
2197 <entry><literal>SJIS</literal></entry>
2198 <entry><literal>UTF8</literal></entry>
2202 <entry><literal>tcvn_to_utf8</literal></entry>
2203 <entry><literal>WIN1258</literal></entry>
2204 <entry><literal>UTF8</literal></entry>
2208 <entry><literal>uhc_to_utf8</literal></entry>
2209 <entry><literal>UHC</literal></entry>
2210 <entry><literal>UTF8</literal></entry>
2214 <entry><literal>utf8_to_ascii</literal></entry>
2215 <entry><literal>UTF8</literal></entry>
2216 <entry><literal>SQL_ASCII</literal></entry>
2220 <entry><literal>utf8_to_big5</literal></entry>
2221 <entry><literal>UTF8</literal></entry>
2222 <entry><literal>BIG5</literal></entry>
2226 <entry><literal>utf8_to_euc_cn</literal></entry>
2227 <entry><literal>UTF8</literal></entry>
2228 <entry><literal>EUC_CN</literal></entry>
2232 <entry><literal>utf8_to_euc_jp</literal></entry>
2233 <entry><literal>UTF8</literal></entry>
2234 <entry><literal>EUC_JP</literal></entry>
2238 <entry><literal>utf8_to_euc_kr</literal></entry>
2239 <entry><literal>UTF8</literal></entry>
2240 <entry><literal>EUC_KR</literal></entry>
2244 <entry><literal>utf8_to_euc_tw</literal></entry>
2245 <entry><literal>UTF8</literal></entry>
2246 <entry><literal>EUC_TW</literal></entry>
2250 <entry><literal>utf8_to_gb18030</literal></entry>
2251 <entry><literal>UTF8</literal></entry>
2252 <entry><literal>GB18030</literal></entry>
2256 <entry><literal>utf8_to_gbk</literal></entry>
2257 <entry><literal>UTF8</literal></entry>
2258 <entry><literal>GBK</literal></entry>
2262 <entry><literal>utf8_to_iso_8859_1</literal></entry>
2263 <entry><literal>UTF8</literal></entry>
2264 <entry><literal>LATIN1</literal></entry>
2268 <entry><literal>utf8_to_iso_8859_10</literal></entry>
2269 <entry><literal>UTF8</literal></entry>
2270 <entry><literal>LATIN6</literal></entry>
2274 <entry><literal>utf8_to_iso_8859_13</literal></entry>
2275 <entry><literal>UTF8</literal></entry>
2276 <entry><literal>LATIN7</literal></entry>
2280 <entry><literal>utf8_to_iso_8859_14</literal></entry>
2281 <entry><literal>UTF8</literal></entry>
2282 <entry><literal>LATIN8</literal></entry>
2286 <entry><literal>utf8_to_iso_8859_15</literal></entry>
2287 <entry><literal>UTF8</literal></entry>
2288 <entry><literal>LATIN9</literal></entry>
2292 <entry><literal>utf8_to_iso_8859_16</literal></entry>
2293 <entry><literal>UTF8</literal></entry>
2294 <entry><literal>LATIN10</literal></entry>
2298 <entry><literal>utf8_to_iso_8859_2</literal></entry>
2299 <entry><literal>UTF8</literal></entry>
2300 <entry><literal>LATIN2</literal></entry>
2304 <entry><literal>utf8_to_iso_8859_3</literal></entry>
2305 <entry><literal>UTF8</literal></entry>
2306 <entry><literal>LATIN3</literal></entry>
2310 <entry><literal>utf8_to_iso_8859_4</literal></entry>
2311 <entry><literal>UTF8</literal></entry>
2312 <entry><literal>LATIN4</literal></entry>
2316 <entry><literal>utf8_to_iso_8859_5</literal></entry>
2317 <entry><literal>UTF8</literal></entry>
2318 <entry><literal>ISO_8859_5</literal></entry>
2322 <entry><literal>utf8_to_iso_8859_6</literal></entry>
2323 <entry><literal>UTF8</literal></entry>
2324 <entry><literal>ISO_8859_6</literal></entry>
2328 <entry><literal>utf8_to_iso_8859_7</literal></entry>
2329 <entry><literal>UTF8</literal></entry>
2330 <entry><literal>ISO_8859_7</literal></entry>
2334 <entry><literal>utf8_to_iso_8859_8</literal></entry>
2335 <entry><literal>UTF8</literal></entry>
2336 <entry><literal>ISO_8859_8</literal></entry>
2340 <entry><literal>utf8_to_iso_8859_9</literal></entry>
2341 <entry><literal>UTF8</literal></entry>
2342 <entry><literal>LATIN5</literal></entry>
2346 <entry><literal>utf8_to_johab</literal></entry>
2347 <entry><literal>UTF8</literal></entry>
2348 <entry><literal>JOHAB</literal></entry>
2352 <entry><literal>utf8_to_koi8_r</literal></entry>
2353 <entry><literal>UTF8</literal></entry>
2354 <entry><literal>KOI8</literal></entry>
2358 <entry><literal>utf8_to_sjis</literal></entry>
2359 <entry><literal>UTF8</literal></entry>
2360 <entry><literal>SJIS</literal></entry>
2364 <entry><literal>utf8_to_tcvn</literal></entry>
2365 <entry><literal>UTF8</literal></entry>
2366 <entry><literal>WIN1258</literal></entry>
2370 <entry><literal>utf8_to_uhc</literal></entry>
2371 <entry><literal>UTF8</literal></entry>
2372 <entry><literal>UHC</literal></entry>
2376 <entry><literal>utf8_to_windows_1250</literal></entry>
2377 <entry><literal>UTF8</literal></entry>
2378 <entry><literal>WIN1250</literal></entry>
2382 <entry><literal>utf8_to_windows_1251</literal></entry>
2383 <entry><literal>UTF8</literal></entry>
2384 <entry><literal>WIN1251</literal></entry>
2388 <entry><literal>utf8_to_windows_1252</literal></entry>
2389 <entry><literal>UTF8</literal></entry>
2390 <entry><literal>WIN1252</literal></entry>
2394 <entry><literal>utf8_to_windows_1253</literal></entry>
2395 <entry><literal>UTF8</literal></entry>
2396 <entry><literal>WIN1253</literal></entry>
2400 <entry><literal>utf8_to_windows_1254</literal></entry>
2401 <entry><literal>UTF8</literal></entry>
2402 <entry><literal>WIN1254</literal></entry>
2406 <entry><literal>utf8_to_windows_1255</literal></entry>
2407 <entry><literal>UTF8</literal></entry>
2408 <entry><literal>WIN1255</literal></entry>
2412 <entry><literal>utf8_to_windows_1256</literal></entry>
2413 <entry><literal>UTF8</literal></entry>
2414 <entry><literal>WIN1256</literal></entry>
2418 <entry><literal>utf8_to_windows_1257</literal></entry>
2419 <entry><literal>UTF8</literal></entry>
2420 <entry><literal>WIN1257</literal></entry>
2424 <entry><literal>utf8_to_windows_866</literal></entry>
2425 <entry><literal>UTF8</literal></entry>
2426 <entry><literal>WIN866</literal></entry>
2430 <entry><literal>utf8_to_windows_874</literal></entry>
2431 <entry><literal>UTF8</literal></entry>
2432 <entry><literal>WIN874</literal></entry>
2436 <entry><literal>windows_1250_to_iso_8859_2</literal></entry>
2437 <entry><literal>WIN1250</literal></entry>
2438 <entry><literal>LATIN2</literal></entry>
2442 <entry><literal>windows_1250_to_mic</literal></entry>
2443 <entry><literal>WIN1250</literal></entry>
2444 <entry><literal>MULE_INTERNAL</literal></entry>
2448 <entry><literal>windows_1250_to_utf8</literal></entry>
2449 <entry><literal>WIN1250</literal></entry>
2450 <entry><literal>UTF8</literal></entry>
2454 <entry><literal>windows_1251_to_iso_8859_5</literal></entry>
2455 <entry><literal>WIN1251</literal></entry>
2456 <entry><literal>ISO_8859_5</literal></entry>
2460 <entry><literal>windows_1251_to_koi8_r</literal></entry>
2461 <entry><literal>WIN1251</literal></entry>
2462 <entry><literal>KOI8</literal></entry>
2466 <entry><literal>windows_1251_to_mic</literal></entry>
2467 <entry><literal>WIN1251</literal></entry>
2468 <entry><literal>MULE_INTERNAL</literal></entry>
2472 <entry><literal>windows_1251_to_utf8</literal></entry>
2473 <entry><literal>WIN1251</literal></entry>
2474 <entry><literal>UTF8</literal></entry>
2478 <entry><literal>windows_1251_to_windows_866</literal></entry>
2479 <entry><literal>WIN1251</literal></entry>
2480 <entry><literal>WIN866</literal></entry>
2484 <entry><literal>windows_1252_to_utf8</literal></entry>
2485 <entry><literal>WIN1252</literal></entry>
2486 <entry><literal>UTF8</literal></entry>
2490 <entry><literal>windows_1256_to_utf8</literal></entry>
2491 <entry><literal>WIN1256</literal></entry>
2492 <entry><literal>UTF8</literal></entry>
2496 <entry><literal>windows_866_to_iso_8859_5</literal></entry>
2497 <entry><literal>WIN866</literal></entry>
2498 <entry><literal>ISO_8859_5</literal></entry>
2502 <entry><literal>windows_866_to_koi8_r</literal></entry>
2503 <entry><literal>WIN866</literal></entry>
2504 <entry><literal>KOI8</literal></entry>
2508 <entry><literal>windows_866_to_mic</literal></entry>
2509 <entry><literal>WIN866</literal></entry>
2510 <entry><literal>MULE_INTERNAL</literal></entry>
2514 <entry><literal>windows_866_to_utf8</literal></entry>
2515 <entry><literal>WIN866</literal></entry>
2516 <entry><literal>UTF8</literal></entry>
2520 <entry><literal>windows_866_to_windows_1251</literal></entry>
2521 <entry><literal>WIN866</literal></entry>
2522 <entry><literal>WIN</literal></entry>
2526 <entry><literal>windows_874_to_utf8</literal></entry>
2527 <entry><literal>WIN874</literal></entry>
2528 <entry><literal>UTF8</literal></entry>
2532 <entry><literal>euc_jis_2004_to_utf8</literal></entry>
2533 <entry><literal>EUC_JIS_2004</literal></entry>
2534 <entry><literal>UTF8</literal></entry>
2538 <entry><literal>ut8_to_euc_jis_2004</literal></entry>
2539 <entry><literal>UTF8</literal></entry>
2540 <entry><literal>EUC_JIS_2004</literal></entry>
2544 <entry><literal>shift_jis_2004_to_utf8</literal></entry>
2545 <entry><literal>SHIFT_JIS_2004</literal></entry>
2546 <entry><literal>UTF8</literal></entry>
2550 <entry><literal>ut8_to_shift_jis_2004</literal></entry>
2551 <entry><literal>UTF8</literal></entry>
2552 <entry><literal>SHIFT_JIS_2004</literal></entry>
2556 <entry><literal>euc_jis_2004_to_shift_jis_2004</literal></entry>
2557 <entry><literal>EUC_JIS_2004</literal></entry>
2558 <entry><literal>SHIFT_JIS_2004</literal></entry>
2562 <entry><literal>shift_jis_2004_to_euc_jis_2004</literal></entry>
2563 <entry><literal>SHIFT_JIS_2004</literal></entry>
2564 <entry><literal>EUC_JIS_2004</literal></entry>
2574 <sect1 id="functions-binarystring">
2575 <title>Binary String Functions and Operators</title>
2577 <indexterm zone="functions-binarystring">
2578 <primary>binary data</primary>
2579 <secondary>functions</secondary>
2583 This section describes functions and operators for examining and
2584 manipulating values of type <type>bytea</type>.
2588 <acronym>SQL</acronym> defines some string functions that use
2589 a key word syntax, rather than commas to separate
2590 arguments. Details are in
2591 <xref linkend="functions-binarystring-sql">.
2592 Such functions are also implemented using the regular syntax for
2593 function invocation.
2594 (See <xref linkend="functions-binarystring-other">.)
2597 <table id="functions-binarystring-sql">
2598 <title><acronym>SQL</acronym> Binary String Functions and Operators</title>
2602 <entry>Function</entry>
2603 <entry>Return Type</entry>
2604 <entry>Description</entry>
2605 <entry>Example</entry>
2606 <entry>Result</entry>
2612 <entry><literal><parameter>string</parameter> <literal>||</literal>
2613 <parameter>string</parameter></literal></entry>
2614 <entry> <type>bytea</type> </entry>
2616 String concatenation
2618 <primary>binary string</primary>
2619 <secondary>concatenation</secondary>
2622 <entry><literal>E'\\\\Post'::bytea || E'\\047gres\\000'::bytea</literal></entry>
2623 <entry><literal>\\Post'gres\000</literal></entry>
2627 <entry><function>get_bit</function>(<parameter>string</parameter>, <parameter>offset</parameter>)</entry>
2628 <entry><type>int</type></entry>
2630 Extract bit from string
2632 <primary>get_bit</primary>
2635 <entry><literal>get_bit(E'Th\\000omas'::bytea, 45)</literal></entry>
2636 <entry><literal>1</literal></entry>
2640 <entry><function>get_byte</function>(<parameter>string</parameter>, <parameter>offset</parameter>)</entry>
2641 <entry><type>int</type></entry>
2643 Extract byte from string
2645 <primary>get_byte</primary>
2648 <entry><literal>get_byte(E'Th\\000omas'::bytea, 4)</literal></entry>
2649 <entry><literal>109</literal></entry>
2653 <entry><literal><function>octet_length</function>(<parameter>string</parameter>)</literal></entry>
2654 <entry><type>int</type></entry>
2655 <entry>Number of bytes in binary string</entry>
2656 <entry><literal>octet_length(E'jo\\000se'::bytea)</literal></entry>
2657 <entry><literal>5</literal></entry>
2661 <entry><literal><function>position</function>(<parameter>substring</parameter> in <parameter>string</parameter>)</literal></entry>
2662 <entry><type>int</type></entry>
2663 <entry>Location of specified substring</entry>
2664 <entry><literal>position(E'\\000om'::bytea in E'Th\\000omas'::bytea)</literal></entry>
2665 <entry><literal>3</literal></entry>
2669 <entry><function>set_bit</function>(<parameter>string</parameter>,
2670 <parameter>offset</parameter>, <parameter>newvalue</>)</entry>
2671 <entry><type>bytea</type></entry>
2675 <primary>set_bit</primary>
2678 <entry><literal>set_bit(E'Th\\000omas'::bytea, 45, 0)</literal></entry>
2679 <entry><literal>Th\000omAs</literal></entry>
2683 <entry><function>set_byte</function>(<parameter>string</parameter>,
2684 <parameter>offset</parameter>, <parameter>newvalue</>)</entry>
2685 <entry><type>bytea</type></entry>
2689 <primary>set_byte</primary>
2692 <entry><literal>set_byte(E'Th\\000omas'::bytea, 4, 64)</literal></entry>
2693 <entry><literal>Th\000o@as</literal></entry>
2697 <entry><literal><function>substring</function>(<parameter>string</parameter> <optional>from <type>int</type></optional> <optional>for <type>int</type></optional>)</literal></entry>
2698 <entry><type>bytea</type></entry>
2702 <primary>substring</primary>
2705 <entry><literal>substring(E'Th\\000omas'::bytea from 2 for 3)</literal></entry>
2706 <entry><literal>h\000o</literal></entry>
2711 <literal><function>trim</function>(<optional>both</optional>
2712 <parameter>bytes</parameter> from
2713 <parameter>string</parameter>)</literal>
2715 <entry><type>bytea</type></entry>
2717 Remove the longest string containing only the bytes in
2718 <parameter>bytes</parameter> from the start
2719 and end of <parameter>string</parameter>
2721 <entry><literal>trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea)</literal></entry>
2722 <entry><literal>Tom</literal></entry>
2729 Additional binary string manipulation functions are available and
2730 are listed in <xref linkend="functions-binarystring-other">. Some
2731 of them are used internally to implement the
2732 <acronym>SQL</acronym>-standard string functions listed in <xref
2733 linkend="functions-binarystring-sql">.
2736 <table id="functions-binarystring-other">
2737 <title>Other Binary String Functions</title>
2741 <entry>Function</entry>
2742 <entry>Return Type</entry>
2743 <entry>Description</entry>
2744 <entry>Example</entry>
2745 <entry>Result</entry>
2751 <entry><literal><function>btrim</function>(<parameter>string</parameter>
2752 <type>bytea</type>, <parameter>bytes</parameter> <type>bytea</type>)</literal></entry>
2753 <entry><type>bytea</type></entry>
2755 Remove the longest string consisting only of bytes
2756 in <parameter>bytes</parameter> from the start and end of
2757 <parameter>string</parameter>
2759 <entry><literal>btrim(E'\\000trim\\000'::bytea, E'\\000'::bytea)</literal></entry>
2760 <entry><literal>trim</literal></entry>
2765 <literal><function>decode</function>(<parameter>string</parameter> <type>text</type>,
2766 <parameter>type</parameter> <type>text</type>)</literal>
2768 <entry><type>bytea</type></entry>
2770 Decode binary string from <parameter>string</parameter> previously
2771 encoded with <function>encode</>. Parameter type is same as in <function>encode</>.
2773 <entry><literal>decode(E'123\\000456', 'escape')</literal></entry>
2774 <entry><literal>123\000456</literal></entry>
2779 <literal><function>encode</function>(<parameter>string</parameter> <type>bytea</type>,
2780 <parameter>type</parameter> <type>text</type>)</literal>
2782 <entry><type>text</type></entry>
2784 Encode binary string to <acronym>ASCII</acronym>-only representation. Supported
2785 types are: <literal>base64</>, <literal>hex</>, <literal>escape</>.
2787 <entry><literal>encode(E'123\\000456'::bytea, 'escape')</literal></entry>
2788 <entry><literal>123\000456</literal></entry>
2792 <entry><literal><function>length</function>(<parameter>string</parameter>)</literal></entry>
2793 <entry><type>int</type></entry>
2795 Length of binary string
2797 <primary>binary string</primary>
2798 <secondary>length</secondary>
2801 <primary>length</primary>
2802 <secondary sortas="binary string">of a binary string</secondary>
2803 <see>binary strings, length</see>
2806 <entry><literal>length(E'jo\\000se'::bytea)</literal></entry>
2807 <entry><literal>5</literal></entry>
2811 <entry><literal><function>md5</function>(<parameter>string</parameter>)</literal></entry>
2812 <entry><type>text</type></entry>
2814 Calculates the MD5 hash of <parameter>string</parameter>,
2815 returning the result in hexadecimal
2817 <entry><literal>md5(E'Th\\000omas'::bytea)</literal></entry>
2818 <entry><literal>8ab2d3c9689aaf18 b4958c334c82d8b1</literal></entry>
2827 <sect1 id="functions-bitstring">
2828 <title>Bit String Functions and Operators</title>
2830 <indexterm zone="functions-bitstring">
2831 <primary>bit strings</primary>
2832 <secondary>functions</secondary>
2836 This section describes functions and operators for examining and
2837 manipulating bit strings, that is values of the types
2838 <type>bit</type> and <type>bit varying</type>. Aside from the
2839 usual comparison operators, the operators
2840 shown in <xref linkend="functions-bit-string-op-table"> can be used.
2841 Bit string operands of <literal>&</literal>, <literal>|</literal>,
2842 and <literal>#</literal> must be of equal length. When bit
2843 shifting, the original length of the string is preserved, as shown
2847 <table id="functions-bit-string-op-table">
2848 <title>Bit String Operators</title>
2853 <entry>Operator</entry>
2854 <entry>Description</entry>
2855 <entry>Example</entry>
2856 <entry>Result</entry>
2862 <entry> <literal>||</literal> </entry>
2863 <entry>concatenation</entry>
2864 <entry><literal>B'10001' || B'011'</literal></entry>
2865 <entry><literal>10001011</literal></entry>
2869 <entry> <literal>&</literal> </entry>
2870 <entry>bitwise AND</entry>
2871 <entry><literal>B'10001' & B'01101'</literal></entry>
2872 <entry><literal>00001</literal></entry>
2876 <entry> <literal>|</literal> </entry>
2877 <entry>bitwise OR</entry>
2878 <entry><literal>B'10001' | B'01101'</literal></entry>
2879 <entry><literal>11101</literal></entry>
2883 <entry> <literal>#</literal> </entry>
2884 <entry>bitwise XOR</entry>
2885 <entry><literal>B'10001' # B'01101'</literal></entry>
2886 <entry><literal>11100</literal></entry>
2890 <entry> <literal>~</literal> </entry>
2891 <entry>bitwise NOT</entry>
2892 <entry><literal>~ B'10001'</literal></entry>
2893 <entry><literal>01110</literal></entry>
2897 <entry> <literal><<</literal> </entry>
2898 <entry>bitwise shift left</entry>
2899 <entry><literal>B'10001' << 3</literal></entry>
2900 <entry><literal>01000</literal></entry>
2904 <entry> <literal>>></literal> </entry>
2905 <entry>bitwise shift right</entry>
2906 <entry><literal>B'10001' >> 2</literal></entry>
2907 <entry><literal>00100</literal></entry>
2914 The following <acronym>SQL</acronym>-standard functions work on bit
2915 strings as well as character strings:
2916 <literal><function>length</function></literal>,
2917 <literal><function>bit_length</function></literal>,
2918 <literal><function>octet_length</function></literal>,
2919 <literal><function>position</function></literal>,
2920 <literal><function>substring</function></literal>.
2924 In addition, it is possible to cast integral values to and from type
2928 44::bit(10) <lineannotation>0000101100</lineannotation>
2929 44::bit(3) <lineannotation>100</lineannotation>
2930 cast(-44 as bit(12)) <lineannotation>111111010100</lineannotation>
2931 '1110'::bit(4)::integer <lineannotation>14</lineannotation>
2933 Note that casting to just <quote>bit</> means casting to
2934 <literal>bit(1)</>, and so will deliver only the least significant
2940 Prior to <productname>PostgreSQL</productname> 8.0, casting an
2941 integer to <type>bit(n)</> would copy the leftmost <literal>n</>
2942 bits of the integer, whereas now it copies the rightmost <literal>n</>
2943 bits. Also, casting an integer to a bit string width wider than
2944 the integer itself will sign-extend on the left.
2951 <sect1 id="functions-matching">
2952 <title>Pattern Matching</title>
2954 <indexterm zone="functions-matching">
2955 <primary>pattern matching</primary>
2959 There are three separate approaches to pattern matching provided
2960 by <productname>PostgreSQL</productname>: the traditional
2961 <acronym>SQL</acronym> <function>LIKE</function> operator, the
2962 more recent <function>SIMILAR TO</function> operator (added in
2963 SQL:1999), and <acronym>POSIX</acronym>-style regular
2964 expressions. Aside from the basic <quote>does this string match
2965 this pattern?</> operators, functions are available to extract
2966 or replace matching substrings and to split a string at matching
2972 If you have pattern matching needs that go beyond this,
2973 consider writing a user-defined function in Perl or Tcl.
2977 <sect2 id="functions-like">
2978 <title><function>LIKE</function></title>
2981 <primary>LIKE</primary>
2985 <replaceable>string</replaceable> LIKE <replaceable>pattern</replaceable> <optional>ESCAPE <replaceable>escape-character</replaceable></optional>
2986 <replaceable>string</replaceable> NOT LIKE <replaceable>pattern</replaceable> <optional>ESCAPE <replaceable>escape-character</replaceable></optional>
2990 The <function>LIKE</function> expression returns true if
2991 <replaceable>string</replaceable> matches the supplied
2992 <replaceable>pattern</replaceable>. (As
2993 expected, the <function>NOT LIKE</function> expression returns
2994 false if <function>LIKE</function> returns true, and vice versa.
2995 An equivalent expression is
2996 <literal>NOT (<replaceable>string</replaceable> LIKE
2997 <replaceable>pattern</replaceable>)</literal>.)
3001 If <replaceable>pattern</replaceable> does not contain percent
3002 signs or underscore, then the pattern only represents the string
3003 itself; in that case <function>LIKE</function> acts like the
3004 equals operator. An underscore (<literal>_</literal>) in
3005 <replaceable>pattern</replaceable> stands for (matches) any single
3006 character; a percent sign (<literal>%</literal>) matches any string
3007 of zero or more characters.
3013 'abc' LIKE 'abc' <lineannotation>true</lineannotation>
3014 'abc' LIKE 'a%' <lineannotation>true</lineannotation>
3015 'abc' LIKE '_b_' <lineannotation>true</lineannotation>
3016 'abc' LIKE 'c' <lineannotation>false</lineannotation>
3021 <function>LIKE</function> pattern matching always covers the entire
3022 string. Therefore, to match a sequence anywhere within a string, the
3023 pattern must start and end with a percent sign.
3027 To match only a literal underscore or percent sign without matching
3028 other characters, the respective character in
3029 <replaceable>pattern</replaceable> must be
3030 preceded by the escape character. The default escape
3031 character is the backslash but a different one can be selected by
3032 using the <literal>ESCAPE</literal> clause. To match the escape
3033 character itself, write two escape characters.
3037 Note that the backslash already has a special meaning in string literals,
3038 so to write a pattern constant that contains a backslash you must write two
3039 backslashes in an SQL statement (assuming escape string syntax is used, see
3040 <xref linkend="sql-syntax-strings">). Thus, writing a pattern that
3041 actually matches a literal backslash means writing four backslashes in the
3042 statement. You can avoid this by selecting a different escape character
3043 with <literal>ESCAPE</literal>; then a backslash is not special to
3044 <function>LIKE</function> anymore. (But backslash is still special to the string
3045 literal parser, so you still need two of them.)
3049 It's also possible to select no escape character by writing
3050 <literal>ESCAPE ''</literal>. This effectively disables the
3051 escape mechanism, which makes it impossible to turn off the
3052 special meaning of underscore and percent signs in the pattern.
3056 The key word <token>ILIKE</token> can be used instead of
3057 <token>LIKE</token> to make the match case-insensitive according
3058 to the active locale. This is not in the <acronym>SQL</acronym> standard but is a
3059 <productname>PostgreSQL</productname> extension.
3063 The operator <literal>~~</literal> is equivalent to
3064 <function>LIKE</function>, and <literal>~~*</literal> corresponds to
3065 <function>ILIKE</function>. There are also
3066 <literal>!~~</literal> and <literal>!~~*</literal> operators that
3067 represent <function>NOT LIKE</function> and <function>NOT
3068 ILIKE</function>, respectively. All of these operators are
3069 <productname>PostgreSQL</productname>-specific.
3074 <sect2 id="functions-similarto-regexp">
3075 <title><function>SIMILAR TO</function> Regular Expressions</title>
3078 <primary>regular expression</primary>
3079 <!-- <seealso>pattern matching</seealso> breaks index build -->
3083 <primary>SIMILAR TO</primary>
3086 <primary>substring</primary>
3090 <replaceable>string</replaceable> SIMILAR TO <replaceable>pattern</replaceable> <optional>ESCAPE <replaceable>escape-character</replaceable></optional>
3091 <replaceable>string</replaceable> NOT SIMILAR TO <replaceable>pattern</replaceable> <optional>ESCAPE <replaceable>escape-character</replaceable></optional>
3095 The <function>SIMILAR TO</function> operator returns true or
3096 false depending on whether its pattern matches the given string.
3097 It is similar to <function>LIKE</function>, except that it
3098 interprets the pattern using the SQL standard's definition of a
3099 regular expression. SQL regular expressions are a curious cross
3100 between <function>LIKE</function> notation and common regular
3101 expression notation.
3105 Like <function>LIKE</function>, the <function>SIMILAR TO</function>
3106 operator succeeds only if its pattern matches the entire string;
3107 this is unlike common regular expression behavior where the pattern
3108 can match any part of the string.
3110 <function>LIKE</function>, <function>SIMILAR TO</function> uses
3111 <literal>_</> and <literal>%</> as wildcard characters denoting
3112 any single character and any string, respectively (these are
3113 comparable to <literal>.</> and <literal>.*</> in POSIX regular
3118 In addition to these facilities borrowed from <function>LIKE</function>,
3119 <function>SIMILAR TO</function> supports these pattern-matching
3120 metacharacters borrowed from POSIX regular expressions:
3125 <literal>|</literal> denotes alternation (either of two alternatives).
3130 <literal>*</literal> denotes repetition of the previous item zero
3136 <literal>+</literal> denotes repetition of the previous item one
3142 Parentheses <literal>()</literal> can be used to group items into
3143 a single logical item.
3148 A bracket expression <literal>[...]</literal> specifies a character
3149 class, just as in POSIX regular expressions.
3154 Notice that bounded repetition (<literal>?</> and <literal>{...}</>)
3155 is not provided, though they exist in POSIX. Also, the period (<literal>.</>)
3156 is not a metacharacter.
3160 As with <function>LIKE</>, a backslash disables the special meaning
3161 of any of these metacharacters; or a different escape character can
3162 be specified with <literal>ESCAPE</>.
3168 'abc' SIMILAR TO 'abc' <lineannotation>true</lineannotation>
3169 'abc' SIMILAR TO 'a' <lineannotation>false</lineannotation>
3170 'abc' SIMILAR TO '%(b|d)%' <lineannotation>true</lineannotation>
3171 'abc' SIMILAR TO '(b|c)%' <lineannotation>false</lineannotation>
3176 The <function>substring</> function with three parameters,
3177 <function>substring(<replaceable>string</replaceable> from
3178 <replaceable>pattern</replaceable> for
3179 <replaceable>escape-character</replaceable>)</function>, provides
3180 extraction of a substring that matches an SQL
3181 regular expression pattern. As with <literal>SIMILAR TO</>, the
3182 specified pattern must match the entire data string, or else the
3183 function fails and returns null. To indicate the part of the
3184 pattern that should be returned on success, the pattern must contain
3185 two occurrences of the escape character followed by a double quote
3186 (<literal>"</>). <!-- " font-lock sanity -->
3187 The text matching the portion of the pattern
3188 between these markers is returned.
3192 Some examples, with <literal>#"</> delimiting the return string:
3194 substring('foobar' from '%#"o_b#"%' for '#') <lineannotation>oob</lineannotation>
3195 substring('foobar' from '#"o_b#"%' for '#') <lineannotation>NULL</lineannotation>
3200 <sect2 id="functions-posix-regexp">
3201 <title><acronym>POSIX</acronym> Regular Expressions</title>
3203 <indexterm zone="functions-posix-regexp">
3204 <primary>regular expression</primary>
3205 <seealso>pattern matching</seealso>
3208 <primary>substring</primary>
3211 <primary>regexp_replace</primary>
3214 <primary>regexp_matches</primary>
3217 <primary>regexp_split_to_table</primary>
3220 <primary>regexp_split_to_array</primary>
3224 <xref linkend="functions-posix-table"> lists the available
3225 operators for pattern matching using POSIX regular expressions.
3228 <table id="functions-posix-table">
3229 <title>Regular Expression Match Operators</title>
3234 <entry>Operator</entry>
3235 <entry>Description</entry>
3236 <entry>Example</entry>
3242 <entry> <literal>~</literal> </entry>
3243 <entry>Matches regular expression, case sensitive</entry>
3244 <entry><literal>'thomas' ~ '.*thomas.*'</literal></entry>
3248 <entry> <literal>~*</literal> </entry>
3249 <entry>Matches regular expression, case insensitive</entry>
3250 <entry><literal>'thomas' ~* '.*Thomas.*'</literal></entry>
3254 <entry> <literal>!~</literal> </entry>
3255 <entry>Does not match regular expression, case sensitive</entry>
3256 <entry><literal>'thomas' !~ '.*Thomas.*'</literal></entry>
3260 <entry> <literal>!~*</literal> </entry>
3261 <entry>Does not match regular expression, case insensitive</entry>
3262 <entry><literal>'thomas' !~* '.*vadim.*'</literal></entry>
3269 <acronym>POSIX</acronym> regular expressions provide a more
3271 pattern matching than the <function>LIKE</function> and
3272 <function>SIMILAR TO</> operators.
3273 Many Unix tools such as <command>egrep</command>,
3274 <command>sed</command>, or <command>awk</command> use a pattern
3275 matching language that is similar to the one described here.
3279 A regular expression is a character sequence that is an
3280 abbreviated definition of a set of strings (a <firstterm>regular
3281 set</firstterm>). A string is said to match a regular expression
3282 if it is a member of the regular set described by the regular
3283 expression. As with <function>LIKE</function>, pattern characters
3284 match string characters exactly unless they are special characters
3285 in the regular expression language — but regular expressions use
3286 different special characters than <function>LIKE</function>.
3287 Unlike <function>LIKE</function> patterns, a
3288 regular expression is allowed to match anywhere within a string, unless
3289 the regular expression is explicitly anchored to the beginning or
3296 'abc' ~ 'abc' <lineannotation>true</lineannotation>
3297 'abc' ~ '^a' <lineannotation>true</lineannotation>
3298 'abc' ~ '(b|d)' <lineannotation>true</lineannotation>
3299 'abc' ~ '^(b|c)' <lineannotation>false</lineannotation>
3304 The <acronym>POSIX</acronym> pattern language is described in much
3305 greater detail below.
3309 The <function>substring</> function with two parameters,
3310 <function>substring(<replaceable>string</replaceable> from
3311 <replaceable>pattern</replaceable>)</function>, provides extraction of a
3313 that matches a POSIX regular expression pattern. It returns null if
3314 there is no match, otherwise the portion of the text that matched the
3315 pattern. But if the pattern contains any parentheses, the portion
3316 of the text that matched the first parenthesized subexpression (the
3317 one whose left parenthesis comes first) is
3318 returned. You can put parentheses around the whole expression
3319 if you want to use parentheses within it without triggering this
3320 exception. If you need parentheses in the pattern before the
3321 subexpression you want to extract, see the non-capturing parentheses
3328 substring('foobar' from 'o.b') <lineannotation>oob</lineannotation>
3329 substring('foobar' from 'o(.)b') <lineannotation>o</lineannotation>
3334 The <function>regexp_replace</> function provides substitution of
3335 new text for substrings that match POSIX regular expression patterns.
3337 <function>regexp_replace</function>(<replaceable>source</>,
3338 <replaceable>pattern</>, <replaceable>replacement</>
3339 <optional>, <replaceable>flags</> </optional>).
3340 The <replaceable>source</> string is returned unchanged if
3341 there is no match to the <replaceable>pattern</>. If there is a
3342 match, the <replaceable>source</> string is returned with the
3343 <replaceable>replacement</> string substituted for the matching
3344 substring. The <replaceable>replacement</> string can contain
3345 <literal>\</><replaceable>n</>, where <replaceable>n</> is <literal>1</>
3346 through <literal>9</>, to indicate that the source substring matching the
3347 <replaceable>n</>'th parenthesized subexpression of the pattern should be
3348 inserted, and it can contain <literal>\&</> to indicate that the
3349 substring matching the entire pattern should be inserted. Write
3350 <literal>\\</> if you need to put a literal backslash in the replacement
3351 text. (As always, remember to double backslashes written in literal
3352 constant strings, assuming escape string syntax is used.)
3353 The <replaceable>flags</> parameter is an optional text
3354 string containing zero or more single-letter flags that change the
3355 function's behavior. Flag <literal>i</> specifies case-insensitive
3356 matching, while flag <literal>g</> specifies replacement of each matching
3357 substring rather than only the first one. Other supported flags are
3358 described in <xref linkend="posix-embedded-options-table">.
3364 regexp_replace('foobarbaz', 'b..', 'X')
3365 <lineannotation>fooXbaz</lineannotation>
3366 regexp_replace('foobarbaz', 'b..', 'X', 'g')
3367 <lineannotation>fooXX</lineannotation>
3368 regexp_replace('foobarbaz', 'b(..)', E'X\\1Y', 'g')
3369 <lineannotation>fooXarYXazY</lineannotation>
3374 The <function>regexp_matches</> function returns all of the captured
3375 substrings resulting from matching a POSIX regular expression pattern.
3377 <function>regexp_matches</function>(<replaceable>string</>, <replaceable>pattern</>
3378 <optional>, <replaceable>flags</> </optional>).
3379 If there is no match to the <replaceable>pattern</>, the function returns
3380 no rows. If there is a match, the function returns a text array whose
3381 <replaceable>n</>'th element is the substring matching the
3382 <replaceable>n</>'th parenthesized subexpression of the pattern
3383 (not counting <quote>non-capturing</> parentheses; see below for
3384 details). If the pattern does not contain any parenthesized
3385 subexpressions, then the result is a single-element text array containing
3386 the substring matching the whole pattern.
3387 The <replaceable>flags</> parameter is an optional text
3388 string containing zero or more single-letter flags that change the
3389 function's behavior. Flag <literal>g</> causes the function to find
3390 each match in the string, not only the first one, and return a row for
3391 each such match. Other supported
3392 flags are described in <xref linkend="posix-embedded-options-table">.
3398 SELECT regexp_matches('foobarbequebaz', '(bar)(beque)');
3404 SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g');
3411 SELECT regexp_matches('foobarbequebaz', 'barbeque');
3420 The <function>regexp_split_to_table</> function splits a string using a POSIX
3421 regular expression pattern as a delimiter. It has the syntax
3422 <function>regexp_split_to_table</function>(<replaceable>string</>, <replaceable>pattern</>
3423 <optional>, <replaceable>flags</> </optional>).
3424 If there is no match to the <replaceable>pattern</>, the function returns the
3425 <replaceable>string</>. If there is at least one match, for each match it returns
3426 the text from the end of the last match (or the beginning of the string)
3427 to the beginning of the match. When there are no more matches, it
3428 returns the text from the end of the last match to the end of the string.
3429 The <replaceable>flags</> parameter is an optional text string containing
3430 zero or more single-letter flags that change the function's behavior.
3431 <function>regexp_split_to_table</function> supports the flags described in
3432 <xref linkend="posix-embedded-options-table">.
3436 The <function>regexp_split_to_array</> function behaves the same as
3437 <function>regexp_split_to_table</>, except that <function>regexp_split_to_array</>
3438 returns its result as an array of <type>text</>. It has the syntax
3439 <function>regexp_split_to_array</function>(<replaceable>string</>, <replaceable>pattern</>
3440 <optional>, <replaceable>flags</> </optional>).
3441 The parameters are the same as for <function>regexp_split_to_table</>.
3448 SELECT foo FROM regexp_split_to_table('the quick brown fox jumped over the lazy dog', E'\\s+') AS foo;
3462 SELECT regexp_split_to_array('the quick brown fox jumped over the lazy dog', E'\\s+');
3463 regexp_split_to_array
3464 ------------------------------------------------
3465 {the,quick,brown,fox,jumped,over,the,lazy,dog}
3468 SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo;
3492 As the last example demonstrates, the regexp split functions ignore
3493 zero-length matches that occur at the start or end of the string
3494 or immediately after a previous match. This is contrary to the strict
3495 definition of regexp matching that is implemented by
3496 <function>regexp_matches</>, but is usually the most convenient behavior
3497 in practice. Other software systems such as Perl use similar definitions.
3500 <!-- derived from the re_syntax.n man page -->
3502 <sect3 id="posix-syntax-details">
3503 <title>Regular Expression Details</title>
3506 <productname>PostgreSQL</productname>'s regular expressions are implemented
3507 using a software package written by Henry Spencer. Much of
3508 the description of regular expressions below is copied verbatim from his
3513 Regular expressions (<acronym>RE</acronym>s), as defined in
3514 <acronym>POSIX</acronym> 1003.2, come in two forms:
3515 <firstterm>extended</> <acronym>RE</acronym>s or <acronym>ERE</>s
3516 (roughly those of <command>egrep</command>), and
3517 <firstterm>basic</> <acronym>RE</acronym>s or <acronym>BRE</>s
3518 (roughly those of <command>ed</command>).
3519 <productname>PostgreSQL</productname> supports both forms, and
3520 also implements some extensions
3521 that are not in the POSIX standard, but have become widely used
3522 due to their availability in programming languages such as Perl and Tcl.
3523 <acronym>RE</acronym>s using these non-POSIX extensions are called
3524 <firstterm>advanced</> <acronym>RE</acronym>s or <acronym>ARE</>s
3525 in this documentation. AREs are almost an exact superset of EREs,
3526 but BREs have several notational incompatibilities (as well as being
3528 We first describe the ARE and ERE forms, noting features that apply
3529 only to AREs, and then describe how BREs differ.
3534 The form of regular expressions accepted by
3535 <productname>PostgreSQL</> can be chosen by setting the <xref
3536 linkend="guc-regex-flavor"> run-time parameter. The usual
3537 setting is <literal>advanced</>, but one might choose
3538 <literal>extended</> for backwards compatibility with
3539 pre-7.4 releases of <productname>PostgreSQL</>.
3544 A regular expression is defined as one or more
3545 <firstterm>branches</firstterm>, separated by
3546 <literal>|</literal>. It matches anything that matches one of the
3551 A branch is zero or more <firstterm>quantified atoms</> or
3552 <firstterm>constraints</>, concatenated.
3553 It tries a match of the first, followed by a match for the second, etc;
3554 an empty branch matches the empty string.
3558 A quantified atom is an <firstterm>atom</> possibly followed
3559 by a single <firstterm>quantifier</>.
3560 Without a quantifier, it matches a match for the atom.
3561 With a quantifier, it can match some number of matches of the atom.
3562 An <firstterm>atom</firstterm> can be any of the possibilities
3563 shown in <xref linkend="posix-atoms-table">.
3564 The possible quantifiers and their meanings are shown in
3565 <xref linkend="posix-quantifiers-table">.
3569 A <firstterm>constraint</> matches an empty string, but matches only when
3570 specific conditions are met. A constraint cannot be followed by a quantifier.
3571 The simple constraints are shown in
3572 <xref linkend="posix-constraints-table">;
3573 some more constraints are described later.
3577 <table id="posix-atoms-table">
3578 <title>Regular Expression Atoms</title>
3584 <entry>Description</entry>
3590 <entry> <literal>(</><replaceable>re</><literal>)</> </entry>
3591 <entry> (where <replaceable>re</> is any regular expression)
3593 <replaceable>re</>, with the match noted for possible reporting </entry>
3597 <entry> <literal>(?:</><replaceable>re</><literal>)</> </entry>
3598 <entry> as above, but the match is not noted for reporting
3599 (a <quote>non-capturing</> set of parentheses)
3600 (AREs only) </entry>
3604 <entry> <literal>.</> </entry>
3605 <entry> matches any single character </entry>
3609 <entry> <literal>[</><replaceable>chars</><literal>]</> </entry>
3610 <entry> a <firstterm>bracket expression</>,
3611 matching any one of the <replaceable>chars</> (see
3612 <xref linkend="posix-bracket-expressions"> for more detail) </entry>
3616 <entry> <literal>\</><replaceable>k</> </entry>
3617 <entry> (where <replaceable>k</> is a non-alphanumeric character)
3618 matches that character taken as an ordinary character,
3619 e.g., <literal>\\</> matches a backslash character </entry>
3623 <entry> <literal>\</><replaceable>c</> </entry>
3624 <entry> where <replaceable>c</> is alphanumeric
3625 (possibly followed by other characters)
3626 is an <firstterm>escape</>, see <xref linkend="posix-escape-sequences">
3627 (AREs only; in EREs and BREs, this matches <replaceable>c</>) </entry>
3631 <entry> <literal>{</> </entry>
3632 <entry> when followed by a character other than a digit,
3633 matches the left-brace character <literal>{</>;
3634 when followed by a digit, it is the beginning of a
3635 <replaceable>bound</> (see below) </entry>
3639 <entry> <replaceable>x</> </entry>
3640 <entry> where <replaceable>x</> is a single character with no other
3641 significance, matches that character </entry>
3648 An RE cannot end with <literal>\</>.
3653 Remember that the backslash (<literal>\</literal>) already has a special
3654 meaning in <productname>PostgreSQL</> string literals.
3655 To write a pattern constant that contains a backslash,
3656 you must write two backslashes in the statement, assuming escape
3657 string syntax is used (see <xref linkend="sql-syntax-strings">).
3661 <table id="posix-quantifiers-table">
3662 <title>Regular Expression Quantifiers</title>
3667 <entry>Quantifier</entry>
3668 <entry>Matches</entry>
3674 <entry> <literal>*</> </entry>
3675 <entry> a sequence of 0 or more matches of the atom </entry>
3679 <entry> <literal>+</> </entry>
3680 <entry> a sequence of 1 or more matches of the atom </entry>
3684 <entry> <literal>?</> </entry>
3685 <entry> a sequence of 0 or 1 matches of the atom </entry>
3689 <entry> <literal>{</><replaceable>m</><literal>}</> </entry>
3690 <entry> a sequence of exactly <replaceable>m</> matches of the atom </entry>
3694 <entry> <literal>{</><replaceable>m</><literal>,}</> </entry>
3695 <entry> a sequence of <replaceable>m</> or more matches of the atom </entry>
3700 <literal>{</><replaceable>m</><literal>,</><replaceable>n</><literal>}</> </entry>
3701 <entry> a sequence of <replaceable>m</> through <replaceable>n</>
3702 (inclusive) matches of the atom; <replaceable>m</> cannot exceed
3703 <replaceable>n</> </entry>
3707 <entry> <literal>*?</> </entry>
3708 <entry> non-greedy version of <literal>*</> </entry>
3712 <entry> <literal>+?</> </entry>
3713 <entry> non-greedy version of <literal>+</> </entry>
3717 <entry> <literal>??</> </entry>
3718 <entry> non-greedy version of <literal>?</> </entry>
3722 <entry> <literal>{</><replaceable>m</><literal>}?</> </entry>
3723 <entry> non-greedy version of <literal>{</><replaceable>m</><literal>}</> </entry>
3727 <entry> <literal>{</><replaceable>m</><literal>,}?</> </entry>
3728 <entry> non-greedy version of <literal>{</><replaceable>m</><literal>,}</> </entry>
3733 <literal>{</><replaceable>m</><literal>,</><replaceable>n</><literal>}?</> </entry>
3734 <entry> non-greedy version of <literal>{</><replaceable>m</><literal>,</><replaceable>n</><literal>}</> </entry>
3741 The forms using <literal>{</><replaceable>...</><literal>}</>
3742 are known as <firstterm>bounds</>.
3743 The numbers <replaceable>m</> and <replaceable>n</> within a bound are
3744 unsigned decimal integers with permissible values from 0 to 255 inclusive.
3748 <firstterm>Non-greedy</> quantifiers (available in AREs only) match the
3749 same possibilities as their corresponding normal (<firstterm>greedy</>)
3750 counterparts, but prefer the smallest number rather than the largest
3752 See <xref linkend="posix-matching-rules"> for more detail.
3757 A quantifier cannot immediately follow another quantifier, e.g.,
3758 <literal>**</> is invalid.
3760 begin an expression or subexpression or follow
3761 <literal>^</literal> or <literal>|</literal>.
3765 <table id="posix-constraints-table">
3766 <title>Regular Expression Constraints</title>
3771 <entry>Constraint</entry>
3772 <entry>Description</entry>
3778 <entry> <literal>^</> </entry>
3779 <entry> matches the beginning of the string </entry>
3783 <entry> <literal>$</> </entry>
3784 <entry> matches the end of the string </entry>
3788 <entry> <literal>(?=</><replaceable>re</><literal>)</> </entry>
3789 <entry> <firstterm>positive lookahead</> matches at any point
3790 where a substring matching <replaceable>re</> begins
3791 (AREs only) </entry>
3795 <entry> <literal>(?!</><replaceable>re</><literal>)</> </entry>
3796 <entry> <firstterm>negative lookahead</> matches at any point
3797 where no substring matching <replaceable>re</> begins
3798 (AREs only) </entry>
3805 Lookahead constraints cannot contain <firstterm>back references</>
3806 (see <xref linkend="posix-escape-sequences">),
3807 and all parentheses within them are considered non-capturing.
3811 <sect3 id="posix-bracket-expressions">
3812 <title>Bracket Expressions</title>
3815 A <firstterm>bracket expression</firstterm> is a list of
3816 characters enclosed in <literal>[]</literal>. It normally matches
3817 any single character from the list (but see below). If the list
3818 begins with <literal>^</literal>, it matches any single character
3819 <emphasis>not</> from the rest of the list.
3821 in the list are separated by <literal>-</literal>, this is
3822 shorthand for the full range of characters between those two
3823 (inclusive) in the collating sequence,
3824 e.g., <literal>[0-9]</literal> in <acronym>ASCII</acronym> matches
3825 any decimal digit. It is illegal for two ranges to share an
3826 endpoint, e.g., <literal>a-c-e</literal>. Ranges are very
3827 collating-sequence-dependent, so portable programs should avoid
3832 To include a literal <literal>]</literal> in the list, make it the
3833 first character (possibly following a <literal>^</literal>). To
3834 include a literal <literal>-</literal>, make it the first or last
3835 character, or the second endpoint of a range. To use a literal
3836 <literal>-</literal> as the start of a range, enclose it
3837 in <literal>[.</literal> and <literal>.]</literal> to make it a
3838 collating element (see below). With the exception of these characters and
3839 some combinations using <literal>[</literal>
3840 (see next paragraphs), and escapes (AREs only), all other special
3841 characters lose their special significance within a bracket expression.
3842 In particular, <literal>\</literal> is not special when following
3843 ERE or BRE rules, though it is special (as introducing an escape)
3848 Within a bracket expression, a collating element (a character, a
3849 multiple-character sequence that collates as if it were a single
3850 character, or a collating-sequence name for either) enclosed in
3851 <literal>[.</literal> and <literal>.]</literal> stands for the
3852 sequence of characters of that collating element. The sequence is
3853 treated as a single element of the bracket expression's list. This
3855 expression containing a multiple-character collating element to
3856 match more than one character, e.g., if the collating sequence
3857 includes a <literal>ch</literal> collating element, then the RE
3858 <literal>[[.ch.]]*c</literal> matches the first five characters of
3859 <literal>chchcc</literal>.
3864 <productname>PostgreSQL</> currently does not support multi-character collating
3865 elements. This information describes possible future behavior.
3870 Within a bracket expression, a collating element enclosed in
3871 <literal>[=</literal> and <literal>=]</literal> is an <firstterm>equivalence
3872 class</>, standing for the sequences of characters of all collating
3873 elements equivalent to that one, including itself. (If there are
3874 no other equivalent collating elements, the treatment is as if the
3875 enclosing delimiters were <literal>[.</literal> and
3876 <literal>.]</literal>.) For example, if <literal>o</literal> and
3877 <literal>^</literal> are the members of an equivalence class, then
3878 <literal>[[=o=]]</literal>, <literal>[[=^=]]</literal>, and
3879 <literal>[o^]</literal> are all synonymous. An equivalence class
3880 cannot be an endpoint of a range.
3884 Within a bracket expression, the name of a character class
3885 enclosed in <literal>[:</literal> and <literal>:]</literal> stands
3886 for the list of all characters belonging to that class. Standard
3887 character class names are: <literal>alnum</literal>,
3888 <literal>alpha</literal>, <literal>blank</literal>,
3889 <literal>cntrl</literal>, <literal>digit</literal>,
3890 <literal>graph</literal>, <literal>lower</literal>,
3891 <literal>print</literal>, <literal>punct</literal>,
3892 <literal>space</literal>, <literal>upper</literal>,
3893 <literal>xdigit</literal>. These stand for the character classes
3895 <citerefentry><refentrytitle>ctype</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
3896 A locale can provide others. A character class cannot be used as
3897 an endpoint of a range.
3901 There are two special cases of bracket expressions: the bracket
3902 expressions <literal>[[:<:]]</literal> and
3903 <literal>[[:>:]]</literal> are constraints,
3904 matching empty strings at the beginning
3905 and end of a word respectively. A word is defined as a sequence
3906 of word characters that is neither preceded nor followed by word
3907 characters. A word character is an <literal>alnum</> character (as
3909 <citerefentry><refentrytitle>ctype</refentrytitle><manvolnum>3</manvolnum></citerefentry>)
3910 or an underscore. This is an extension, compatible with but not
3911 specified by <acronym>POSIX</acronym> 1003.2, and should be used with
3912 caution in software intended to be portable to other systems.
3913 The constraint escapes described below are usually preferable; they
3914 are no more standard, but are easier to type.
3918 <sect3 id="posix-escape-sequences">
3919 <title>Regular Expression Escapes</title>
3922 <firstterm>Escapes</> are special sequences beginning with <literal>\</>
3923 followed by an alphanumeric character. Escapes come in several varieties:
3924 character entry, class shorthands, constraint escapes, and back references.
3925 A <literal>\</> followed by an alphanumeric character but not constituting
3926 a valid escape is illegal in AREs.
3927 In EREs, there are no escapes: outside a bracket expression,
3928 a <literal>\</> followed by an alphanumeric character merely stands for
3929 that character as an ordinary character, and inside a bracket expression,
3930 <literal>\</> is an ordinary character.
3931 (The latter is the one actual incompatibility between EREs and AREs.)
3935 <firstterm>Character-entry escapes</> exist to make it easier to specify
3936 non-printing and inconvenient characters in REs. They are
3937 shown in <xref linkend="posix-character-entry-escapes-table">.
3941 <firstterm>Class-shorthand escapes</> provide shorthands for certain
3942 commonly-used character classes. They are
3943 shown in <xref linkend="posix-class-shorthand-escapes-table">.
3947 A <firstterm>constraint escape</> is a constraint,
3948 matching the empty string if specific conditions are met,
3949 written as an escape. They are
3950 shown in <xref linkend="posix-constraint-escapes-table">.
3954 A <firstterm>back reference</> (<literal>\</><replaceable>n</>) matches the
3955 same string matched by the previous parenthesized subexpression specified
3956 by the number <replaceable>n</>
3957 (see <xref linkend="posix-constraint-backref-table">). For example,
3958 <literal>([bc])\1</> matches <literal>bb</> or <literal>cc</>
3959 but not <literal>bc</> or <literal>cb</>.
3960 The subexpression must entirely precede the back reference in the RE.
3961 Subexpressions are numbered in the order of their leading parentheses.
3962 Non-capturing parentheses do not define subexpressions.
3967 Keep in mind that an escape's leading <literal>\</> will need to be
3968 doubled when entering the pattern as an SQL string constant. For example:
3970 '123' ~ E'^\\d{3}' <lineannotation>true</lineannotation>
3975 <table id="posix-character-entry-escapes-table">
3976 <title>Regular Expression Character-Entry Escapes</title>
3981 <entry>Escape</entry>
3982 <entry>Description</entry>
3988 <entry> <literal>\a</> </entry>
3989 <entry> alert (bell) character, as in C </entry>
3993 <entry> <literal>\b</> </entry>
3994 <entry> backspace, as in C </entry>
3998 <entry> <literal>\B</> </entry>
3999 <entry> synonym for backslash (<literal>\</>) to help reduce the need for backslash
4004 <entry> <literal>\c</><replaceable>X</> </entry>
4005 <entry> (where <replaceable>X</> is any character) the character whose
4006 low-order 5 bits are the same as those of
4007 <replaceable>X</>, and whose other bits are all zero </entry>
4011 <entry> <literal>\e</> </entry>
4012 <entry> the character whose collating-sequence name
4014 or failing that, the character with octal value 033 </entry>
4018 <entry> <literal>\f</> </entry>
4019 <entry> form feed, as in C </entry>
4023 <entry> <literal>\n</> </entry>
4024 <entry> newline, as in C </entry>
4028 <entry> <literal>\r</> </entry>
4029 <entry> carriage return, as in C </entry>
4033 <entry> <literal>\t</> </entry>
4034 <entry> horizontal tab, as in C </entry>
4038 <entry> <literal>\u</><replaceable>wxyz</> </entry>
4039 <entry> (where <replaceable>wxyz</> is exactly four hexadecimal digits)
4040 the UTF16 (Unicode, 16-bit) character <literal>U+</><replaceable>wxyz</>
4041 in the local byte encoding</entry>
4045 <entry> <literal>\U</><replaceable>stuvwxyz</> </entry>
4046 <entry> (where <replaceable>stuvwxyz</> is exactly eight hexadecimal
4048 reserved for a hypothetical Unicode extension to 32 bits
4053 <entry> <literal>\v</> </entry>
4054 <entry> vertical tab, as in C </entry>
4058 <entry> <literal>\x</><replaceable>###</> </entry>
4059 <entry> (where <replaceable>###</> is any sequence of hexadecimal
4061 the character whose hexadecimal value is
4062 <literal>0x</><replaceable>###</>
4063 (a single character no matter how many hexadecimal digits are used)
4068 <entry> <literal>\0</> </entry>
4069 <entry> the character whose value is <literal>0</> (the null byte)</entry>
4073 <entry> <literal>\</><replaceable>##</> </entry>
4074 <entry> (where <replaceable>##</> is exactly two octal digits,
4075 and is not a <firstterm>back reference</>)
4076 the character whose octal value is
4077 <literal>0</><replaceable>##</> </entry>
4081 <entry> <literal>\</><replaceable>###</> </entry>
4082 <entry> (where <replaceable>###</> is exactly three octal digits,
4083 and is not a <firstterm>back reference</>)
4084 the character whose octal value is
4085 <literal>0</><replaceable>###</> </entry>
4092 Hexadecimal digits are <literal>0</>-<literal>9</>,
4093 <literal>a</>-<literal>f</>, and <literal>A</>-<literal>F</>.
4094 Octal digits are <literal>0</>-<literal>7</>.
4098 The character-entry escapes are always taken as ordinary characters.
4099 For example, <literal>\135</> is <literal>]</> in ASCII, but
4100 <literal>\135</> does not terminate a bracket expression.
4103 <table id="posix-class-shorthand-escapes-table">
4104 <title>Regular Expression Class-Shorthand Escapes</title>
4109 <entry>Escape</entry>
4110 <entry>Description</entry>
4116 <entry> <literal>\d</> </entry>
4117 <entry> <literal>[[:digit:]]</> </entry>
4121 <entry> <literal>\s</> </entry>
4122 <entry> <literal>[[:space:]]</> </entry>
4126 <entry> <literal>\w</> </entry>
4127 <entry> <literal>[[:alnum:]_]</>
4128 (note underscore is included) </entry>
4132 <entry> <literal>\D</> </entry>
4133 <entry> <literal>[^[:digit:]]</> </entry>
4137 <entry> <literal>\S</> </entry>
4138 <entry> <literal>[^[:space:]]</> </entry>
4142 <entry> <literal>\W</> </entry>
4143 <entry> <literal>[^[:alnum:]_]</>
4144 (note underscore is included) </entry>
4151 Within bracket expressions, <literal>\d</>, <literal>\s</>,
4152 and <literal>\w</> lose their outer brackets,
4153 and <literal>\D</>, <literal>\S</>, and <literal>\W</> are illegal.
4154 (So, for example, <literal>[a-c\d]</> is equivalent to
4155 <literal>[a-c[:digit:]]</>.
4156 Also, <literal>[a-c\D]</>, which is equivalent to
4157 <literal>[a-c^[:digit:]]</>, is illegal.)
4160 <table id="posix-constraint-escapes-table">
4161 <title>Regular Expression Constraint Escapes</title>
4166 <entry>Escape</entry>
4167 <entry>Description</entry>
4173 <entry> <literal>\A</> </entry>
4174 <entry> matches only at the beginning of the string
4175 (see <xref linkend="posix-matching-rules"> for how this differs from
4176 <literal>^</>) </entry>
4180 <entry> <literal>\m</> </entry>
4181 <entry> matches only at the beginning of a word </entry>
4185 <entry> <literal>\M</> </entry>
4186 <entry> matches only at the end of a word </entry>
4190 <entry> <literal>\y</> </entry>
4191 <entry> matches only at the beginning or end of a word </entry>
4195 <entry> <literal>\Y</> </entry>
4196 <entry> matches only at a point that is not the beginning or end of a
4201 <entry> <literal>\Z</> </entry>
4202 <entry> matches only at the end of the string
4203 (see <xref linkend="posix-matching-rules"> for how this differs from
4204 <literal>$</>) </entry>
4211 A word is defined as in the specification of
4212 <literal>[[:<:]]</> and <literal>[[:>:]]</> above.
4213 Constraint escapes are illegal within bracket expressions.
4216 <table id="posix-constraint-backref-table">
4217 <title>Regular Expression Back References</title>
4222 <entry>Escape</entry>
4223 <entry>Description</entry>
4229 <entry> <literal>\</><replaceable>m</> </entry>
4230 <entry> (where <replaceable>m</> is a nonzero digit)
4231 a back reference to the <replaceable>m</>'th subexpression </entry>
4235 <entry> <literal>\</><replaceable>mnn</> </entry>
4236 <entry> (where <replaceable>m</> is a nonzero digit, and
4237 <replaceable>nn</> is some more digits, and the decimal value
4238 <replaceable>mnn</> is not greater than the number of closing capturing
4239 parentheses seen so far)
4240 a back reference to the <replaceable>mnn</>'th subexpression </entry>
4248 There is an inherent ambiguity between octal character-entry
4249 escapes and back references, which is resolved by heuristics,
4251 A leading zero always indicates an octal escape.
4252 A single non-zero digit, not followed by another digit,
4253 is always taken as a back reference.
4254 A multidigit sequence not starting with a zero is taken as a back
4255 reference if it comes after a suitable subexpression
4256 (i.e., the number is in the legal range for a back reference),
4257 and otherwise is taken as octal.
4262 <sect3 id="posix-metasyntax">
4263 <title>Regular Expression Metasyntax</title>
4266 In addition to the main syntax described above, there are some special
4267 forms and miscellaneous syntactic facilities available.
4271 Normally the flavor of RE being used is determined by
4272 <varname>regex_flavor</>.
4273 However, this can be overridden by a <firstterm>director</> prefix.
4274 If an RE begins with <literal>***:</>,
4275 the rest of the RE is taken as an ARE regardless of
4276 <varname>regex_flavor</>.
4277 If an RE begins with <literal>***=</>,
4278 the rest of the RE is taken to be a literal string,
4279 with all characters considered ordinary characters.
4283 An ARE can begin with <firstterm>embedded options</>:
4284 a sequence <literal>(?</><replaceable>xyz</><literal>)</>
4285 (where <replaceable>xyz</> is one or more alphabetic characters)
4286 specifies options affecting the rest of the RE.
4287 These options override any previously determined options (including
4288 both the RE flavor and case sensitivity).
4289 The available option letters are
4290 shown in <xref linkend="posix-embedded-options-table">.
4293 <table id="posix-embedded-options-table">
4294 <title>ARE Embedded-Option Letters</title>
4299 <entry>Option</entry>
4300 <entry>Description</entry>
4306 <entry> <literal>b</> </entry>
4307 <entry> rest of RE is a BRE </entry>
4311 <entry> <literal>c</> </entry>
4312 <entry> case-sensitive matching (overrides operator type) </entry>
4316 <entry> <literal>e</> </entry>
4317 <entry> rest of RE is an ERE </entry>
4321 <entry> <literal>i</> </entry>
4322 <entry> case-insensitive matching (see
4323 <xref linkend="posix-matching-rules">) (overrides operator type) </entry>
4327 <entry> <literal>m</> </entry>
4328 <entry> historical synonym for <literal>n</> </entry>
4332 <entry> <literal>n</> </entry>
4333 <entry> newline-sensitive matching (see
4334 <xref linkend="posix-matching-rules">) </entry>
4338 <entry> <literal>p</> </entry>
4339 <entry> partial newline-sensitive matching (see
4340 <xref linkend="posix-matching-rules">) </entry>
4344 <entry> <literal>q</> </entry>
4345 <entry> rest of RE is a literal (<quote>quoted</>) string, all ordinary
4350 <entry> <literal>s</> </entry>
4351 <entry> non-newline-sensitive matching (default) </entry>
4355 <entry> <literal>t</> </entry>
4356 <entry> tight syntax (default; see below) </entry>
4360 <entry> <literal>w</> </entry>
4361 <entry> inverse partial newline-sensitive (<quote>weird</>) matching
4362 (see <xref linkend="posix-matching-rules">) </entry>
4366 <entry> <literal>x</> </entry>
4367 <entry> expanded syntax (see below) </entry>
4374 Embedded options take effect at the <literal>)</> terminating the sequence.
4375 They can appear only at the start of an ARE (after the
4376 <literal>***:</> director if any).
4380 In addition to the usual (<firstterm>tight</>) RE syntax, in which all
4381 characters are significant, there is an <firstterm>expanded</> syntax,
4382 available by specifying the embedded <literal>x</> option.
4383 In the expanded syntax,
4384 white-space characters in the RE are ignored, as are
4385 all characters between a <literal>#</>
4386 and the following newline (or the end of the RE). This
4387 permits paragraphing and commenting a complex RE.
4388 There are three exceptions to that basic rule:
4393 a white-space character or <literal>#</> preceded by <literal>\</> is
4399 white space or <literal>#</> within a bracket expression is retained
4404 white space and comments cannot appear within multi-character symbols,
4405 such as <literal>(?:</>
4410 For this purpose, white-space characters are blank, tab, newline, and
4411 any character that belongs to the <replaceable>space</> character class.
4415 Finally, in an ARE, outside bracket expressions, the sequence
4416 <literal>(?#</><replaceable>ttt</><literal>)</>
4417 (where <replaceable>ttt</> is any text not containing a <literal>)</>)
4418 is a comment, completely ignored.
4419 Again, this is not allowed between the characters of
4420 multi-character symbols, like <literal>(?:</>.
4421 Such comments are more a historical artifact than a useful facility,
4422 and their use is deprecated; use the expanded syntax instead.
4426 <emphasis>None</> of these metasyntax extensions is available if
4427 an initial <literal>***=</> director
4428 has specified that the user's input be treated as a literal string
4429 rather than as an RE.
4433 <sect3 id="posix-matching-rules">
4434 <title>Regular Expression Matching Rules</title>
4437 In the event that an RE could match more than one substring of a given
4438 string, the RE matches the one starting earliest in the string.
4439 If the RE could match more than one substring starting at that point,
4440 either the longest possible match or the shortest possible match will
4441 be taken, depending on whether the RE is <firstterm>greedy</> or
4442 <firstterm>non-greedy</>.
4446 Whether an RE is greedy or not is determined by the following rules:
4450 Most atoms, and all constraints, have no greediness attribute (because
4451 they cannot match variable amounts of text anyway).
4456 Adding parentheses around an RE does not change its greediness.
4461 A quantified atom with a fixed-repetition quantifier
4462 (<literal>{</><replaceable>m</><literal>}</>
4464 <literal>{</><replaceable>m</><literal>}?</>)
4465 has the same greediness (possibly none) as the atom itself.
4470 A quantified atom with other normal quantifiers (including
4471 <literal>{</><replaceable>m</><literal>,</><replaceable>n</><literal>}</>
4472 with <replaceable>m</> equal to <replaceable>n</>)
4473 is greedy (prefers longest match).
4478 A quantified atom with a non-greedy quantifier (including
4479 <literal>{</><replaceable>m</><literal>,</><replaceable>n</><literal>}?</>
4480 with <replaceable>m</> equal to <replaceable>n</>)
4481 is non-greedy (prefers shortest match).
4486 A branch — that is, an RE that has no top-level
4487 <literal>|</> operator — has the same greediness as the first
4488 quantified atom in it that has a greediness attribute.
4493 An RE consisting of two or more branches connected by the
4494 <literal>|</> operator is always greedy.
4501 The above rules associate greediness attributes not only with individual
4502 quantified atoms, but with branches and entire REs that contain quantified
4503 atoms. What that means is that the matching is done in such a way that
4504 the branch, or whole RE, matches the longest or shortest possible
4505 substring <emphasis>as a whole</>. Once the length of the entire match
4506 is determined, the part of it that matches any particular subexpression
4507 is determined on the basis of the greediness attribute of that
4508 subexpression, with subexpressions starting earlier in the RE taking
4509 priority over ones starting later.
4513 An example of what this means:
4515 SELECT SUBSTRING('XY1234Z', 'Y*([0-9]{1,3})');
4516 <lineannotation>Result: </lineannotation><computeroutput>123</computeroutput>
4517 SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})');
4518 <lineannotation>Result: </lineannotation><computeroutput>1</computeroutput>
4520 In the first case, the RE as a whole is greedy because <literal>Y*</>
4521 is greedy. It can match beginning at the <literal>Y</>, and it matches
4522 the longest possible string starting there, i.e., <literal>Y123</>.
4523 The output is the parenthesized part of that, or <literal>123</>.
4524 In the second case, the RE as a whole is non-greedy because <literal>Y*?</>
4525 is non-greedy. It can match beginning at the <literal>Y</>, and it matches
4526 the shortest possible string starting there, i.e., <literal>Y1</>.
4527 The subexpression <literal>[0-9]{1,3}</> is greedy but it cannot change
4528 the decision as to the overall match length; so it is forced to match
4533 In short, when an RE contains both greedy and non-greedy subexpressions,
4534 the total match length is either as long as possible or as short as
4535 possible, according to the attribute assigned to the whole RE. The
4536 attributes assigned to the subexpressions only affect how much of that
4537 match they are allowed to <quote>eat</> relative to each other.
4541 The quantifiers <literal>{1,1}</> and <literal>{1,1}?</>
4542 can be used to force greediness or non-greediness, respectively,
4543 on a subexpression or a whole RE.
4547 Match lengths are measured in characters, not collating elements.
4548 An empty string is considered longer than no match at all.
4551 matches the three middle characters of <literal>abbbc</>;
4552 <literal>(week|wee)(night|knights)</>
4553 matches all ten characters of <literal>weeknights</>;
4554 when <literal>(.*).*</>
4555 is matched against <literal>abc</> the parenthesized subexpression
4556 matches all three characters; and when
4557 <literal>(a*)*</> is matched against <literal>bc</>
4558 both the whole RE and the parenthesized
4559 subexpression match an empty string.
4563 If case-independent matching is specified,
4564 the effect is much as if all case distinctions had vanished from the
4566 When an alphabetic that exists in multiple cases appears as an
4567 ordinary character outside a bracket expression, it is effectively
4568 transformed into a bracket expression containing both cases,
4569 e.g., <literal>x</> becomes <literal>[xX]</>.
4570 When it appears inside a bracket expression, all case counterparts
4571 of it are added to the bracket expression, e.g.,
4572 <literal>[x]</> becomes <literal>[xX]</>
4573 and <literal>[^x]</> becomes <literal>[^xX]</>.
4577 If newline-sensitive matching is specified, <literal>.</>
4578 and bracket expressions using <literal>^</>
4579 will never match the newline character
4580 (so that matches will never cross newlines unless the RE
4581 explicitly arranges it)
4582 and <literal>^</>and <literal>$</>
4583 will match the empty string after and before a newline
4584 respectively, in addition to matching at beginning and end of string
4586 But the ARE escapes <literal>\A</> and <literal>\Z</>
4587 continue to match beginning or end of string <emphasis>only</>.
4591 If partial newline-sensitive matching is specified,
4592 this affects <literal>.</> and bracket expressions
4593 as with newline-sensitive matching, but not <literal>^</>
4598 If inverse partial newline-sensitive matching is specified,
4599 this affects <literal>^</> and <literal>$</>
4600 as with newline-sensitive matching, but not <literal>.</>
4601 and bracket expressions.
4602 This isn't very useful but is provided for symmetry.
4606 <sect3 id="posix-limits-compatibility">
4607 <title>Limits and Compatibility</title>
4610 No particular limit is imposed on the length of REs in this
4611 implementation. However,
4612 programs intended to be highly portable should not employ REs longer
4614 as a POSIX-compliant implementation can refuse to accept such REs.
4618 The only feature of AREs that is actually incompatible with
4619 POSIX EREs is that <literal>\</> does not lose its special
4620 significance inside bracket expressions.
4621 All other ARE features use syntax which is illegal or has
4622 undefined or unspecified effects in POSIX EREs;
4623 the <literal>***</> syntax of directors likewise is outside the POSIX
4624 syntax for both BREs and EREs.
4628 Many of the ARE extensions are borrowed from Perl, but some have
4629 been changed to clean them up, and a few Perl extensions are not present.
4630 Incompatibilities of note include <literal>\b</>, <literal>\B</>,
4631 the lack of special treatment for a trailing newline,
4632 the addition of complemented bracket expressions to the things
4633 affected by newline-sensitive matching,
4634 the restrictions on parentheses and back references in lookahead
4635 constraints, and the longest/shortest-match (rather than first-match)
4640 Two significant incompatibilities exist between AREs and the ERE syntax
4641 recognized by pre-7.4 releases of <productname>PostgreSQL</>:
4646 In AREs, <literal>\</> followed by an alphanumeric character is either
4647 an escape or an error, while in previous releases, it was just another
4648 way of writing the alphanumeric.
4649 This should not be much of a problem because there was no reason to
4650 write such a sequence in earlier releases.
4655 In AREs, <literal>\</> remains a special character within
4656 <literal>[]</>, so a literal <literal>\</> within a bracket
4657 expression must be written <literal>\\</>.
4662 While these differences are unlikely to create a problem for most
4663 applications, you can avoid them if necessary by
4664 setting <varname>regex_flavor</> to <literal>extended</>.
4668 <sect3 id="posix-basic-regexes">
4669 <title>Basic Regular Expressions</title>
4672 BREs differ from EREs in several respects.
4673 In BREs, <literal>|</>, <literal>+</>, and <literal>?</>
4674 are ordinary characters and there is no equivalent
4675 for their functionality.
4676 The delimiters for bounds are
4677 <literal>\{</> and <literal>\}</>,
4678 with <literal>{</> and <literal>}</>
4679 by themselves ordinary characters.
4680 The parentheses for nested subexpressions are
4681 <literal>\(</> and <literal>\)</>,
4682 with <literal>(</> and <literal>)</> by themselves ordinary characters.
4683 <literal>^</> is an ordinary character except at the beginning of the
4684 RE or the beginning of a parenthesized subexpression,
4685 <literal>$</> is an ordinary character except at the end of the
4686 RE or the end of a parenthesized subexpression,
4687 and <literal>*</> is an ordinary character if it appears at the beginning
4688 of the RE or the beginning of a parenthesized subexpression
4689 (after a possible leading <literal>^</>).
4690 Finally, single-digit back references are available, and
4691 <literal>\<</> and <literal>\></>
4693 <literal>[[:<:]]</> and <literal>[[:>:]]</>
4694 respectively; no other escapes are available in BREs.
4698 <!-- end re_syntax.n man page -->
4704 <sect1 id="functions-formatting">
4705 <title>Data Type Formatting Functions</title>
4708 <primary>formatting</primary>
4712 <primary>to_char</primary>
4715 <primary>to_date</primary>
4718 <primary>to_number</primary>
4721 <primary>to_timestamp</primary>
4725 The <productname>PostgreSQL</productname> formatting functions
4726 provide a powerful set of tools for converting various data types
4727 (date/time, integer, floating point, numeric) to formatted strings
4728 and for converting from formatted strings to specific data types.
4729 <xref linkend="functions-formatting-table"> lists them.
4730 These functions all follow a common calling convention: the first
4731 argument is the value to be formatted and the second argument is a
4732 template that defines the output or input format.
4735 A single-argument <function>to_timestamp</function> function is also
4736 available; it accepts a
4737 <type>double precision</type> argument and converts from Unix epoch
4738 (seconds since 1970-01-01 00:00:00+00) to
4739 <type>timestamp with time zone</type>.
4740 (<type>Integer</type> Unix epochs are implicitly cast to
4741 <type>double precision</type>.)
4744 <table id="functions-formatting-table">
4745 <title>Formatting Functions</title>
4749 <entry>Function</entry>
4750 <entry>Return Type</entry>
4751 <entry>Description</entry>
4752 <entry>Example</entry>
4757 <entry><literal><function>to_char</function>(<type>timestamp</type>, <type>text</type>)</literal></entry>
4758 <entry><type>text</type></entry>
4759 <entry>convert time stamp to string</entry>
4760 <entry><literal>to_char(current_timestamp, 'HH12:MI:SS')</literal></entry>
4763 <entry><literal><function>to_char</function>(<type>interval</type>, <type>text</type>)</literal></entry>
4764 <entry><type>text</type></entry>
4765 <entry>convert interval to string</entry>
4766 <entry><literal>to_char(interval '15h 2m 12s', 'HH24:MI:SS')</literal></entry>
4769 <entry><literal><function>to_char</function>(<type>int</type>, <type>text</type>)</literal></entry>
4770 <entry><type>text</type></entry>
4771 <entry>convert integer to string</entry>
4772 <entry><literal>to_char(125, '999')</literal></entry>
4775 <entry><literal><function>to_char</function>(<type>double precision</type>,
4776 <type>text</type>)</literal></entry>
4777 <entry><type>text</type></entry>
4778 <entry>convert real/double precision to string</entry>
4779 <entry><literal>to_char(125.8::real, '999D9')</literal></entry>
4782 <entry><literal><function>to_char</function>(<type>numeric</type>, <type>text</type>)</literal></entry>
4783 <entry><type>text</type></entry>
4784 <entry>convert numeric to string</entry>
4785 <entry><literal>to_char(-125.8, '999D99S')</literal></entry>
4788 <entry><literal><function>to_date</function>(<type>text</type>, <type>text</type>)</literal></entry>
4789 <entry><type>date</type></entry>
4790 <entry>convert string to date</entry>
4791 <entry><literal>to_date('05 Dec 2000', 'DD Mon YYYY')</literal></entry>
4794 <entry><literal><function>to_number</function>(<type>text</type>, <type>text</type>)</literal></entry>
4795 <entry><type>numeric</type></entry>
4796 <entry>convert string to numeric</entry>
4797 <entry><literal>to_number('12,454.8-', '99G999D9S')</literal></entry>
4800 <entry><literal><function>to_timestamp</function>(<type>text</type>, <type>text</type>)</literal></entry>
4801 <entry><type>timestamp with time zone</type></entry>
4802 <entry>convert string to time stamp</entry>
4803 <entry><literal>to_timestamp('05 Dec 2000', 'DD Mon YYYY')</literal></entry>
4806 <entry><literal><function>to_timestamp</function>(<type>double precision</type>)</literal></entry>
4807 <entry><type>timestamp with time zone</type></entry>
4808 <entry>convert UNIX epoch to time stamp</entry>
4809 <entry><literal>to_timestamp(1284352323)</literal></entry>
4816 In a <function>to_char</> output template string, there are certain patterns that are
4817 recognized and replaced with appropriately-formatted data based on the value.
4818 Any text that is not a template pattern is simply
4819 copied verbatim. Similarly, in an input template string (anything but <function>to_char</>), template patterns
4820 identify the values to be supplied by the input data string.
4824 <xref linkend="functions-formatting-datetime-table"> shows the
4825 template patterns available for formatting date and time values.
4828 <table id="functions-formatting-datetime-table">
4829 <title>Template Patterns for Date/Time Formatting</title>
4833 <entry>Pattern</entry>
4834 <entry>Description</entry>
4839 <entry><literal>HH</literal></entry>
4840 <entry>hour of day (01-12)</entry>
4843 <entry><literal>HH12</literal></entry>
4844 <entry>hour of day (01-12)</entry>
4847 <entry><literal>HH24</literal></entry>
4848 <entry>hour of day (00-23)</entry>
4851 <entry><literal>MI</literal></entry>
4852 <entry>minute (00-59)</entry>
4855 <entry><literal>SS</literal></entry>
4856 <entry>second (00-59)</entry>
4859 <entry><literal>MS</literal></entry>
4860 <entry>millisecond (000-999)</entry>
4863 <entry><literal>US</literal></entry>
4864 <entry>microsecond (000000-999999)</entry>
4867 <entry><literal>SSSS</literal></entry>
4868 <entry>seconds past midnight (0-86399)</entry>
4871 <entry><literal>AM</literal>, <literal>am</literal>,
4872 <literal>PM</literal> or <literal>pm</literal></entry>
4873 <entry>meridiem indicator (without periods)</entry>
4876 <entry><literal>A.M.</literal>, <literal>a.m.</literal>,
4877 <literal>P.M.</literal> or <literal>p.m.</literal></entry>
4878 <entry>meridiem indicator (with periods)</entry>
4881 <entry><literal>Y,YYY</literal></entry>
4882 <entry>year (4 and more digits) with comma</entry>
4885 <entry><literal>YYYY</literal></entry>
4886 <entry>year (4 and more digits)</entry>
4889 <entry><literal>YYY</literal></entry>
4890 <entry>last 3 digits of year</entry>
4893 <entry><literal>YY</literal></entry>
4894 <entry>last 2 digits of year</entry>
4897 <entry><literal>Y</literal></entry>
4898 <entry>last digit of year</entry>
4901 <entry><literal>IYYY</literal></entry>
4902 <entry>ISO year (4 and more digits)</entry>
4905 <entry><literal>IYY</literal></entry>
4906 <entry>last 3 digits of ISO year</entry>
4909 <entry><literal>IY</literal></entry>
4910 <entry>last 2 digits of ISO year</entry>
4913 <entry><literal>I</literal></entry>
4914 <entry>last digit of ISO year</entry>
4917 <entry><literal>BC</literal>, <literal>bc</literal>,
4918 <literal>AD</literal> or <literal>ad</literal></entry>
4919 <entry>era indicator (without periods)</entry>
4922 <entry><literal>B.C.</literal>, <literal>b.c.</literal>,
4923 <literal>A.D.</literal> or <literal>a.d.</literal></entry>
4924 <entry>era indicator (with periods)</entry>
4927 <entry><literal>MONTH</literal></entry>
4928 <entry>full uppercase month name (blank-padded to 9 chars)</entry>
4931 <entry><literal>Month</literal></entry>
4932 <entry>full capitalized month name (blank-padded to 9 chars)</entry>
4935 <entry><literal>month</literal></entry>
4936 <entry>full lowercase month name (blank-padded to 9 chars)</entry>
4939 <entry><literal>MON</literal></entry>
4940 <entry>abbreviated uppercase month name (3 chars in English, localized lengths vary)</entry>
4943 <entry><literal>Mon</literal></entry>
4944 <entry>abbreviated capitalized month name (3 chars in English, localized lengths vary)</entry>
4947 <entry><literal>mon</literal></entry>
4948 <entry>abbreviated lowercase month name (3 chars in English, localized lengths vary)</entry>
4951 <entry><literal>MM</literal></entry>
4952 <entry>month number (01-12)</entry>
4955 <entry><literal>DAY</literal></entry>
4956 <entry>full uppercase day name (blank-padded to 9 chars)</entry>
4959 <entry><literal>Day</literal></entry>
4960 <entry>full capitalized day name (blank-padded to 9 chars)</entry>
4963 <entry><literal>day</literal></entry>
4964 <entry>full lowercase day name (blank-padded to 9 chars)</entry>
4967 <entry><literal>DY</literal></entry>
4968 <entry>abbreviated uppercase day name (3 chars in English, localized lengths vary)</entry>
4971 <entry><literal>Dy</literal></entry>
4972 <entry>abbreviated capitalized day name (3 chars in English, localized lengths vary)</entry>
4975 <entry><literal>dy</literal></entry>
4976 <entry>abbreviated lowercase day name (3 chars in English, localized lengths vary)</entry>
4979 <entry><literal>DDD</literal></entry>
4980 <entry>day of year (001-366)</entry>
4983 <entry><literal>IDDD</literal></entry>
4984 <entry>ISO day of year (001-371; day 1 of the year is Monday of the first ISO week.)</entry>
4987 <entry><literal>DD</literal></entry>
4988 <entry>day of month (01-31)</entry>
4991 <entry><literal>D</literal></entry>
4992 <entry>day of the week, Sunday(<literal>1</>) to Saturday(<literal>7</>)</entry>
4995 <entry><literal>ID</literal></entry>
4996 <entry>ISO day of the week, Monday(<literal>1</>) to Sunday(<literal>7</>)</entry>
4999 <entry><literal>W</literal></entry>
5000 <entry>week of month (1-5) (The first week starts on the first day of the month.)</entry>
5003 <entry><literal>WW</literal></entry>
5004 <entry>week number of year (1-53) (The first week starts on the first day of the year.)</entry>
5007 <entry><literal>IW</literal></entry>
5008 <entry>ISO week number of year (01 - 53; the first Thursday of the new year is in week 1.)</entry>
5011 <entry><literal>CC</literal></entry>
5012 <entry>century (2 digits) (The twenty-first century starts on 2001-01-01.)</entry>
5015 <entry><literal>J</literal></entry>
5016 <entry>Julian Day (days since November 24, 4714 BC at midnight)</entry>
5019 <entry><literal>Q</literal></entry>
5020 <entry>quarter</entry>
5023 <entry><literal>RM</literal></entry>
5024 <entry>uppercase month in Roman numerals (I-XII; I=January)</entry>
5027 <entry><literal>rm</literal></entry>
5028 <entry>lowercase month in Roman numerals (i-xii; i=January)</entry>
5031 <entry><literal>TZ</literal></entry>
5032 <entry>uppercase time-zone name</entry>
5035 <entry><literal>tz</literal></entry>
5036 <entry>lowercase time-zone name</entry>
5043 Modifiers can be applied to any template pattern to alter its
5044 behavior. For example, <literal>FMMonth</literal>
5045 is the <literal>Month</literal> pattern with the
5046 <literal>FM</literal> modifier.
5047 <xref linkend="functions-formatting-datetimemod-table"> shows the
5048 modifier patterns for date/time formatting.
5051 <table id="functions-formatting-datetimemod-table">
5052 <title>Template Pattern Modifiers for Date/Time Formatting</title>
5056 <entry>Modifier</entry>
5057 <entry>Description</entry>
5058 <entry>Example</entry>
5063 <entry><literal>FM</literal> prefix</entry>
5064 <entry>fill mode (suppress padding of blanks and zeroes)</entry>
5065 <entry><literal>FMMonth</literal></entry>
5068 <entry><literal>TH</literal> suffix</entry>
5069 <entry>uppercase ordinal number suffix</entry>
5070 <entry><literal>DDTH</literal>, e.g., <literal>12TH</></entry>
5073 <entry><literal>th</literal> suffix</entry>
5074 <entry>lowercase ordinal number suffix</entry>
5075 <entry><literal>DDth</literal>, e.g., <literal>12th</></entry>
5078 <entry><literal>FX</literal> prefix</entry>
5079 <entry>fixed format global option (see usage notes)</entry>
5080 <entry><literal>FX Month DD Day</literal></entry>
5083 <entry><literal>TM</literal> prefix</entry>
5084 <entry>translation mode (print localized day and month names based on
5085 <xref linkend="guc-lc-time">)</entry>
5086 <entry><literal>TMMonth</literal></entry>
5089 <entry><literal>SP</literal> suffix</entry>
5090 <entry>spell mode (not supported)</entry>
5091 <entry><literal>DDSP</literal></entry>
5098 Usage notes for date/time formatting:
5103 <literal>FM</literal> suppresses leading zeroes and trailing blanks
5104 that would otherwise be added to make the output of a pattern be
5111 <literal>TM</literal> does not include trailing blanks.
5117 <function>to_timestamp</function> and <function>to_date</function>
5118 skip multiple blank spaces in the input string unless the <literal>FX</literal> option
5119 is used. For example,
5120 <literal>to_timestamp('2000 JUN', 'YYYY MON')</literal> works, but
5121 <literal>to_timestamp('2000 JUN', 'FXYYYY MON')</literal> returns an error
5122 because <function>to_timestamp</function> expects one space only.
5123 <literal>FX</literal> must be specified as the first item in
5130 Ordinary text is allowed in <function>to_char</function>
5131 templates and will be output literally. You can put a substring
5132 in double quotes to force it to be interpreted as literal text
5133 even if it contains pattern key words. For example, in
5134 <literal>'"Hello Year "YYYY'</literal>, the <literal>YYYY</literal>
5135 will be replaced by the year data, but the single <literal>Y</literal> in <literal>Year</literal>
5142 If you want to have a double quote in the output you must
5143 precede it with a backslash, for example <literal>E'\\"YYYY
5144 Month\\"'</literal>. <!-- "" font-lock sanity :-) -->
5145 (Two backslashes are necessary because the backslash
5146 has special meaning when using the escape string syntax.)
5152 The <literal>YYYY</literal> conversion from string to <type>timestamp</type> or
5153 <type>date</type> has a restriction when processing years with more than 4 digits. You must
5154 use some non-digit character or template after <literal>YYYY</literal>,
5155 otherwise the year is always interpreted as 4 digits. For example
5156 (with the year 20000):
5157 <literal>to_date('200001131', 'YYYYMMDD')</literal> will be
5158 interpreted as a 4-digit year; instead use a non-digit
5159 separator after the year, like
5160 <literal>to_date('20000-1131', 'YYYY-MMDD')</literal> or
5161 <literal>to_date('20000Nov31', 'YYYYMonDD')</literal>.
5167 In conversions from string to <type>timestamp</type> or
5168 <type>date</type>, the <literal>CC</literal> field (century) is ignored if there
5169 is a <literal>YYY</literal>, <literal>YYYY</literal> or
5170 <literal>Y,YYY</literal> field. If <literal>CC</literal> is used with
5171 <literal>YY</literal> or <literal>Y</literal> then the year is computed
5172 as <literal>(CC-1)*100+YY</literal>.
5178 An ISO week date (as distinct from a Gregorian date) can be
5179 specified to <function>to_timestamp</function> and
5180 <function>to_date</function> in one of two ways:
5184 Year, week, and weekday: for example <literal>to_date('2006-42-4',
5185 'IYYY-IW-ID')</literal> returns the date
5186 <literal>2006-10-19</literal>. If you omit the weekday it
5187 is assumed to be 1 (Monday).
5192 Year and day of year: for example <literal>to_date('2006-291',
5193 'IYYY-IDDD')</literal> also returns <literal>2006-10-19</literal>.
5199 Attempting to construct a date using a mixture of ISO week and
5200 Gregorian date fields is nonsensical, and will cause an error. In the
5201 context of an ISO year, the concept of a <quote>month</> or <quote>day
5202 of month</> has no meaning. In the context of a Gregorian year, the
5203 ISO week has no meaning. Users should avoid mixing Gregorian and
5204 ISO date specifications.
5210 In a conversion from string to <type>timestamp</type>, millisecond
5211 (<literal>MS</literal>) and microsecond (<literal>US</literal>)
5212 values are used as the
5213 seconds digits after the decimal point. For example
5214 <literal>to_timestamp('12:3', 'SS:MS')</literal> is not 3 milliseconds,
5215 but 300, because the conversion counts it as 12 + 0.3 seconds.
5216 This means for the format <literal>SS:MS</literal>, the input values
5217 <literal>12:3</literal>, <literal>12:30</literal>, and <literal>12:300</literal> specify the
5218 same number of milliseconds. To get three milliseconds, one must use
5219 <literal>12:003</literal>, which the conversion counts as
5220 12 + 0.003 = 12.003 seconds.
5226 <literal>to_timestamp('15:12:02.020.001230', 'HH:MI:SS.MS.US')</literal>
5227 is 15 hours, 12 minutes, and 2 seconds + 20 milliseconds +
5228 1230 microseconds = 2.021230 seconds.
5234 <function>to_char(..., 'ID')</function>'s day of the week numbering
5235 matches the <function>extract('isodow', ...)</function> function, but
5236 <function>to_char(..., 'D')</function>'s does not match
5237 <function>extract('dow', ...)</function>'s day numbering.
5242 <para><function>to_char(interval)</function> formats <literal>HH</> and
5243 <literal>HH12</> as hours in a single day, while <literal>HH24</>
5244 can output hours exceeding a single day, e.g., >24.
5252 <xref linkend="functions-formatting-numeric-table"> shows the
5253 template patterns available for formatting numeric values.
5256 <table id="functions-formatting-numeric-table">
5257 <title>Template Patterns for Numeric Formatting</title>
5261 <entry>Pattern</entry>
5262 <entry>Description</entry>
5267 <entry><literal>9</literal></entry>
5268 <entry>value with the specified number of digits</entry>
5271 <entry><literal>0</literal></entry>
5272 <entry>value with leading zeros</entry>
5275 <entry><literal>.</literal> (period)</entry>
5276 <entry>decimal point</entry>
5279 <entry><literal>,</literal> (comma)</entry>
5280 <entry>group (thousand) separator</entry>
5283 <entry><literal>PR</literal></entry>
5284 <entry>negative value in angle brackets</entry>
5287 <entry><literal>S</literal></entry>
5288 <entry>sign anchored to number (uses locale)</entry>
5291 <entry><literal>L</literal></entry>
5292 <entry>currency symbol (uses locale)</entry>
5295 <entry><literal>D</literal></entry>
5296 <entry>decimal point (uses locale)</entry>
5299 <entry><literal>G</literal></entry>
5300 <entry>group separator (uses locale)</entry>
5303 <entry><literal>MI</literal></entry>
5304 <entry>minus sign in specified position (if number < 0)</entry>
5307 <entry><literal>PL</literal></entry>
5308 <entry>plus sign in specified position (if number > 0)</entry>
5311 <entry><literal>SG</literal></entry>
5312 <entry>plus/minus sign in specified position</entry>
5315 <entry><literal>RN</literal></entry>
5316 <entry>Roman numeral (input between 1 and 3999)</entry>
5319 <entry><literal>TH</literal> or <literal>th</literal></entry>
5320 <entry>ordinal number suffix</entry>
5323 <entry><literal>V</literal></entry>
5324 <entry>shift specified number of digits (see notes)</entry>
5327 <entry><literal>EEEE</literal></entry>
5328 <entry>scientific notation (not implemented)</entry>
5335 Usage notes for numeric formatting:
5340 A sign formatted using <literal>SG</literal>, <literal>PL</literal>, or
5341 <literal>MI</literal> is not anchored to
5342 the number; for example,
5343 <literal>to_char(-12, 'MI9999')</literal> produces <literal>'- 12'</literal>
5344 but <literal>to_char(-12, 'S9999')</literal> produces <literal>' -12'</literal>.
5345 The Oracle implementation does not allow the use of
5346 <literal>MI</literal> before <literal>9</literal>, but rather
5347 requires that <literal>9</literal> precede
5348 <literal>MI</literal>.
5354 <literal>9</literal> results in a value with the same number of
5355 digits as there are <literal>9</literal>s. If a digit is
5356 not available it outputs a space.
5362 <literal>TH</literal> does not convert values less than zero
5363 and does not convert fractional numbers.
5369 <literal>PL</literal>, <literal>SG</literal>, and
5370 <literal>TH</literal> are <productname>PostgreSQL</productname>
5377 <literal>V</literal> effectively
5378 multiplies the input values by
5379 <literal>10^<replaceable>n</replaceable></literal>, where
5380 <replaceable>n</replaceable> is the number of digits following
5381 <literal>V</literal>.
5382 <function>to_char</function> does not support the use of
5383 <literal>V</literal> with non-integer values.
5384 (e.g., <literal>99.9V99</literal> is not allowed.)
5391 Certain modifiers can be applied to any template pattern to alter its
5392 behavior. For example, <literal>FM9999</literal>
5393 is the <literal>9999</literal> pattern with the
5394 <literal>FM</literal> modifier.
5395 <xref linkend="functions-formatting-numericmod-table"> shows the
5396 modifier patterns for numeric formatting.
5399 <table id="functions-formatting-numericmod-table">
5400 <title>Template Pattern Modifiers for Numeric Formatting</title>
5404 <entry>Modifier</entry>
5405 <entry>Description</entry>
5406 <entry>Example</entry>
5411 <entry><literal>FM</literal> prefix</entry>
5412 <entry>fill mode (suppress padding blanks and zeroes)</entry>
5413 <entry><literal>FM9999</literal></entry>
5416 <entry><literal>TH</literal> suffix</entry>
5417 <entry>uppercase ordinal number suffix</entry>
5418 <entry><literal>999TH</literal></entry>
5421 <entry><literal>th</literal> suffix</entry>
5422 <entry>lowercase ordinal number suffix</entry>
5423 <entry><literal>999th</literal></entry>
5430 <xref linkend="functions-formatting-examples-table"> shows some
5431 examples of the use of the <function>to_char</function> function.
5434 <table id="functions-formatting-examples-table">
5435 <title><function>to_char</function> Examples</title>
5439 <entry>Expression</entry>
5440 <entry>Result</entry>
5445 <entry><literal>to_char(current_timestamp, 'Day, DD HH12:MI:SS')</literal></entry>
5446 <entry><literal>'Tuesday , 06 05:39:18'</literal></entry>
5449 <entry><literal>to_char(current_timestamp, 'FMDay, FMDD HH12:MI:SS')</literal></entry>
5450 <entry><literal>'Tuesday, 6 05:39:18'</literal></entry>
5453 <entry><literal>to_char(-0.1, '99.99')</literal></entry>
5454 <entry><literal>' -.10'</literal></entry>
5457 <entry><literal>to_char(-0.1, 'FM9.99')</literal></entry>
5458 <entry><literal>'-.1'</literal></entry>
5461 <entry><literal>to_char(0.1, '0.9')</literal></entry>
5462 <entry><literal>' 0.1'</literal></entry>
5465 <entry><literal>to_char(12, '9990999.9')</literal></entry>
5466 <entry><literal>' 0012.0'</literal></entry>
5469 <entry><literal>to_char(12, 'FM9990999.9')</literal></entry>
5470 <entry><literal>'0012.'</literal></entry>
5473 <entry><literal>to_char(485, '999')</literal></entry>
5474 <entry><literal>' 485'</literal></entry>
5477 <entry><literal>to_char(-485, '999')</literal></entry>
5478 <entry><literal>'-485'</literal></entry>
5481 <entry><literal>to_char(485, '9 9 9')</literal></entry>
5482 <entry><literal>' 4 8 5'</literal></entry>
5485 <entry><literal>to_char(1485, '9,999')</literal></entry>
5486 <entry><literal>' 1,485'</literal></entry>
5489 <entry><literal>to_char(1485, '9G999')</literal></entry>
5490 <entry><literal>' 1 485'</literal></entry>
5493 <entry><literal>to_char(148.5, '999.999')</literal></entry>
5494 <entry><literal>' 148.500'</literal></entry>
5497 <entry><literal>to_char(148.5, 'FM999.999')</literal></entry>
5498 <entry><literal>'148.5'</literal></entry>
5501 <entry><literal>to_char(148.5, 'FM999.990')</literal></entry>
5502 <entry><literal>'148.500'</literal></entry>
5505 <entry><literal>to_char(148.5, '999D999')</literal></entry>
5506 <entry><literal>' 148,500'</literal></entry>
5509 <entry><literal>to_char(3148.5, '9G999D999')</literal></entry>
5510 <entry><literal>' 3 148,500'</literal></entry>
5513 <entry><literal>to_char(-485, '999S')</literal></entry>
5514 <entry><literal>'485-'</literal></entry>
5517 <entry><literal>to_char(-485, '999MI')</literal></entry>
5518 <entry><literal>'485-'</literal></entry>
5521 <entry><literal>to_char(485, '999MI')</literal></entry>
5522 <entry><literal>'485 '</literal></entry>
5525 <entry><literal>to_char(485, 'FM999MI')</literal></entry>
5526 <entry><literal>'485'</literal></entry>
5529 <entry><literal>to_char(485, 'PL999')</literal></entry>
5530 <entry><literal>'+485'</literal></entry>
5533 <entry><literal>to_char(485, 'SG999')</literal></entry>
5534 <entry><literal>'+485'</literal></entry>
5537 <entry><literal>to_char(-485, 'SG999')</literal></entry>
5538 <entry><literal>'-485'</literal></entry>
5541 <entry><literal>to_char(-485, '9SG99')</literal></entry>
5542 <entry><literal>'4-85'</literal></entry>
5545 <entry><literal>to_char(-485, '999PR')</literal></entry>
5546 <entry><literal>'<485>'</literal></entry>
5549 <entry><literal>to_char(485, 'L999')</literal></entry>
5550 <entry><literal>'DM 485</literal></entry>
5553 <entry><literal>to_char(485, 'RN')</literal></entry>
5554 <entry><literal>' CDLXXXV'</literal></entry>
5557 <entry><literal>to_char(485, 'FMRN')</literal></entry>
5558 <entry><literal>'CDLXXXV'</literal></entry>
5561 <entry><literal>to_char(5.2, 'FMRN')</literal></entry>
5562 <entry><literal>'V'</literal></entry>
5565 <entry><literal>to_char(482, '999th')</literal></entry>
5566 <entry><literal>' 482nd'</literal></entry>
5569 <entry><literal>to_char(485, '"Good number:"999')</literal></entry>
5570 <entry><literal>'Good number: 485'</literal></entry>
5573 <entry><literal>to_char(485.8, '"Pre:"999" Post:" .999')</literal></entry>
5574 <entry><literal>'Pre: 485 Post: .800'</literal></entry>
5577 <entry><literal>to_char(12, '99V999')</literal></entry>
5578 <entry><literal>' 12000'</literal></entry>
5581 <entry><literal>to_char(12.4, '99V999')</literal></entry>
5582 <entry><literal>' 12400'</literal></entry>
5585 <entry><literal>to_char(12.45, '99V9')</literal></entry>
5586 <entry><literal>' 125'</literal></entry>
5595 <sect1 id="functions-datetime">
5596 <title>Date/Time Functions and Operators</title>
5599 <xref linkend="functions-datetime-table"> shows the available
5600 functions for date/time value processing, with details appearing in
5601 the following subsections. <xref
5602 linkend="operators-datetime-table"> illustrates the behaviors of
5603 the basic arithmetic operators (<literal>+</literal>,
5604 <literal>*</literal>, etc.). For formatting functions, refer to
5605 <xref linkend="functions-formatting">. You should be familiar with
5606 the background information on date/time data types from <xref
5607 linkend="datatype-datetime">.
5611 All the functions and operators described below that take <type>time</type> or <type>timestamp</type>
5612 inputs actually come in two variants: one that takes <type>time with time zone</type> or <type>timestamp
5613 with time zone</type>, and one that takes <type>time without time zone</type> or <type>timestamp without time zone</type>.
5614 For brevity, these variants are not shown separately. Also, the
5615 <literal>+</> and <literal>*</> operators come in commutative pairs (for
5616 example both date + integer and integer + date); we show only one of each
5620 <table id="operators-datetime-table">
5621 <title>Date/Time Operators</title>
5626 <entry>Operator</entry>
5627 <entry>Example</entry>
5628 <entry>Result</entry>
5634 <entry> <literal>+</literal> </entry>
5635 <entry><literal>date '2001-09-28' + integer '7'</literal></entry>
5636 <entry><literal>date '2001-10-05'</literal></entry>
5640 <entry> <literal>+</literal> </entry>
5641 <entry><literal>date '2001-09-28' + interval '1 hour'</literal></entry>
5642 <entry><literal>timestamp '2001-09-28 01:00:00'</literal></entry>
5646 <entry> <literal>+</literal> </entry>
5647 <entry><literal>date '2001-09-28' + time '03:00'</literal></entry>
5648 <entry><literal>timestamp '2001-09-28 03:00:00'</literal></entry>
5652 <entry> <literal>+</literal> </entry>
5653 <entry><literal>interval '1 day' + interval '1 hour'</literal></entry>
5654 <entry><literal>interval '1 day 01:00:00'</literal></entry>
5658 <entry> <literal>+</literal> </entry>
5659 <entry><literal>timestamp '2001-09-28 01:00' + interval '23 hours'</literal></entry>
5660 <entry><literal>timestamp '2001-09-29 00:00:00'</literal></entry>
5664 <entry> <literal>+</literal> </entry>
5665 <entry><literal>time '01:00' + interval '3 hours'</literal></entry>
5666 <entry><literal>time '04:00:00'</literal></entry>
5670 <entry> <literal>-</literal> </entry>
5671 <entry><literal>- interval '23 hours'</literal></entry>
5672 <entry><literal>interval '-23:00:00'</literal></entry>
5676 <entry> <literal>-</literal> </entry>
5677 <entry><literal>date '2001-10-01' - date '2001-09-28'</literal></entry>
5678 <entry><literal>integer '3'</literal> (days)</entry>
5682 <entry> <literal>-</literal> </entry>
5683 <entry><literal>date '2001-10-01' - integer '7'</literal></entry>
5684 <entry><literal>date '2001-09-24'</literal></entry>
5688 <entry> <literal>-</literal> </entry>
5689 <entry><literal>date '2001-09-28' - interval '1 hour'</literal></entry>
5690 <entry><literal>timestamp '2001-09-27 23:00:00'</literal></entry>
5694 <entry> <literal>-</literal> </entry>
5695 <entry><literal>time '05:00' - time '03:00'</literal></entry>
5696 <entry><literal>interval '02:00:00'</literal></entry>
5700 <entry> <literal>-</literal> </entry>
5701 <entry><literal>time '05:00' - interval '2 hours'</literal></entry>
5702 <entry><literal>time '03:00:00'</literal></entry>
5706 <entry> <literal>-</literal> </entry>
5707 <entry><literal>timestamp '2001-09-28 23:00' - interval '23 hours'</literal></entry>
5708 <entry><literal>timestamp '2001-09-28 00:00:00'</literal></entry>
5712 <entry> <literal>-</literal> </entry>
5713 <entry><literal>interval '1 day' - interval '1 hour'</literal></entry>
5714 <entry><literal>interval '1 day -01:00:00'</literal></entry>
5718 <entry> <literal>-</literal> </entry>
5719 <entry><literal>timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00'</literal></entry>
5720 <entry><literal>interval '1 day 15:00:00'</literal></entry>
5724 <entry> <literal>*</literal> </entry>
5725 <entry><literal>900 * interval '1 second'</literal></entry>
5726 <entry><literal>interval '00:15:00'</literal></entry>
5730 <entry> <literal>*</literal> </entry>
5731 <entry><literal>21 * interval '1 day'</literal></entry>
5732 <entry><literal>interval '21 days'</literal></entry>
5736 <entry> <literal>*</literal> </entry>
5737 <entry><literal>double precision '3.5' * interval '1 hour'</literal></entry>
5738 <entry><literal>interval '03:30:00'</literal></entry>
5742 <entry> <literal>/</literal> </entry>
5743 <entry><literal>interval '1 hour' / double precision '1.5'</literal></entry>
5744 <entry><literal>interval '00:40:00'</literal></entry>
5751 <primary>age</primary>
5754 <primary>clock_timestamp</primary>
5757 <primary>current_date</primary>
5760 <primary>current_time</primary>
5763 <primary>current_timestamp</primary>
5766 <primary>date_part</primary>
5769 <primary>date_trunc</primary>
5772 <primary>extract</primary>
5775 <primary>isfinite</primary>
5778 <primary>justify_days</primary>
5781 <primary>justify_hours</primary>
5784 <primary>justify_interval</primary>
5787 <primary>localtime</primary>
5790 <primary>localtimestamp</primary>
5793 <primary>now</primary>
5796 <primary>statement_timestamp</primary>
5799 <primary>timeofday</primary>
5802 <primary>transaction_timestamp</primary>
5805 <table id="functions-datetime-table">
5806 <title>Date/Time Functions</title>
5810 <entry>Function</entry>
5811 <entry>Return Type</entry>
5812 <entry>Description</entry>
5813 <entry>Example</entry>
5814 <entry>Result</entry>
5820 <entry><literal><function>age</function>(<type>timestamp</type>, <type>timestamp</type>)</literal></entry>
5821 <entry><type>interval</type></entry>
5822 <entry>Subtract arguments, producing a <quote>symbolic</> result that
5823 uses years and months</entry>
5824 <entry><literal>age(timestamp '2001-04-10', timestamp '1957-06-13')</literal></entry>
5825 <entry><literal>43 years 9 mons 27 days</literal></entry>
5829 <entry><literal><function>age</function>(<type>timestamp</type>)</literal></entry>
5830 <entry><type>interval</type></entry>
5831 <entry>Subtract from <function>current_date</function> (at midnight)</entry>
5832 <entry><literal>age(timestamp '1957-06-13')</literal></entry>
5833 <entry><literal>43 years 8 mons 3 days</literal></entry>
5837 <entry><literal><function>clock_timestamp</function>()</literal></entry>
5838 <entry><type>timestamp with time zone</type></entry>
5839 <entry>Current date and time (changes during statement execution);
5840 see <xref linkend="functions-datetime-current">
5847 <entry><literal><function>current_date</function></literal></entry>
5848 <entry><type>date</type></entry>
5849 <entry>Current date;
5850 see <xref linkend="functions-datetime-current">
5857 <entry><literal><function>current_time</function></literal></entry>
5858 <entry><type>time with time zone</type></entry>
5859 <entry>Current time of day;
5860 see <xref linkend="functions-datetime-current">
5867 <entry><literal><function>current_timestamp</function></literal></entry>
5868 <entry><type>timestamp with time zone</type></entry>
5869 <entry>Current date and time (start of current transaction);
5870 see <xref linkend="functions-datetime-current">
5877 <entry><literal><function>date_part</function>(<type>text</type>, <type>timestamp</type>)</literal></entry>
5878 <entry><type>double precision</type></entry>
5879 <entry>Get subfield (equivalent to <function>extract</function>);
5880 see <xref linkend="functions-datetime-extract">
5882 <entry><literal>date_part('hour', timestamp '2001-02-16 20:38:40')</literal></entry>
5883 <entry><literal>20</literal></entry>
5887 <entry><literal><function>date_part</function>(<type>text</type>, <type>interval</type>)</literal></entry>
5888 <entry><type>double precision</type></entry>
5889 <entry>Get subfield (equivalent to
5890 <function>extract</function>); see <xref linkend="functions-datetime-extract">
5892 <entry><literal>date_part('month', interval '2 years 3 months')</literal></entry>
5893 <entry><literal>3</literal></entry>
5897 <entry><literal><function>date_trunc</function>(<type>text</type>, <type>timestamp</type>)</literal></entry>
5898 <entry><type>timestamp</type></entry>
5899 <entry>Truncate to specified precision; see also <xref linkend="functions-datetime-trunc">
5901 <entry><literal>date_trunc('hour', timestamp '2001-02-16 20:38:40')</literal></entry>
5902 <entry><literal>2001-02-16 20:00:00</literal></entry>
5906 <entry><literal><function>extract</function>(<parameter>field</parameter> from
5907 <type>timestamp</type>)</literal></entry>
5908 <entry><type>double precision</type></entry>
5909 <entry>Get subfield; see <xref linkend="functions-datetime-extract">
5911 <entry><literal>extract(hour from timestamp '2001-02-16 20:38:40')</literal></entry>
5912 <entry><literal>20</literal></entry>
5916 <entry><literal><function>extract</function>(<parameter>field</parameter> from
5917 <type>interval</type>)</literal></entry>
5918 <entry><type>double precision</type></entry>
5919 <entry>Get subfield; see <xref linkend="functions-datetime-extract">
5921 <entry><literal>extract(month from interval '2 years 3 months')</literal></entry>
5922 <entry><literal>3</literal></entry>
5926 <entry><literal><function>isfinite</function>(<type>date</type>)</literal></entry>
5927 <entry><type>boolean</type></entry>
5928 <entry>Test for finite date (not +/-infinity)</entry>
5929 <entry><literal>isfinite(date '2001-02-16')</literal></entry>
5930 <entry><literal>true</literal></entry>
5934 <entry><literal><function>isfinite</function>(<type>timestamp</type>)</literal></entry>
5935 <entry><type>boolean</type></entry>
5936 <entry>Test for finite time stamp (not +/-infinity)</entry>
5937 <entry><literal>isfinite(timestamp '2001-02-16 21:28:30')</literal></entry>
5938 <entry><literal>true</literal></entry>
5942 <entry><literal><function>isfinite</function>(<type>interval</type>)</literal></entry>
5943 <entry><type>boolean</type></entry>
5944 <entry>Test for finite interval</entry>
5945 <entry><literal>isfinite(interval '4 hours')</literal></entry>
5946 <entry><literal>true</literal></entry>
5950 <entry><literal><function>justify_days</function>(<type>interval</type>)</literal></entry>
5951 <entry><type>interval</type></entry>
5952 <entry>Adjust interval so 30-day time periods are represented as months</entry>
5953 <entry><literal>justify_days(interval '35 days')</literal></entry>
5954 <entry><literal>1 mon 5 days</literal></entry>
5958 <entry><literal><function>justify_hours</function>(<type>interval</type>)</literal></entry>
5959 <entry><type>interval</type></entry>
5960 <entry>Adjust interval so 24-hour time periods are represented as days</entry>
5961 <entry><literal>justify_hours(interval '27 hours')</literal></entry>
5962 <entry><literal>1 day 03:00:00</literal></entry>
5966 <entry><literal><function>justify_interval</function>(<type>interval</type>)</literal></entry>
5967 <entry><type>interval</type></entry>
5968 <entry>Adjust interval using <function>justify_days</> and <function>justify_hours</>, with additional sign adjustments</entry>
5969 <entry><literal>justify_interval(interval '1 mon -1 hour')</literal></entry>
5970 <entry><literal>29 days 23:00:00</literal></entry>
5974 <entry><literal><function>localtime</function></literal></entry>
5975 <entry><type>time</type></entry>
5976 <entry>Current time of day;
5977 see <xref linkend="functions-datetime-current">
5984 <entry><literal><function>localtimestamp</function></literal></entry>
5985 <entry><type>timestamp</type></entry>
5986 <entry>Current date and time (start of current transaction);
5987 see <xref linkend="functions-datetime-current">
5994 <entry><literal><function>now</function>()</literal></entry>
5995 <entry><type>timestamp with time zone</type></entry>
5996 <entry>Current date and time (start of current transaction);
5997 see <xref linkend="functions-datetime-current">
6004 <entry><literal><function>statement_timestamp</function>()</literal></entry>
6005 <entry><type>timestamp with time zone</type></entry>
6006 <entry>Current date and time (start of current statement);
6007 see <xref linkend="functions-datetime-current">
6014 <entry><literal><function>timeofday</function>()</literal></entry>
6015 <entry><type>text</type></entry>
6016 <entry>Current date and time
6017 (like <function>clock_timestamp</>, but as a <type>text</> string);
6018 see <xref linkend="functions-datetime-current">
6025 <entry><literal><function>transaction_timestamp</function>()</literal></entry>
6026 <entry><type>timestamp with time zone</type></entry>
6027 <entry>Current date and time (start of current transaction);
6028 see <xref linkend="functions-datetime-current">
6038 In addition to these functions, the SQL <literal>OVERLAPS</> operator is
6041 (<replaceable>start1</replaceable>, <replaceable>end1</replaceable>) OVERLAPS (<replaceable>start2</replaceable>, <replaceable>end2</replaceable>)
6042 (<replaceable>start1</replaceable>, <replaceable>length1</replaceable>) OVERLAPS (<replaceable>start2</replaceable>, <replaceable>length2</replaceable>)
6044 This expression yields true when two time periods (defined by their
6045 endpoints) overlap, false when they do not overlap. The endpoints
6046 can be specified as pairs of dates, times, or time stamps; or as
6047 a date, time, or time stamp followed by an interval.
6051 SELECT (DATE '2001-02-16', DATE '2001-12-21') OVERLAPS
6052 (DATE '2001-10-30', DATE '2002-10-30');
6053 <lineannotation>Result: </lineannotation><computeroutput>true</computeroutput>
6054 SELECT (DATE '2001-02-16', INTERVAL '100 days') OVERLAPS
6055 (DATE '2001-10-30', DATE '2002-10-30');
6056 <lineannotation>Result: </lineannotation><computeroutput>false</computeroutput>
6060 When adding an <type>interval</type> value to (or subtracting an
6061 <type>interval</type> value from) a <type>timestamp with time zone</type>
6062 value, the days component advances (or decrements) the date of the
6063 <type>timestamp with time zone</type> by the indicated number of days.
6064 Across daylight saving time changes (with the session time zone set to a
6065 time zone that recognizes DST), this means <literal>interval '1 day'</literal>
6066 does not necessarily equal <literal>interval '24 hours'</literal>.
6067 For example, with the session time zone set to <literal>CST7CDT</literal>,
6068 <literal>timestamp with time zone '2005-04-02 12:00-07' + interval '1 day' </literal>
6069 will produce <literal>timestamp with time zone '2005-04-03 12:00-06'</literal>,
6070 while adding <literal>interval '24 hours'</literal> to the same initial
6071 <type>timestamp with time zone</type> produces
6072 <literal>timestamp with time zone '2005-04-03 13:00-06'</literal>, as there is
6073 a change in daylight saving time at <literal>2005-04-03 02:00</literal> in time zone
6074 <literal>CST7CDT</literal>.
6078 Note there can be ambiguity in the <literal>months</> returned by
6079 <function>age</> because different months have a different number of
6080 days. <productname>PostgreSQL</>'s approach uses the month from the
6081 earlier of the two dates when calculating partial months. For example,
6082 <literal>age('2004-06-01', '2004-04-30')</> uses April to yield
6083 <literal>1 mon 1 day</>, while using May would yield <literal>1 mon 2
6084 days</> because May has 31 days, while April has only 30.
6087 <sect2 id="functions-datetime-extract">
6088 <title><function>EXTRACT</function>, <function>date_part</function></title>
6091 <primary>date_part</primary>
6094 <primary>extract</primary>
6098 EXTRACT(<replaceable>field</replaceable> FROM <replaceable>source</replaceable>)
6102 The <function>extract</function> function retrieves subfields
6103 such as year or hour from date/time values.
6104 <replaceable>source</replaceable> must be a value expression of
6105 type <type>timestamp</type>, <type>time</type>, or <type>interval</type>.
6106 (Expressions of type <type>date</type> are
6107 cast to <type>timestamp</type> and can therefore be used as
6108 well.) <replaceable>field</replaceable> is an identifier or
6109 string that selects what field to extract from the source value.
6110 The <function>extract</function> function returns values of type
6111 <type>double precision</type>.
6112 The following are valid field names:
6114 <!-- alphabetical -->
6117 <term><literal>century</literal></term>
6124 SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
6125 <lineannotation>Result: </lineannotation><computeroutput>20</computeroutput>
6126 SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40');
6127 <lineannotation>Result: </lineannotation><computeroutput>21</computeroutput>
6131 The first century starts at 0001-01-01 00:00:00 AD, although
6132 they did not know it at the time. This definition applies to all
6133 Gregorian calendar countries. There is no century number 0,
6134 you go from -1 century to 1 century.
6136 If you disagree with this, please write your complaint to:
6137 Pope, Cathedral Saint-Peter of Roma, Vatican.
6141 <productname>PostgreSQL</productname> releases before 8.0 did not
6142 follow the conventional numbering of centuries, but just returned
6143 the year field divided by 100.
6149 <term><literal>day</literal></term>
6152 The day (of the month) field (1 - 31)
6156 SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
6157 <lineannotation>Result: </lineannotation><computeroutput>16</computeroutput>
6163 <term><literal>decade</literal></term>
6166 The year field divided by 10
6170 SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40');
6171 <lineannotation>Result: </lineannotation><computeroutput>200</computeroutput>
6177 <term><literal>dow</literal></term>
6180 The day of the week as Sunday(<literal>0</>) to
6181 Saturday(<literal>6</>)
6185 SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');
6186 <lineannotation>Result: </lineannotation><computeroutput>5</computeroutput>
6189 Note that <function>extract</function>'s day of the week numbering
6190 differs from that of the <function>to_char(...,
6191 'D')</function> function.
6198 <term><literal>doy</literal></term>
6201 The day of the year (1 - 365/366)
6205 SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40');
6206 <lineannotation>Result: </lineannotation><computeroutput>47</computeroutput>
6212 <term><literal>epoch</literal></term>
6215 For <type>date</type> and <type>timestamp</type> values, the
6216 number of seconds since 1970-01-01 00:00:00-00 GMT (can be negative);
6217 for <type>interval</type> values, the total number
6218 of seconds in the interval
6222 SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-08');
6223 <lineannotation>Result: </lineannotation><computeroutput>982384720</computeroutput>
6225 SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
6226 <lineannotation>Result: </lineannotation><computeroutput>442800</computeroutput>
6230 Here is how you can convert an epoch value back to a time
6235 SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720 * INTERVAL '1 second';
6241 <term><literal>hour</literal></term>
6244 The hour field (0 - 23)
6248 SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
6249 <lineannotation>Result: </lineannotation><computeroutput>20</computeroutput>
6255 <term><literal>isodow</literal></term>
6258 The day of the week as Monday(<literal>1</>) to
6259 Sunday(<literal>7</>)
6263 SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40');
6264 <lineannotation>Result: </lineannotation><computeroutput>7</computeroutput>
6267 This is identical to <literal>dow</> except for Sunday. This
6268 matches the <acronym>ISO</> 8601 day of the week numbering.
6275 <term><literal>isoyear</literal></term>
6278 The <acronym>ISO</acronym> 8601 year that the date falls in (not applicable to intervals)
6282 SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01');
6283 <lineannotation>Result: </lineannotation><computeroutput>2005</computeroutput>
6284 SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02');
6285 <lineannotation>Result: </lineannotation><computeroutput>2006</computeroutput>
6289 Each <acronym>ISO</acronym> year begins with the Monday of the week containing the 4th of January, so in early January or late December the <acronym>ISO</acronym> year may be different from the Gregorian year. See the <literal>week</literal> field for more information.
6292 This field is not available in PostgreSQL releases prior to 8.3.
6298 <term><literal>microseconds</literal></term>
6301 The seconds field, including fractional parts, multiplied by 1
6302 000 000; note that this includes full seconds
6306 SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5');
6307 <lineannotation>Result: </lineannotation><computeroutput>28500000</computeroutput>
6313 <term><literal>millennium</literal></term>
6320 SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40');
6321 <lineannotation>Result: </lineannotation><computeroutput>3</computeroutput>
6325 Years in the 1900s are in the second millennium.
6326 The third millennium started January 1, 2001.
6330 <productname>PostgreSQL</productname> releases before 8.0 did not
6331 follow the conventional numbering of millennia, but just returned
6332 the year field divided by 1000.
6338 <term><literal>milliseconds</literal></term>
6341 The seconds field, including fractional parts, multiplied by
6342 1000. Note that this includes full seconds.
6346 SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5');
6347 <lineannotation>Result: </lineannotation><computeroutput>28500</computeroutput>
6353 <term><literal>minute</literal></term>
6356 The minutes field (0 - 59)
6360 SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40');
6361 <lineannotation>Result: </lineannotation><computeroutput>38</computeroutput>
6367 <term><literal>month</literal></term>
6370 For <type>timestamp</type> values, the number of the month
6371 within the year (1 - 12) ; for <type>interval</type> values
6372 the number of months, modulo 12 (0 - 11)
6376 SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40');
6377 <lineannotation>Result: </lineannotation><computeroutput>2</computeroutput>
6379 SELECT EXTRACT(MONTH FROM INTERVAL '2 years 3 months');
6380 <lineannotation>Result: </lineannotation><computeroutput>3</computeroutput>
6382 SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months');
6383 <lineannotation>Result: </lineannotation><computeroutput>1</computeroutput>
6389 <term><literal>quarter</literal></term>
6392 The quarter of the year (1 - 4) that the date is in
6396 SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40');
6397 <lineannotation>Result: </lineannotation><computeroutput>1</computeroutput>
6403 <term><literal>second</literal></term>
6406 The seconds field, including fractional parts (0 -
6407 59<footnote><simpara>60 if leap seconds are
6408 implemented by the operating system</simpara></footnote>)
6412 SELECT EXTRACT(SECOND FROM TIMESTAMP '2001-02-16 20:38:40');
6413 <lineannotation>Result: </lineannotation><computeroutput>40</computeroutput>
6415 SELECT EXTRACT(SECOND FROM TIME '17:12:28.5');
6416 <lineannotation>Result: </lineannotation><computeroutput>28.5</computeroutput>
6421 <term><literal>timezone</literal></term>
6424 The time zone offset from UTC, measured in seconds. Positive values
6425 correspond to time zones east of UTC, negative values to
6432 <term><literal>timezone_hour</literal></term>
6435 The hour component of the time zone offset
6441 <term><literal>timezone_minute</literal></term>
6444 The minute component of the time zone offset
6450 <term><literal>week</literal></term>
6453 The number of the week of the year that the day is in. By definition
6454 (<acronym>ISO</acronym> 8601), the first week of a year
6455 contains January 4 of that year. (The <acronym>ISO</acronym>-8601
6456 week starts on Monday.) In other words, the first Thursday of
6457 a year is in week 1 of that year.
6460 Because of this, it is possible for early January dates to be part of the
6461 52nd or 53rd week of the previous year. For example, <literal>2005-01-01</>
6462 is part of the 53rd week of year 2004, and <literal>2006-01-01</> is part of
6463 the 52nd week of year 2005.
6467 SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40');
6468 <lineannotation>Result: </lineannotation><computeroutput>7</computeroutput>
6474 <term><literal>year</literal></term>
6477 The year field. Keep in mind there is no <literal>0 AD</>, so subtracting
6478 <literal>BC</> years from <literal>AD</> years should be done with care.
6482 SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40');
6483 <lineannotation>Result: </lineannotation><computeroutput>2001</computeroutput>
6492 The <function>extract</function> function is primarily intended
6493 for computational processing. For formatting date/time values for
6494 display, see <xref linkend="functions-formatting">.
6498 The <function>date_part</function> function is modeled on the traditional
6499 <productname>Ingres</productname> equivalent to the
6500 <acronym>SQL</acronym>-standard function <function>extract</function>:
6502 date_part('<replaceable>field</replaceable>', <replaceable>source</replaceable>)
6504 Note that here the <replaceable>field</replaceable> parameter needs to
6505 be a string value, not a name. The valid field names for
6506 <function>date_part</function> are the same as for
6507 <function>extract</function>.
6511 SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
6512 <lineannotation>Result: </lineannotation><computeroutput>16</computeroutput>
6514 SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
6515 <lineannotation>Result: </lineannotation><computeroutput>4</computeroutput>
6520 <sect2 id="functions-datetime-trunc">
6521 <title><function>date_trunc</function></title>
6524 <primary>date_trunc</primary>
6528 The function <function>date_trunc</function> is conceptually
6529 similar to the <function>trunc</function> function for numbers.
6534 date_trunc('<replaceable>field</replaceable>', <replaceable>source</replaceable>)
6536 <replaceable>source</replaceable> is a value expression of type
6537 <type>timestamp</type> or <type>interval</>.
6538 (Values of type <type>date</type> and
6539 <type>time</type> are cast automatically to <type>timestamp</type> or
6540 <type>interval</>, respectively.)
6541 <replaceable>field</replaceable> selects to which precision to
6542 truncate the input value. The return value is of type
6543 <type>timestamp</type> or <type>interval</>
6544 with all fields that are less significant than the
6545 selected one set to zero (or one, for day and month).
6549 Valid values for <replaceable>field</replaceable> are:
6551 <member><literal>microseconds</literal></member>
6552 <member><literal>milliseconds</literal></member>
6553 <member><literal>second</literal></member>
6554 <member><literal>minute</literal></member>
6555 <member><literal>hour</literal></member>
6556 <member><literal>day</literal></member>
6557 <member><literal>week</literal></member>
6558 <member><literal>month</literal></member>
6559 <member><literal>quarter</literal></member>
6560 <member><literal>year</literal></member>
6561 <member><literal>decade</literal></member>
6562 <member><literal>century</literal></member>
6563 <member><literal>millennium</literal></member>
6570 SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
6571 <lineannotation>Result: </lineannotation><computeroutput>2001-02-16 20:00:00</computeroutput>
6573 SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
6574 <lineannotation>Result: </lineannotation><computeroutput>2001-01-01 00:00:00</computeroutput>
6579 <sect2 id="functions-datetime-zoneconvert">
6580 <title><literal>AT TIME ZONE</literal></title>
6583 <primary>time zone</primary>
6584 <secondary>conversion</secondary>
6588 <primary>AT TIME ZONE</primary>
6592 The <literal>AT TIME ZONE</literal> construct allows conversions
6593 of time stamps to different time zones. <xref
6594 linkend="functions-datetime-zoneconvert-table"> shows its
6598 <table id="functions-datetime-zoneconvert-table">
6599 <title><literal>AT TIME ZONE</literal> Variants</title>
6603 <entry>Expression</entry>
6604 <entry>Return Type</entry>
6605 <entry>Description</entry>
6612 <literal><type>timestamp without time zone</type> AT TIME ZONE <replaceable>zone</></literal>
6614 <entry><type>timestamp with time zone</type></entry>
6615 <entry>Treat given time stamp <emphasis>without time zone</> as located in the specified time zone</entry>
6620 <literal><type>timestamp with time zone</type> AT TIME ZONE <replaceable>zone</></literal>
6622 <entry><type>timestamp without time zone</type></entry>
6623 <entry>Convert given time stamp <emphasis>with time zone</> to the new time
6624 zone, with no time zone designation</entry>
6629 <literal><type>time with time zone</type> AT TIME ZONE <replaceable>zone</></literal>
6631 <entry><type>time with time zone</type></entry>
6632 <entry>Convert given time <emphasis>with time zone</> to the new time zone</entry>
6639 In these expressions, the desired time zone <replaceable>zone</> can be
6640 specified either as a text string (e.g., <literal>'PST'</literal>)
6641 or as an interval (e.g., <literal>INTERVAL '-08:00'</literal>).
6642 In the text case, a time zone name can be specified in any of the ways
6643 described in <xref linkend="datatype-timezones">.
6647 Examples (assuming the local time zone is <literal>PST8PDT</>):
6649 SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'MST';
6650 <lineannotation>Result: </lineannotation><computeroutput>2001-02-16 19:38:40-08</computeroutput>
6652 SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'MST';
6653 <lineannotation>Result: </lineannotation><computeroutput>2001-02-16 18:38:40</computeroutput>
6655 The first example takes a time stamp without time zone and interprets it as MST time
6656 (UTC-7), which is then converted to PST (UTC-8) for display. The second example takes
6657 a time stamp specified in EST (UTC-5) and converts it to local time in MST (UTC-7).
6661 The function <literal><function>timezone</function>(<replaceable>zone</>,
6662 <replaceable>timestamp</>)</literal> is equivalent to the SQL-conforming construct
6663 <literal><replaceable>timestamp</> AT TIME ZONE
6664 <replaceable>zone</></literal>.
6668 <sect2 id="functions-datetime-current">
6669 <title>Current Date/Time</title>
6672 <primary>date</primary>
6673 <secondary>current</secondary>
6677 <primary>time</primary>
6678 <secondary>current</secondary>
6682 <productname>PostgreSQL</productname> provides a number of functions
6683 that return values related to the current date and time. These
6684 SQL-standard functions all return values based on the start time of
6685 the current transaction:
6690 CURRENT_TIME(<replaceable>precision</replaceable>)
6691 CURRENT_TIMESTAMP(<replaceable>precision</replaceable>)
6694 LOCALTIME(<replaceable>precision</replaceable>)
6695 LOCALTIMESTAMP(<replaceable>precision</replaceable>)
6700 <function>CURRENT_TIME</function> and
6701 <function>CURRENT_TIMESTAMP</function> deliver values with time zone;
6702 <function>LOCALTIME</function> and
6703 <function>LOCALTIMESTAMP</function> deliver values without time zone.
6707 <function>CURRENT_TIME</function>,
6708 <function>CURRENT_TIMESTAMP</function>,
6709 <function>LOCALTIME</function>, and
6710 <function>LOCALTIMESTAMP</function>
6712 a precision parameter, which causes the result to be rounded
6713 to that many fractional digits in the seconds field. Without a precision parameter,
6714 the result is given to the full available precision.
6720 SELECT CURRENT_TIME;
6721 <lineannotation>Result: </lineannotation><computeroutput>14:39:53.662522-05</computeroutput>
6723 SELECT CURRENT_DATE;
6724 <lineannotation>Result: </lineannotation><computeroutput>2001-12-23</computeroutput>
6726 SELECT CURRENT_TIMESTAMP;
6727 <lineannotation>Result: </lineannotation><computeroutput>2001-12-23 14:39:53.662522-05</computeroutput>
6729 SELECT CURRENT_TIMESTAMP(2);
6730 <lineannotation>Result: </lineannotation><computeroutput>2001-12-23 14:39:53.66-05</computeroutput>
6732 SELECT LOCALTIMESTAMP;
6733 <lineannotation>Result: </lineannotation><computeroutput>2001-12-23 14:39:53.662522</computeroutput>
6738 Since these functions return
6739 the start time of the current transaction, their values do not
6740 change during the transaction. This is considered a feature:
6741 the intent is to allow a single transaction to have a consistent
6742 notion of the <quote>current</quote> time, so that multiple
6743 modifications within the same transaction bear the same
6749 Other database systems might advance these values more
6755 <productname>PostgreSQL</productname> also provides functions that
6756 return the start time of the current statement, as well as the actual
6757 current time at the instant the function is called. The complete list
6758 of non-SQL-standard time functions is:
6760 transaction_timestamp()
6761 statement_timestamp()
6769 <function>statement_timestamp()</> returns the start time of the current
6770 statement (more specifically, the time of receipt of the latest command
6771 message from the client).
6772 <function>statement_timestamp()</> and <function>transaction_timestamp()</>
6773 return the same value during the first command of a transaction, but might
6774 differ during subsequent commands.
6775 <function>clock_timestamp()</> returns the actual current time, and
6776 therefore its value changes even within a single SQL command.
6777 <function>timeofday()</> is a historical
6778 <productname>PostgreSQL</productname> function. Like
6779 <function>clock_timestamp()</>, it returns the actual current time,
6780 but as a formatted <type>text</> string rather than a <type>timestamp
6781 with time zone</> value.
6782 <function>now()</> is a traditional <productname>PostgreSQL</productname>
6783 equivalent to <function>CURRENT_TIMESTAMP</function>.
6784 <function>transaction_timestamp()</> is likewise equivalent to
6785 <function>CURRENT_TIMESTAMP</function>, but is named to clearly reflect
6790 All the date/time data types also accept the special literal value
6791 <literal>now</literal> to specify the current date and time (again,
6792 interpreted as the transaction start time). Thus,
6793 the following three all return the same result:
6795 SELECT CURRENT_TIMESTAMP;
6797 SELECT TIMESTAMP 'now'; -- incorrect for use with DEFAULT
6803 You do not want to use the third form when specifying a <literal>DEFAULT</>
6804 clause while creating a table. The system will convert <literal>now</literal>
6805 to a <type>timestamp</type> as soon as the constant is parsed, so that when
6806 the default value is needed,
6807 the time of the table creation would be used! The first two
6808 forms will not be evaluated until the default value is used,
6809 because they are function calls. Thus they will give the desired
6810 behavior of defaulting to the time of row insertion.
6815 <sect2 id="functions-datetime-delay">
6816 <title>Delaying Execution</title>
6819 <primary>pg_sleep</primary>
6822 <primary>sleep</primary>
6825 <primary>delay</primary>
6829 The following function is available to delay execution of the server
6832 pg_sleep(<replaceable>seconds</replaceable>)
6835 <function>pg_sleep</function> makes the current session's process
6836 sleep until <replaceable>seconds</replaceable> seconds have
6837 elapsed. <replaceable>seconds</replaceable> is a value of type
6838 <type>double precision</>, so fractional-second delays can be specified.
6842 SELECT pg_sleep(1.5);
6848 The effective resolution of the sleep interval is platform-specific;
6849 0.01 seconds is a common value. The sleep delay will be at least as long
6850 as specified. It might be longer depending on factors such as server load.
6856 Make sure that your session does not hold more locks than necessary
6857 when calling <function>pg_sleep</function>. Otherwise other sessions
6858 might have to wait for your sleeping process, slowing down the entire
6867 <sect1 id="functions-enum">
6868 <title>Enum Support Functions</title>
6871 For enum types (described in <xref linkend="datatype-enum">),
6872 there are several functions that allow cleaner programming without
6873 hard-coding particular values of an enum type.
6874 These are listed in <xref linkend="functions-enum-table">. The examples
6875 assume an enum type created as:
6878 CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple');
6883 <table id="functions-enum-table">
6884 <title>Enum Support Functions</title>
6888 <entry>Function</entry>
6889 <entry>Description</entry>
6890 <entry>Example</entry>
6891 <entry>Example Result</entry>
6896 <entry><literal>enum_first(anyenum)</literal></entry>
6897 <entry>Returns the first value of the input enum type</entry>
6898 <entry><literal>enum_first(null::rainbow)</literal></entry>
6899 <entry><literal>red</literal></entry>
6902 <entry><literal>enum_last(anyenum)</literal></entry>
6903 <entry>Returns the last value of the input enum type</entry>
6904 <entry><literal>enum_last(null::rainbow)</literal></entry>
6905 <entry><literal>purple</literal></entry>
6908 <entry><literal>enum_range(anyenum)</literal></entry>
6909 <entry>Returns all values of the input enum type in an ordered array</entry>
6910 <entry><literal>enum_range(null::rainbow)</literal></entry>
6911 <entry><literal>{red,orange,yellow,green,blue,purple}</literal></entry>
6914 <entry morerows="2"><literal>enum_range(anyenum, anyenum)</literal></entry>
6915 <entry morerows="2">
6916 Returns the range between the two given enum values, as an ordered
6917 array. The values must be from the same enum type. If the first
6918 parameter is null, the result will start with the first value of
6920 If the second parameter is null, the result will end with the last
6921 value of the enum type.
6923 <entry><literal>enum_range('orange'::rainbow, 'green'::rainbow)</literal></entry>
6924 <entry><literal>{orange,yellow,green}</literal></entry>
6927 <entry><literal>enum_range(NULL, 'green'::rainbow)</literal></entry>
6928 <entry><literal>{red,orange,yellow,green}</literal></entry>
6931 <entry><literal>enum_range('orange'::rainbow, NULL)</literal></entry>
6932 <entry><literal>{orange,yellow,green,blue,purple}</literal></entry>
6939 Notice that except for the two-argument form of <function>enum_range</>,
6940 these functions disregard the specific value passed to them; they care
6941 only about its declared data type. Either null or a specific value of
6942 the type can be passed, with the same result. It is more common to
6943 apply these functions to a table column or function argument than to
6944 a hardwired type name as suggested by the examples.
6948 <sect1 id="functions-geometry">
6949 <title>Geometric Functions and Operators</title>
6952 The geometric types <type>point</type>, <type>box</type>,
6953 <type>lseg</type>, <type>line</type>, <type>path</type>,
6954 <type>polygon</type>, and <type>circle</type> have a large set of
6955 native support functions and operators, shown in <xref
6956 linkend="functions-geometry-op-table">, <xref
6957 linkend="functions-geometry-func-table">, and <xref
6958 linkend="functions-geometry-conv-table">.
6963 Note that the <quote>same as</> operator, <literal>~=</>, represents
6964 the usual notion of equality for the <type>point</type>,
6965 <type>box</type>, <type>polygon</type>, and <type>circle</type> types.
6966 Some of these types also have an <literal>=</> operator, but
6967 <literal>=</> compares
6968 for equal <emphasis>areas</> only. The other scalar comparison operators
6969 (<literal><=</> and so on) likewise compare areas for these types.
6973 <table id="functions-geometry-op-table">
6974 <title>Geometric Operators</title>
6978 <entry>Operator</entry>
6979 <entry>Description</entry>
6980 <entry>Example</entry>
6985 <entry> <literal>+</literal> </entry>
6986 <entry>Translation</entry>
6987 <entry><literal>box '((0,0),(1,1))' + point '(2.0,0)'</literal></entry>
6990 <entry> <literal>-</literal> </entry>
6991 <entry>Translation</entry>
6992 <entry><literal>box '((0,0),(1,1))' - point '(2.0,0)'</literal></entry>
6995 <entry> <literal>*</literal> </entry>
6996 <entry>Scaling/rotation</entry>
6997 <entry><literal>box '((0,0),(1,1))' * point '(2.0,0)'</literal></entry>
7000 <entry> <literal>/</literal> </entry>
7001 <entry>Scaling/rotation</entry>
7002 <entry><literal>box '((0,0),(2,2))' / point '(2.0,0)'</literal></entry>
7005 <entry> <literal>#</literal> </entry>
7006 <entry>Point or box of intersection</entry>
7007 <entry><literal>'((1,-1),(-1,1))' # '((1,1),(-1,-1))'</literal></entry>
7010 <entry> <literal>#</literal> </entry>
7011 <entry>Number of points in path or polygon</entry>
7012 <entry><literal># '((1,0),(0,1),(-1,0))'</literal></entry>
7015 <entry> <literal>@-@</literal> </entry>
7016 <entry>Length or circumference</entry>
7017 <entry><literal>@-@ path '((0,0),(1,0))'</literal></entry>
7020 <entry> <literal>@@</literal> </entry>
7021 <entry>Center</entry>
7022 <entry><literal>@@ circle '((0,0),10)'</literal></entry>
7025 <entry> <literal>##</literal> </entry>
7026 <entry>Closest point to first operand on second operand</entry>
7027 <entry><literal>point '(0,0)' ## lseg '((2,0),(0,2))'</literal></entry>
7030 <entry> <literal><-></literal> </entry>
7031 <entry>Distance between</entry>
7032 <entry><literal>circle '((0,0),1)' <-> circle '((5,0),1)'</literal></entry>
7035 <entry> <literal>&&</literal> </entry>
7036 <entry>Overlaps?</entry>
7037 <entry><literal>box '((0,0),(1,1))' && box '((0,0),(2,2))'</literal></entry>
7040 <entry> <literal><<</literal> </entry>
7041 <entry>Is strictly left of?</entry>
7042 <entry><literal>circle '((0,0),1)' << circle '((5,0),1)'</literal></entry>
7045 <entry> <literal>>></literal> </entry>
7046 <entry>Is strictly right of?</entry>
7047 <entry><literal>circle '((5,0),1)' >> circle '((0,0),1)'</literal></entry>
7050 <entry> <literal>&<</literal> </entry>
7051 <entry>Does not extend to the right of?</entry>
7052 <entry><literal>box '((0,0),(1,1))' &< box '((0,0),(2,2))'</literal></entry>
7055 <entry> <literal>&></literal> </entry>
7056 <entry>Does not extend to the left of?</entry>
7057 <entry><literal>box '((0,0),(3,3))' &> box '((0,0),(2,2))'</literal></entry>
7060 <entry> <literal><<|</literal> </entry>
7061 <entry>Is strictly below?</entry>
7062 <entry><literal>box '((0,0),(3,3))' <<| box '((3,4),(5,5))'</literal></entry>
7065 <entry> <literal>|>></literal> </entry>
7066 <entry>Is strictly above?</entry>
7067 <entry><literal>box '((3,4),(5,5))' |>> box '((0,0),(3,3))'</literal></entry>
7070 <entry> <literal>&<|</literal> </entry>
7071 <entry>Does not extend above?</entry>
7072 <entry><literal>box '((0,0),(1,1))' &<| box '((0,0),(2,2))'</literal></entry>
7075 <entry> <literal>|&></literal> </entry>
7076 <entry>Does not extend below?</entry>
7077 <entry><literal>box '((0,0),(3,3))' |&> box '((0,0),(2,2))'</literal></entry>
7080 <entry> <literal><^</literal> </entry>
7081 <entry>Is below (allows touching)?</entry>
7082 <entry><literal>circle '((0,0),1)' <^ circle '((0,5),1)'</literal></entry>
7085 <entry> <literal>>^</literal> </entry>
7086 <entry>Is above (allows touching)?</entry>
7087 <entry><literal>circle '((0,5),1)' >^ circle '((0,0),1)'</literal></entry>
7090 <entry> <literal>?#</literal> </entry>
7091 <entry>Intersects?</entry>
7092 <entry><literal>lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))'</literal></entry>
7095 <entry> <literal>?-</literal> </entry>
7096 <entry>Is horizontal?</entry>
7097 <entry><literal>?- lseg '((-1,0),(1,0))'</literal></entry>
7100 <entry> <literal>?-</literal> </entry>
7101 <entry>Are horizontally aligned?</entry>
7102 <entry><literal>point '(1,0)' ?- point '(0,0)'</literal></entry>
7105 <entry> <literal>?|</literal> </entry>
7106 <entry>Is vertical?</entry>
7107 <entry><literal>?| lseg '((-1,0),(1,0))'</literal></entry>
7110 <entry> <literal>?|</literal> </entry>
7111 <entry>Are vertically aligned?</entry>
7112 <entry><literal>point '(0,1)' ?| point '(0,0)'</literal></entry>
7115 <entry> <literal>?-|</literal> </entry>
7116 <entry>Is perpendicular?</entry>
7117 <entry><literal>lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))'</literal></entry>
7120 <entry> <literal>?||</literal> </entry>
7121 <entry>Are parallel?</entry>
7122 <entry><literal>lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))'</literal></entry>
7125 <entry> <literal>@></literal> </entry>
7126 <entry>Contains?</entry>
7127 <entry><literal>circle '((0,0),2)' @> point '(1,1)'</literal></entry>
7130 <entry> <literal><@</literal> </entry>
7131 <entry>Contained in or on?</entry>
7132 <entry><literal>point '(1,1)' <@ circle '((0,0),2)'</literal></entry>
7135 <entry> <literal>~=</literal> </entry>
7136 <entry>Same as?</entry>
7137 <entry><literal>polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'</literal></entry>
7145 Before <productname>PostgreSQL</productname> 8.2, the containment
7146 operators <literal>@></> and <literal><@</> were respectively
7147 called <literal>~</> and <literal>@</>. These names are still
7148 available, but are deprecated and will eventually be removed.
7153 <primary>area</primary>
7156 <primary>center</primary>
7159 <primary>diameter</primary>
7162 <primary>height</primary>
7165 <primary>isclosed</primary>
7168 <primary>isopen</primary>
7171 <primary>length</primary>
7174 <primary>npoints</primary>
7177 <primary>pclose</primary>
7180 <primary>popen</primary>
7183 <primary>radius</primary>
7186 <primary>width</primary>
7189 <table id="functions-geometry-func-table">
7190 <title>Geometric Functions</title>
7194 <entry>Function</entry>
7195 <entry>Return Type</entry>
7196 <entry>Description</entry>
7197 <entry>Example</entry>
7202 <entry><literal><function>area</function>(<replaceable>object</>)</literal></entry>
7203 <entry><type>double precision</type></entry>
7205 <entry><literal>area(box '((0,0),(1,1))')</literal></entry>
7208 <entry><literal><function>center</function>(<replaceable>object</>)</literal></entry>
7209 <entry><type>point</type></entry>
7210 <entry>center</entry>
7211 <entry><literal>center(box '((0,0),(1,2))')</literal></entry>
7214 <entry><literal><function>diameter</function>(<type>circle</>)</literal></entry>
7215 <entry><type>double precision</type></entry>
7216 <entry>diameter of circle</entry>
7217 <entry><literal>diameter(circle '((0,0),2.0)')</literal></entry>
7220 <entry><literal><function>height</function>(<type>box</>)</literal></entry>
7221 <entry><type>double precision</type></entry>
7222 <entry>vertical size of box</entry>
7223 <entry><literal>height(box '((0,0),(1,1))')</literal></entry>
7226 <entry><literal><function>isclosed</function>(<type>path</>)</literal></entry>
7227 <entry><type>boolean</type></entry>
7228 <entry>a closed path?</entry>
7229 <entry><literal>isclosed(path '((0,0),(1,1),(2,0))')</literal></entry>
7232 <entry><literal><function>isopen</function>(<type>path</>)</literal></entry>
7233 <entry><type>boolean</type></entry>
7234 <entry>an open path?</entry>
7235 <entry><literal>isopen(path '[(0,0),(1,1),(2,0)]')</literal></entry>
7238 <entry><literal><function>length</function>(<replaceable>object</>)</literal></entry>
7239 <entry><type>double precision</type></entry>
7240 <entry>length</entry>
7241 <entry><literal>length(path '((-1,0),(1,0))')</literal></entry>
7244 <entry><literal><function>npoints</function>(<type>path</>)</literal></entry>
7245 <entry><type>int</type></entry>
7246 <entry>number of points</entry>
7247 <entry><literal>npoints(path '[(0,0),(1,1),(2,0)]')</literal></entry>
7250 <entry><literal><function>npoints</function>(<type>polygon</>)</literal></entry>
7251 <entry><type>int</type></entry>
7252 <entry>number of points</entry>
7253 <entry><literal>npoints(polygon '((1,1),(0,0))')</literal></entry>
7256 <entry><literal><function>pclose</function>(<type>path</>)</literal></entry>
7257 <entry><type>path</type></entry>
7258 <entry>convert path to closed</entry>
7259 <entry><literal>pclose(path '[(0,0),(1,1),(2,0)]')</literal></entry>
7262 <!-- Not defined by this name. Implements the intersection operator '#' -->
7264 <entry><literal><function>point</function>(<type>lseg</>, <type>lseg</>)</literal></entry>
7265 <entry><type>point</type></entry>
7266 <entry>intersection</entry>
7267 <entry><literal>point(lseg '((-1,0),(1,0))',lseg '((-2,-2),(2,2))')</literal></entry>
7271 <entry><literal><function>popen</function>(<type>path</>)</literal></entry>
7272 <entry><type>path</type></entry>
7273 <entry>convert path to open</entry>
7274 <entry><literal>popen(path '((0,0),(1,1),(2,0))')</literal></entry>
7277 <entry><literal><function>radius</function>(<type>circle</type>)</literal></entry>
7278 <entry><type>double precision</type></entry>
7279 <entry>radius of circle</entry>
7280 <entry><literal>radius(circle '((0,0),2.0)')</literal></entry>
7283 <entry><literal><function>width</function>(<type>box</>)</literal></entry>
7284 <entry><type>double precision</type></entry>
7285 <entry>horizontal size of box</entry>
7286 <entry><literal>width(box '((0,0),(1,1))')</literal></entry>
7292 <table id="functions-geometry-conv-table">
7293 <title>Geometric Type Conversion Functions</title>
7297 <entry>Function</entry>
7298 <entry>Return Type</entry>
7299 <entry>Description</entry>
7300 <entry>Example</entry>
7305 <entry><literal><function>box</function>(<type>circle</type>)</literal></entry>
7306 <entry><type>box</type></entry>
7307 <entry>circle to box</entry>
7308 <entry><literal>box(circle '((0,0),2.0)')</literal></entry>
7311 <entry><literal><function>box</function>(<type>point</type>, <type>point</type>)</literal></entry>
7312 <entry><type>box</type></entry>
7313 <entry>points to box</entry>
7314 <entry><literal>box(point '(0,0)', point '(1,1)')</literal></entry>
7317 <entry><literal><function>box</function>(<type>polygon</type>)</literal></entry>
7318 <entry><type>box</type></entry>
7319 <entry>polygon to box</entry>
7320 <entry><literal>box(polygon '((0,0),(1,1),(2,0))')</literal></entry>
7323 <entry><literal><function>circle</function>(<type>box</type>)</literal></entry>
7324 <entry><type>circle</type></entry>
7325 <entry>box to circle</entry>
7326 <entry><literal>circle(box '((0,0),(1,1))')</literal></entry>
7329 <entry><literal><function>circle</function>(<type>point</type>, <type>double precision</type>)</literal></entry>
7330 <entry><type>circle</type></entry>
7331 <entry>center and radius to circle</entry>
7332 <entry><literal>circle(point '(0,0)', 2.0)</literal></entry>
7335 <entry><literal><function>circle</function>(<type>polygon</type>)</literal></entry>
7336 <entry><type>circle</type></entry>
7337 <entry>polygon to circle</entry>
7338 <entry><literal>circle(polygon '((0,0),(1,1),(2,0))')</literal></entry>
7341 <entry><literal><function>lseg</function>(<type>box</type>)</literal></entry>
7342 <entry><type>lseg</type></entry>
7343 <entry>box diagonal to line segment</entry>
7344 <entry><literal>lseg(box '((-1,0),(1,0))')</literal></entry>
7347 <entry><literal><function>lseg</function>(<type>point</type>, <type>point</type>)</literal></entry>
7348 <entry><type>lseg</type></entry>
7349 <entry>points to line segment</entry>
7350 <entry><literal>lseg(point '(-1,0)', point '(1,0)')</literal></entry>
7353 <entry><literal><function>path</function>(<type>polygon</type>)</literal></entry>
7354 <entry><type>point</type></entry>
7355 <entry>polygon to path</entry>
7356 <entry><literal>path(polygon '((0,0),(1,1),(2,0))')</literal></entry>
7359 <entry><literal><function>point</function>(<type>double
7360 precision</type>, <type>double precision</type>)</literal></entry>
7361 <entry><type>point</type></entry>
7362 <entry>construct point</entry>
7363 <entry><literal>point(23.4, -44.5)</literal></entry>
7366 <entry><literal><function>point</function>(<type>box</type>)</literal></entry>
7367 <entry><type>point</type></entry>
7368 <entry>center of box</entry>
7369 <entry><literal>point(box '((-1,0),(1,0))')</literal></entry>
7372 <entry><literal><function>point</function>(<type>circle</type>)</literal></entry>
7373 <entry><type>point</type></entry>
7374 <entry>center of circle</entry>
7375 <entry><literal>point(circle '((0,0),2.0)')</literal></entry>
7378 <entry><literal><function>point</function>(<type>lseg</type>)</literal></entry>
7379 <entry><type>point</type></entry>
7380 <entry>center of line segment</entry>
7381 <entry><literal>point(lseg '((-1,0),(1,0))')</literal></entry>
7384 <entry><literal><function>point</function>(<type>polygon</type>)</literal></entry>
7385 <entry><type>point</type></entry>
7386 <entry>center of polygon</entry>
7387 <entry><literal>point(polygon '((0,0),(1,1),(2,0))')</literal></entry>
7390 <entry><literal><function>polygon</function>(<type>box</type>)</literal></entry>
7391 <entry><type>polygon</type></entry>
7392 <entry>box to 4-point polygon</entry>
7393 <entry><literal>polygon(box '((0,0),(1,1))')</literal></entry>
7396 <entry><literal><function>polygon</function>(<type>circle</type>)</literal></entry>
7397 <entry><type>polygon</type></entry>
7398 <entry>circle to 12-point polygon</entry>
7399 <entry><literal>polygon(circle '((0,0),2.0)')</literal></entry>
7402 <entry><literal><function>polygon</function>(<replaceable class="parameter">npts</replaceable>, <type>circle</type>)</literal></entry>
7403 <entry><type>polygon</type></entry>
7404 <entry>circle to <replaceable class="parameter">npts</replaceable>-point polygon</entry>
7405 <entry><literal>polygon(12, circle '((0,0),2.0)')</literal></entry>
7408 <entry><literal><function>polygon</function>(<type>path</type>)</literal></entry>
7409 <entry><type>polygon</type></entry>
7410 <entry>path to polygon</entry>
7411 <entry><literal>polygon(path '((0,0),(1,1),(2,0))')</literal></entry>
7418 It is possible to access the two component numbers of a <type>point</>
7419 as though they were an array with indices 0 and 1. For example, if
7420 <literal>t.p</> is a <type>point</> column then
7421 <literal>SELECT p[0] FROM t</> retrieves the X coordinate and
7422 <literal>UPDATE t SET p[1] = ...</> changes the Y coordinate.
7423 In the same way, a value of type <type>box</> or <type>lseg</> can be treated
7424 as an array of two <type>point</> values.
7428 The <function>area</function> function works for the types
7429 <type>box</type>, <type>circle</type>, and <type>path</type>.
7430 The <function>area</function> function only works on the
7431 <type>path</type> data type if the points in the
7432 <type>path</type> are non-intersecting. For example, the
7434 <literal>'((0,0),(0,1),(2,1),(2,2),(1,2),(1,0),(0,0))'::PATH</literal>
7435 will not work; however, the following visually identical
7437 <literal>'((0,0),(0,1),(1,1),(1,2),(2,2),(2,1),(1,1),(1,0),(0,0))'::PATH</literal>
7438 will work. If the concept of an intersecting versus
7439 non-intersecting <type>path</type> is confusing, draw both of the
7440 above <type>path</type>s side by side on a piece of graph paper.
7446 <sect1 id="functions-net">
7447 <title>Network Address Functions and Operators</title>
7450 <xref linkend="cidr-inet-operators-table"> shows the operators
7451 available for the <type>cidr</type> and <type>inet</type> types.
7452 The operators <literal><<</literal>,
7453 <literal><<=</literal>, <literal>>></literal>, and
7454 <literal>>>=</literal> test for subnet inclusion. They
7455 consider only the network parts of the two addresses (ignoring any
7456 host part) and determine whether one network is identical to
7457 or a subnet of the other.
7460 <table id="cidr-inet-operators-table">
7461 <title><type>cidr</type> and <type>inet</type> Operators</title>
7465 <entry>Operator</entry>
7466 <entry>Description</entry>
7467 <entry>Example</entry>
7472 <entry> <literal><</literal> </entry>
7473 <entry>is less than</entry>
7474 <entry><literal>inet '192.168.1.5' < inet '192.168.1.6'</literal></entry>
7477 <entry> <literal><=</literal> </entry>
7478 <entry>is less than or equal</entry>
7479 <entry><literal>inet '192.168.1.5' <= inet '192.168.1.5'</literal></entry>
7482 <entry> <literal>=</literal> </entry>
7483 <entry>equals</entry>
7484 <entry><literal>inet '192.168.1.5' = inet '192.168.1.5'</literal></entry>
7487 <entry> <literal>>=</literal> </entry>
7488 <entry>is greater or equal</entry>
7489 <entry><literal>inet '192.168.1.5' >= inet '192.168.1.5'</literal></entry>
7492 <entry> <literal>></literal> </entry>
7493 <entry>is greater than</entry>
7494 <entry><literal>inet '192.168.1.5' > inet '192.168.1.4'</literal></entry>
7497 <entry> <literal><></literal> </entry>
7498 <entry>is not equal</entry>
7499 <entry><literal>inet '192.168.1.5' <> inet '192.168.1.4'</literal></entry>
7502 <entry> <literal><<</literal> </entry>
7503 <entry>is contained within</entry>
7504 <entry><literal>inet '192.168.1.5' << inet '192.168.1/24'</literal></entry>
7507 <entry> <literal><<=</literal> </entry>
7508 <entry>is contained within or equals</entry>
7509 <entry><literal>inet '192.168.1/24' <<= inet '192.168.1/24'</literal></entry>
7512 <entry> <literal>>></literal> </entry>
7513 <entry>contains</entry>
7514 <entry><literal>inet '192.168.1/24' >> inet '192.168.1.5'</literal></entry>
7517 <entry> <literal>>>=</literal> </entry>
7518 <entry>contains or equals</entry>
7519 <entry><literal>inet '192.168.1/24' >>= inet '192.168.1/24'</literal></entry>
7522 <entry> <literal>~</literal> </entry>
7523 <entry>bitwise NOT</entry>
7524 <entry><literal>~ inet '192.168.1.6'</literal></entry>
7527 <entry> <literal>&</literal> </entry>
7528 <entry>bitwise AND</entry>
7529 <entry><literal>inet '192.168.1.6' & inet '0.0.0.255'</literal></entry>
7532 <entry> <literal>|</literal> </entry>
7533 <entry>bitwise OR</entry>
7534 <entry><literal>inet '192.168.1.6' | inet '0.0.0.255'</literal></entry>
7537 <entry> <literal>+</literal> </entry>
7538 <entry>addition</entry>
7539 <entry><literal>inet '192.168.1.6' + 25</literal></entry>
7542 <entry> <literal>-</literal> </entry>
7543 <entry>subtraction</entry>
7544 <entry><literal>inet '192.168.1.43' - 36</literal></entry>
7547 <entry> <literal>-</literal> </entry>
7548 <entry>subtraction</entry>
7549 <entry><literal>inet '192.168.1.43' - inet '192.168.1.19'</literal></entry>
7556 <xref linkend="cidr-inet-functions-table"> shows the functions
7557 available for use with the <type>cidr</type> and <type>inet</type>
7558 types. The <function>abbrev</function>, <function>host</function>,
7559 and <function>text</function>
7560 functions are primarily intended to offer alternative display
7564 <table id="cidr-inet-functions-table">
7565 <title><type>cidr</type> and <type>inet</type> Functions</title>
7569 <entry>Function</entry>
7570 <entry>Return Type</entry>
7571 <entry>Description</entry>
7572 <entry>Example</entry>
7573 <entry>Result</entry>
7578 <entry><literal><function>abbrev</function>(<type>inet</type>)</literal></entry>
7579 <entry><type>text</type></entry>
7580 <entry>abbreviated display format as text</entry>
7581 <entry><literal>abbrev(inet '10.1.0.0/16')</literal></entry>
7582 <entry><literal>10.1.0.0/16</literal></entry>
7585 <entry><literal><function>abbrev</function>(<type>cidr</type>)</literal></entry>
7586 <entry><type>text</type></entry>
7587 <entry>abbreviated display format as text</entry>
7588 <entry><literal>abbrev(cidr '10.1.0.0/16')</literal></entry>
7589 <entry><literal>10.1/16</literal></entry>
7592 <entry><literal><function>broadcast</function>(<type>inet</type>)</literal></entry>
7593 <entry><type>inet</type></entry>
7594 <entry>broadcast address for network</entry>
7595 <entry><literal>broadcast('192.168.1.5/24')</literal></entry>
7596 <entry><literal>192.168.1.255/24</literal></entry>
7599 <entry><literal><function>family</function>(<type>inet</type>)</literal></entry>
7600 <entry><type>int</type></entry>
7601 <entry>extract family of address; <literal>4</literal> for IPv4,
7602 <literal>6</literal> for IPv6</entry>
7603 <entry><literal>family('::1')</literal></entry>
7604 <entry><literal>6</literal></entry>
7607 <entry><literal><function>host</function>(<type>inet</type>)</literal></entry>
7608 <entry><type>text</type></entry>
7609 <entry>extract IP address as text</entry>
7610 <entry><literal>host('192.168.1.5/24')</literal></entry>
7611 <entry><literal>192.168.1.5</literal></entry>
7614 <entry><literal><function>hostmask</function>(<type>inet</type>)</literal></entry>
7615 <entry><type>inet</type></entry>
7616 <entry>construct host mask for network</entry>
7617 <entry><literal>hostmask('192.168.23.20/30')</literal></entry>
7618 <entry><literal>0.0.0.3</literal></entry>
7621 <entry><literal><function>masklen</function>(<type>inet</type>)</literal></entry>
7622 <entry><type>int</type></entry>
7623 <entry>extract netmask length</entry>
7624 <entry><literal>masklen('192.168.1.5/24')</literal></entry>
7625 <entry><literal>24</literal></entry>
7628 <entry><literal><function>netmask</function>(<type>inet</type>)</literal></entry>
7629 <entry><type>inet</type></entry>
7630 <entry>construct netmask for network</entry>
7631 <entry><literal>netmask('192.168.1.5/24')</literal></entry>
7632 <entry><literal>255.255.255.0</literal></entry>
7635 <entry><literal><function>network</function>(<type>inet</type>)</literal></entry>
7636 <entry><type>cidr</type></entry>
7637 <entry>extract network part of address</entry>
7638 <entry><literal>network('192.168.1.5/24')</literal></entry>
7639 <entry><literal>192.168.1.0/24</literal></entry>
7642 <entry><literal><function>set_masklen</function>(<type>inet</type>, <type>int</type>)</literal></entry>
7643 <entry><type>inet</type></entry>
7644 <entry>set netmask length for <type>inet</type> value</entry>
7645 <entry><literal>set_masklen('192.168.1.5/24', 16)</literal></entry>
7646 <entry><literal>192.168.1.5/16</literal></entry>
7649 <entry><literal><function>set_masklen</function>(<type>cidr</type>, <type>int</type>)</literal></entry>
7650 <entry><type>cidr</type></entry>
7651 <entry>set netmask length for <type>cidr</type> value</entry>
7652 <entry><literal>set_masklen('192.168.1.0/24'::cidr, 16)</literal></entry>
7653 <entry><literal>192.168.0.0/16</literal></entry>
7656 <entry><literal><function>text</function>(<type>inet</type>)</literal></entry>
7657 <entry><type>text</type></entry>
7658 <entry>extract IP address and netmask length as text</entry>
7659 <entry><literal>text(inet '192.168.1.5')</literal></entry>
7660 <entry><literal>192.168.1.5/32</literal></entry>
7667 Any <type>cidr</> value can be cast to <type>inet</> implicitly
7668 or explicitly; therefore, the functions shown above as operating on
7669 <type>inet</> also work on <type>cidr</> values. (Where there are
7670 separate functions for <type>inet</> and <type>cidr</>, it is because
7671 the behavior should be different for the two cases.)
7672 Also, it is permitted to cast an <type>inet</> value to <type>cidr</>.
7673 When this is done, any bits to the right of the netmask are silently zeroed
7674 to create a valid <type>cidr</> value.
7676 you can cast a text value to <type>inet</> or <type>cidr</>
7677 using normal casting syntax: for example,
7678 <literal>inet(<replaceable>expression</>)</literal> or
7679 <literal><replaceable>colname</>::cidr</literal>.
7683 <xref linkend="macaddr-functions-table"> shows the functions
7684 available for use with the <type>macaddr</type> type. The function
7685 <literal><function>trunc</function>(<type>macaddr</type>)</literal> returns a MAC
7686 address with the last 3 bytes set to zero. This can be used to
7687 associate the remaining prefix with a manufacturer.
7690 <table id="macaddr-functions-table">
7691 <title><type>macaddr</type> Functions</title>
7695 <entry>Function</entry>
7696 <entry>Return Type</entry>
7697 <entry>Description</entry>
7698 <entry>Example</entry>
7699 <entry>Result</entry>
7704 <entry><literal><function>trunc</function>(<type>macaddr</type>)</literal></entry>
7705 <entry><type>macaddr</type></entry>
7706 <entry>set last 3 bytes to zero</entry>
7707 <entry><literal>trunc(macaddr '12:34:56:78:90:ab')</literal></entry>
7708 <entry><literal>12:34:56:00:00:00</literal></entry>
7715 The <type>macaddr</type> type also supports the standard relational
7716 operators (<literal>></literal>, <literal><=</literal>, etc.) for
7717 lexicographical ordering.
7723 <sect1 id="functions-textsearch">
7724 <title>Text Search Functions and Operators</title>
7726 <indexterm zone="datatype-textsearch">
7727 <primary>full text search</primary>
7728 <secondary>functions and operators</secondary>
7731 <indexterm zone="datatype-textsearch">
7732 <primary>text search</primary>
7733 <secondary>functions and operators</secondary>
7737 <xref linkend="textsearch-operators-table">,
7738 <xref linkend="textsearch-functions-table"> and
7739 <xref linkend="textsearch-functions-debug-table">
7740 summarize the functions and operators that are provided
7741 for full text searching. See <xref linkend="textsearch"> for a detailed
7742 explanation of <productname>PostgreSQL</productname>'s text search
7746 <table id="textsearch-operators-table">
7747 <title>Text Search Operators</title>
7751 <entry>Operator</entry>
7752 <entry>Description</entry>
7753 <entry>Example</entry>
7754 <entry>Result</entry>
7759 <entry> <literal>@@</literal> </entry>
7760 <entry><type>tsvector</> matches <type>tsquery</> ?</entry>
7761 <entry><literal>to_tsvector('fat cats ate rats') @@ to_tsquery('cat & rat')</literal></entry>
7762 <entry><literal>t</literal></entry>
7765 <entry> <literal>@@@</literal> </entry>
7766 <entry>deprecated synonym for <literal>@@</></entry>
7767 <entry><literal>to_tsvector('fat cats ate rats') @@@ to_tsquery('cat & rat')</literal></entry>
7768 <entry><literal>t</literal></entry>
7771 <entry> <literal>||</literal> </entry>
7772 <entry>concatenate <type>tsvector</>s</entry>
7773 <entry><literal>'a:1 b:2'::tsvector || 'c:1 d:2 b:3'::tsvector</literal></entry>
7774 <entry><literal>'a':1 'b':2,5 'c':3 'd':4</literal></entry>
7777 <entry> <literal>&&</literal> </entry>
7778 <entry>AND <type>tsquery</>s together</entry>
7779 <entry><literal>'fat | rat'::tsquery && 'cat'::tsquery</literal></entry>
7780 <entry><literal>( 'fat' | 'rat' ) & 'cat'</literal></entry>
7783 <entry> <literal>||</literal> </entry>
7784 <entry>OR <type>tsquery</>s together</entry>
7785 <entry><literal>'fat | rat'::tsquery || 'cat'::tsquery</literal></entry>
7786 <entry><literal>( 'fat' | 'rat' ) | 'cat'</literal></entry>
7789 <entry> <literal>!!</literal> </entry>
7790 <entry>negate a <type>tsquery</></entry>
7791 <entry><literal>!! 'cat'::tsquery</literal></entry>
7792 <entry><literal>!'cat'</literal></entry>
7795 <entry> <literal>@></literal> </entry>
7796 <entry><type>tsquery</> contains another ?</entry>
7797 <entry><literal>'cat'::tsquery @> 'cat & rat'::tsquery</literal></entry>
7798 <entry><literal>f</literal></entry>
7801 <entry> <literal><@</literal> </entry>
7802 <entry><type>tsquery</> is contained in ?</entry>
7803 <entry><literal>'cat'::tsquery <@ 'cat & rat'::tsquery</literal></entry>
7804 <entry><literal>t</literal></entry>
7812 The <type>tsquery</> containment operators consider only the lexemes
7813 listed in the two queries, ignoring the combining operators.
7818 In addition to the operators shown in the table, the ordinary B-tree
7819 comparison operators (<literal>=</>, <literal><</>, etc) are defined
7820 for types <type>tsvector</> and <type>tsquery</>. These are not very
7821 useful for text searching but allow, for example, unique indexes to be
7822 built on columns of these types.
7825 <table id="textsearch-functions-table">
7826 <title>Text Search Functions</title>
7830 <entry>Function</entry>
7831 <entry>Return Type</entry>
7832 <entry>Description</entry>
7833 <entry>Example</entry>
7834 <entry>Result</entry>
7839 <entry><literal><function>to_tsvector</function>(<optional> <replaceable class="PARAMETER">config</> <type>regconfig</> , </optional> <replaceable class="PARAMETER">document</> <type>text</type>)</literal></entry>
7840 <entry><type>tsvector</type></entry>
7841 <entry>reduce document text to <type>tsvector</></entry>
7842 <entry><literal>to_tsvector('english', 'The Fat Rats')</literal></entry>
7843 <entry><literal>'fat':2 'rat':3</literal></entry>
7846 <entry><literal><function>length</function>(<type>tsvector</>)</literal></entry>
7847 <entry><type>integer</type></entry>
7848 <entry>number of lexemes in <type>tsvector</></entry>
7849 <entry><literal>length('fat:2,4 cat:3 rat:5A'::tsvector)</literal></entry>
7850 <entry><literal>3</literal></entry>
7853 <entry><literal><function>setweight</function>(<type>tsvector</>, <type>"char"</>)</literal></entry>
7854 <entry><type>tsvector</type></entry>
7855 <entry>assign weight to each element of <type>tsvector</></entry>
7856 <entry><literal>setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A')</literal></entry>
7857 <entry><literal>'cat':3A 'fat':2A,4A 'rat':5A</literal></entry>
7860 <entry><literal><function>strip</function>(<type>tsvector</>)</literal></entry>
7861 <entry><type>tsvector</type></entry>
7862 <entry>remove positions and weights from <type>tsvector</></entry>
7863 <entry><literal>strip('fat:2,4 cat:3 rat:5A'::tsvector)</literal></entry>
7864 <entry><literal>'cat' 'fat' 'rat'</literal></entry>
7867 <entry><literal><function>to_tsquery</function>(<optional> <replaceable class="PARAMETER">config</> <type>regconfig</> , </optional> <replaceable class="PARAMETER">query</> <type>text</type>)</literal></entry>
7868 <entry><type>tsquery</type></entry>
7869 <entry>normalize words and convert to <type>tsquery</></entry>
7870 <entry><literal>to_tsquery('english', 'The & Fat & Rats')</literal></entry>
7871 <entry><literal>'fat' & 'rat'</literal></entry>
7874 <entry><literal><function>plainto_tsquery</function>(<optional> <replaceable class="PARAMETER">config</> <type>regconfig</> , </optional> <replaceable class="PARAMETER">query</> <type>text</type>)</literal></entry>
7875 <entry><type>tsquery</type></entry>
7876 <entry>produce <type>tsquery</> ignoring punctuation</entry>
7877 <entry><literal>plainto_tsquery('english', 'The Fat Rats')</literal></entry>
7878 <entry><literal>'fat' & 'rat'</literal></entry>
7881 <entry><literal><function>numnode</function>(<type>tsquery</>)</literal></entry>
7882 <entry><type>integer</type></entry>
7883 <entry>number of lexemes plus operators in <type>tsquery</></entry>
7884 <entry><literal> numnode('(fat & rat) | cat'::tsquery)</literal></entry>
7885 <entry><literal>5</literal></entry>
7888 <entry><literal><function>querytree</function>(<replaceable class="PARAMETER">query</replaceable> <type>tsquery</>)</literal></entry>
7889 <entry><type>text</type></entry>
7890 <entry>get indexable part of a <type>tsquery</></entry>
7891 <entry><literal>querytree('foo & ! bar'::tsquery)</literal></entry>
7892 <entry><literal>'foo'</literal></entry>
7895 <entry><literal><function>ts_rank</function>(<optional> <replaceable class="PARAMETER">weights</replaceable> <type>float4[]</>, </optional> <replaceable class="PARAMETER">vector</replaceable> <type>tsvector</>, <replaceable class="PARAMETER">query</replaceable> <type>tsquery</> <optional>, <replaceable class="PARAMETER">normalization</replaceable> <type>integer</> </optional>)</literal></entry>
7896 <entry><type>float4</type></entry>
7897 <entry>rank document for query</entry>
7898 <entry><literal>ts_rank(textsearch, query)</literal></entry>
7899 <entry><literal>0.818</literal></entry>
7902 <entry><literal><function>ts_rank_cd</function>(<optional> <replaceable class="PARAMETER">weights</replaceable> <type>float4[]</>, </optional> <replaceable class="PARAMETER">vector</replaceable> <type>tsvector</>, <replaceable class="PARAMETER">query</replaceable> <type>tsquery</> <optional>, <replaceable class="PARAMETER">normalization</replaceable> <type>integer</> </optional>)</literal></entry>
7903 <entry><type>float4</type></entry>
7904 <entry>rank document for query using cover density</entry>
7905 <entry><literal>ts_rank_cd('{0.1, 0.2, 0.4, 1.0}', textsearch, query)</literal></entry>
7906 <entry><literal>2.01317</literal></entry>
7909 <entry><literal><function>ts_headline</function>(<optional> <replaceable class="PARAMETER">config</replaceable> <type>regconfig</>, </optional> <replaceable class="PARAMETER">document</replaceable> <type>text</>, <replaceable class="PARAMETER">query</replaceable> <type>tsquery</> <optional>, <replaceable class="PARAMETER">options</replaceable> <type>text</> </optional>)</literal></entry>
7910 <entry><type>text</type></entry>
7911 <entry>display a query match</entry>
7912 <entry><literal>ts_headline('x y z', 'z'::tsquery)</literal></entry>
7913 <entry><literal>x y <b>z</b></literal></entry>
7916 <entry><literal><function>ts_rewrite</function>(<replaceable class="PARAMETER">query</replaceable> <type>tsquery</>, <replaceable class="PARAMETER">target</replaceable> <type>tsquery</>, <replaceable class="PARAMETER">substitute</replaceable> <type>tsquery</>)</literal></entry>
7917 <entry><type>tsquery</type></entry>
7918 <entry>replace target with substitute within query</entry>
7919 <entry><literal>ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'foo|bar'::tsquery)</literal></entry>
7920 <entry><literal>'b' & ( 'foo' | 'bar' )</literal></entry>
7923 <entry><literal><function>ts_rewrite</function>(<replaceable class="PARAMETER">query</replaceable> <type>tsquery</>, <replaceable class="PARAMETER">select</replaceable> <type>text</>)</literal></entry>
7924 <entry><type>tsquery</type></entry>
7925 <entry>replace using targets and substitutes from a <command>SELECT</> command</entry>
7926 <entry><literal>SELECT ts_rewrite('a & b'::tsquery, 'SELECT t,s FROM aliases')</literal></entry>
7927 <entry><literal>'b' & ( 'foo' | 'bar' )</literal></entry>
7930 <entry><literal><function>get_current_ts_config</function>()</literal></entry>
7931 <entry><type>regconfig</type></entry>
7932 <entry>get default text search configuration</entry>
7933 <entry><literal>get_current_ts_config()</literal></entry>
7934 <entry><literal>english</literal></entry>
7937 <entry><literal><function>tsvector_update_trigger</function>()</literal></entry>
7938 <entry><type>trigger</type></entry>
7939 <entry>trigger function for automatic <type>tsvector</> column update</entry>
7940 <entry><literal>CREATE TRIGGER ... tsvector_update_trigger(tsvcol, 'pg_catalog.swedish', title, body)</literal></entry>
7941 <entry><literal></literal></entry>
7944 <entry><literal><function>tsvector_update_trigger_column</function>()</literal></entry>
7945 <entry><type>trigger</type></entry>
7946 <entry>trigger function for automatic <type>tsvector</> column update</entry>
7947 <entry><literal>CREATE TRIGGER ... tsvector_update_trigger_column(tsvcol, configcol, title, body)</literal></entry>
7948 <entry><literal></literal></entry>
7949 <entry><literal></literal></entry>
7957 All the text search functions that accept an optional <type>regconfig</>
7958 argument will use the configuration specified by
7959 <xref linkend="guc-default-text-search-config">
7960 when that argument is omitted.
7966 <xref linkend="textsearch-functions-debug-table">
7967 are listed separately because they are not usually used in everyday text
7968 searching operations. They are helpful for development and debugging
7969 of new text search configurations.
7972 <table id="textsearch-functions-debug-table">
7973 <title>Text Search Debugging Functions</title>
7977 <entry>Function</entry>
7978 <entry>Return Type</entry>
7979 <entry>Description</entry>
7980 <entry>Example</entry>
7981 <entry>Result</entry>
7986 <entry><literal><function>ts_debug</function>(<optional> <replaceable class="PARAMETER">config</replaceable> <type>regconfig</>, </optional> <replaceable class="PARAMETER">document</replaceable> <type>text</>, OUT <replaceable class="PARAMETER">alias</> <type>text</>, OUT <replaceable class="PARAMETER">description</> <type>text</>, OUT <replaceable class="PARAMETER">token</> <type>text</>, OUT <replaceable class="PARAMETER">dictionaries</> <type>regdictionary[]</>, OUT <replaceable class="PARAMETER">dictionary</> <type>regdictionary</>, OUT <replaceable class="PARAMETER">lexemes</> <type>text[]</>)</literal></entry>
7987 <entry><type>setof record</type></entry>
7988 <entry>test a configuration</entry>
7989 <entry><literal>ts_debug('english', 'The Brightest supernovaes')</literal></entry>
7990 <entry><literal>(asciiword,"Word, all ASCII",The,{english_stem},english_stem,{}) ...</literal></entry>
7993 <entry><literal><function>ts_lexize</function>(<replaceable class="PARAMETER">dict</replaceable> <type>regdictionary</>, <replaceable class="PARAMETER">token</replaceable> <type>text</>)</literal></entry>
7994 <entry><type>text[]</type></entry>
7995 <entry>test a dictionary</entry>
7996 <entry><literal>ts_lexize('english_stem', 'stars')</literal></entry>
7997 <entry><literal>{star}</literal></entry>
8000 <entry><literal><function>ts_parse</function>(<replaceable class="PARAMETER">parser_name</replaceable> <type>text</>, <replaceable class="PARAMETER">document</replaceable> <type>text</>, OUT <replaceable class="PARAMETER">tokid</> <type>integer</>, OUT <replaceable class="PARAMETER">token</> <type>text</>)</literal></entry>
8001 <entry><type>setof record</type></entry>
8002 <entry>test a parser</entry>
8003 <entry><literal>ts_parse('default', 'foo - bar')</literal></entry>
8004 <entry><literal>(1,foo) ...</literal></entry>
8007 <entry><literal><function>ts_parse</function>(<replaceable class="PARAMETER">parser_oid</replaceable> <type>oid</>, <replaceable class="PARAMETER">document</replaceable> <type>text</>, OUT <replaceable class="PARAMETER">tokid</> <type>integer</>, OUT <replaceable class="PARAMETER">token</> <type>text</>)</literal></entry>
8008 <entry><type>setof record</type></entry>
8009 <entry>test a parser</entry>
8010 <entry><literal>ts_parse(3722, 'foo - bar')</literal></entry>
8011 <entry><literal>(1,foo) ...</literal></entry>
8014 <entry><literal><function>ts_token_type</function>(<replaceable class="PARAMETER">parser_name</> <type>text</>, OUT <replaceable class="PARAMETER">tokid</> <type>integer</>, OUT <replaceable class="PARAMETER">alias</> <type>text</>, OUT <replaceable class="PARAMETER">description</> <type>text</>)</literal></entry>
8015 <entry><type>setof record</type></entry>
8016 <entry>get token types defined by parser</entry>
8017 <entry><literal>ts_token_type('default')</literal></entry>
8018 <entry><literal>(1,asciiword,"Word, all ASCII") ...</literal></entry>
8021 <entry><literal><function>ts_token_type</function>(<replaceable class="PARAMETER">parser_oid</> <type>oid</>, OUT <replaceable class="PARAMETER">tokid</> <type>integer</>, OUT <replaceable class="PARAMETER">alias</> <type>text</>, OUT <replaceable class="PARAMETER">description</> <type>text</>)</literal></entry>
8022 <entry><type>setof record</type></entry>
8023 <entry>get token types defined by parser</entry>
8024 <entry><literal>ts_token_type(3722)</literal></entry>
8025 <entry><literal>(1,asciiword,"Word, all ASCII") ...</literal></entry>
8028 <entry><literal><function>ts_stat</function>(<replaceable class="PARAMETER">sqlquery</replaceable> <type>text</>, <optional> <replaceable class="PARAMETER">weights</replaceable> <type>text</>, </optional> OUT <replaceable class="PARAMETER">word</replaceable> <type>text</>, OUT <replaceable class="PARAMETER">ndoc</replaceable> <type>integer</>, OUT <replaceable class="PARAMETER">nentry</replaceable> <type>integer</>)</literal></entry>
8029 <entry><type>setof record</type></entry>
8030 <entry>get statistics of a <type>tsvector</> column</entry>
8031 <entry><literal>ts_stat('SELECT vector from apod')</literal></entry>
8032 <entry><literal>(foo,10,15) ...</literal></entry>
8041 <sect1 id="functions-xml">
8042 <title>XML Functions</title>
8045 The functions and function-like expressions described in this
8046 section operate on values of type <type>xml</type>. Check <xref
8047 linkend="datatype-xml"> for information about the <type>xml</type>
8048 type. The function-like expressions <function>xmlparse</function>
8049 and <function>xmlserialize</function> for converting to and from
8050 type <type>xml</type> are not repeated here. Use of many of these
8051 functions requires the installation to have been built
8052 with <command>configure --with-libxml</>.
8056 <title>Producing XML Content</title>
8059 A set of functions and function-like expressions are available for
8060 producing XML content from SQL data. As such, they are
8061 particularly suitable for formatting query results into XML
8062 documents for processing in client applications.
8066 <title><literal>xmlcomment</literal></title>
8069 <primary>xmlcomment</primary>
8073 <function>xmlcomment</function>(<replaceable>text</replaceable>)
8077 The function <function>xmlcomment</function> creates an XML value
8078 containing an XML comment with the specified text as content.
8079 The text cannot contain <quote><literal>--</literal></quote> or end with a
8080 <quote><literal>-</literal></quote> so that the resulting construct is a valid
8081 XML comment. If the argument is null, the result is null.
8087 SELECT xmlcomment('hello');
8097 <title><literal>xmlconcat</literal></title>
8100 <primary>xmlconcat</primary>
8104 <function>xmlconcat</function>(<replaceable>xml</replaceable><optional>, ...</optional>)
8108 The function <function>xmlconcat</function> concatenates a list
8109 of individual XML values to create a single value containing an
8110 XML content fragment. Null values are omitted; the result is
8111 only null if there are no nonnull arguments.
8117 SELECT xmlconcat('<abc/>', '<bar>foo</bar>');
8120 ----------------------
8121 <abc/><bar>foo</bar>
8126 XML declarations, if present, are combined as follows. If all
8127 argument values have the same XML version declaration, that
8128 version is used in the result, else no version is used. If all
8129 argument values have the standalone declaration value
8130 <quote>yes</quote>, then that value is used in the result. If
8131 all argument values have a standalone declaration value and at
8132 least one is <quote>no</quote>, then that is used in the result.
8133 Else the result will have no standalone declaration. If the
8134 result is determined to require a standalone declaration but no
8135 version declaration, a version declaration with version 1.0 will
8136 be used because XML requires an XML declaration to contain a
8137 version declaration. Encoding declarations are ignored and
8138 removed in all cases.
8144 SELECT xmlconcat('<?xml version="1.1"?><foo/>', '<?xml version="1.1" standalone="no"?><bar/>');
8147 -----------------------------------
8148 <?xml version="1.1"?><foo/><bar/>
8154 <title><literal>xmlelement</literal></title>
8157 <primary>xmlelement</primary>
8161 <function>xmlelement</function>(name <replaceable>name</replaceable> <optional>, xmlattributes(<replaceable>value</replaceable> <optional>AS <replaceable>attname</replaceable></optional> <optional>, ... </optional>)</optional> <optional><replaceable>, content, ...</replaceable></optional>)
8165 The <function>xmlelement</function> expression produces an XML
8166 element with the given name, attributes, and content.
8172 SELECT xmlelement(name foo);
8178 SELECT xmlelement(name foo, xmlattributes('xyz' as bar));
8184 SELECT xmlelement(name foo, xmlattributes(current_date as bar), 'cont', 'ent');
8187 -------------------------------------
8188 <foo bar="2007-01-26">content</foo>
8193 Element and attribute names that are not valid XML names are
8194 escaped by replacing the offending characters by the sequence
8195 <literal>_x<replaceable>HHHH</replaceable>_</literal>, where
8196 <replaceable>HHHH</replaceable> is the character's Unicode
8197 codepoint in hexadecimal notation. For example:
8199 SELECT xmlelement(name "foo$bar", xmlattributes('xyz' as "a&b"));
8202 ----------------------------------
8203 <foo_x0024_bar a_x0026_b="xyz"/>
8208 An explicit attribute name need not be specified if the attribute
8209 value is a column reference, in which case the column's name will
8210 be used as the attribute name by default. In other cases, the
8211 attribute must be given an explicit name. So this example is
8214 CREATE TABLE test (a xml, b xml);
8215 SELECT xmlelement(name test, xmlattributes(a, b)) FROM test;
8219 SELECT xmlelement(name test, xmlattributes('constant'), a, b) FROM test;
8220 SELECT xmlelement(name test, xmlattributes(func(a, b))) FROM test;
8225 Element content, if specified, will be formatted according to
8226 the data type. If the content is itself of type <type>xml</type>,
8227 complex XML documents can be constructed. For example:
8229 SELECT xmlelement(name foo, xmlattributes('xyz' as bar),
8230 xmlelement(name abc),
8232 xmlelement(name xyz));
8235 ----------------------------------------------
8236 <foo bar="xyz"><abc/><!--test--><xyz/></foo>
8239 Content of other types will be formatted into valid XML character
8240 data. This means in particular that the characters <, >,
8241 and & will be converted to entities. Binary data (data type
8242 <type>bytea</type>) will be represented in base64 or hex
8243 encoding, depending on the setting of the configuration parameter
8244 <xref linkend="guc-xmlbinary">. The particular behavior for
8245 individual data types is expected to evolve in order to align the
8246 SQL and PostgreSQL data types with the XML Schema specification,
8247 at which point a more precise description will appear.
8252 <title><literal>xmlforest</literal></title>
8255 <primary>xmlforest</primary>
8259 <function>xmlforest</function>(<replaceable>content</replaceable> <optional>AS <replaceable>name</replaceable></optional> <optional>, ...</optional>)
8263 The <function>xmlforest</function> expression produces an XML
8264 forest (sequence) of elements using the given names and content.
8270 SELECT xmlforest('abc' AS foo, 123 AS bar);
8273 ------------------------------
8274 <foo>abc</foo><bar>123</bar>
8277 SELECT xmlforest(table_name, column_name)
8278 FROM information_schema.columns
8279 WHERE table_schema = 'pg_catalog';
8282 -------------------------------------------------------------------------------------------
8283 <table_name>pg_authid</table_name><column_name>rolname</column_name>
8284 <table_name>pg_authid</table_name><column_name>rolsuper</column_name>
8288 As seen in the second example, the element name can be omitted if
8289 the content value is a column reference, in which case the column
8290 name is used by default. Otherwise, a name must be specified.
8294 Element names that are not valid XML names are escaped as shown
8295 for <function>xmlelement</function> above. Similarly, content
8296 data is escaped to make valid XML content, unless it is already
8297 of type <type>xml</type>.
8301 Note that XML forests are not valid XML documents if they consist
8302 of more than one element, so it might be useful to wrap
8303 <function>xmlforest</function> expressions in
8304 <function>xmlelement</function>.
8309 <title><literal>xmlpi</literal></title>
8312 <primary>xmlpi</primary>
8316 <function>xmlpi</function>(name <replaceable>target</replaceable> <optional>, <replaceable>content</replaceable></optional>)
8320 The <function>xmlpi</function> expression creates an XML
8321 processing instruction. The content, if present, must not
8322 contain the character sequence <literal>?></literal>.
8328 SELECT xmlpi(name php, 'echo "hello world";');
8331 -----------------------------
8332 <?php echo "hello world";?>
8338 <title><literal>xmlroot</literal></title>
8341 <primary>xmlroot</primary>
8345 <function>xmlroot</function>(<replaceable>xml</replaceable>, version <replaceable>text</replaceable> | no value <optional>, standalone yes|no|no value</optional>)
8349 The <function>xmlroot</function> expression alters the properties
8350 of the root node of an XML value. If a version is specified,
8351 this replaces the value in the version declaration; if a
8352 standalone value is specified, this replaces the value in the
8353 standalone declaration.
8358 SELECT xmlroot(xmlparse(document '<?xml version="1.1"?><content>abc</content>'),
8359 version '1.0', standalone yes);
8362 ----------------------------------------
8363 <?xml version="1.0" standalone="yes"?>
8364 <content>abc</content>
8369 <sect3 id="functions-xml-xmlagg">
8370 <title><literal>xmlagg</literal></title>
8373 <primary>xmlagg</primary>
8377 <function>xmlagg</function>(<replaceable>xml</replaceable>)
8381 The function <function>xmlagg</function> is, unlike the other
8382 functions described here, an aggregate function. It concatenates the
8383 input values to the aggregate function call,
8384 like <function>xmlconcat</function> does.
8385 See <xref linkend="functions-aggregate"> for additional information
8386 about aggregate functions.
8392 CREATE TABLE test (y int, x xml);
8393 INSERT INTO test VALUES (1, '<foo>abc</foo>');
8394 INSERT INTO test VALUES (2, '<bar/>');
8395 SELECT xmlagg(x) FROM test;
8397 ----------------------
8398 <foo>abc</foo><bar/>
8403 To determine the order of the concatenation, something like the
8404 following approach can be used:
8407 SELECT xmlagg(x) FROM (SELECT * FROM test ORDER BY y DESC) AS tab;
8409 ----------------------
8410 <bar/><foo>abc</foo>
8413 Again, see <xref linkend="functions-aggregate"> for additional
8419 <title>XML Predicates</title>
8422 <primary>IS DOCUMENT</primary>
8426 <replaceable>xml</replaceable> IS DOCUMENT
8430 The expression <literal>IS DOCUMENT</literal> returns true if the
8431 argument XML value is a proper XML document, false if it is not
8432 (that is, it is a content fragment), or null if the argument is
8433 null. See <xref linkend="datatype-xml"> about the difference
8434 between documents and content fragments.
8439 <sect2 id="functions-xml-processing">
8440 <title>Processing XML</title>
8443 <primary>XPath</primary>
8447 To process values of data type <type>xml</type>, PostgreSQL offers
8448 the function <function>xpath</function>, which evaluates XPath 1.0
8453 <function>xpath</function>(<replaceable>xpath</replaceable>, <replaceable>xml</replaceable><optional>, <replaceable>nsarray</replaceable></optional>)
8457 The function <function>xpath</function> evaluates the XPath
8458 expression <replaceable>xpath</replaceable> against the XML value
8459 <replaceable>xml</replaceable>. It returns an array of XML values
8460 corresponding to the node set produced by the XPath expression.
8464 The second argument must be a well formed XML document. In particular,
8465 it must have a single root node element.
8469 The third argument of the function is an array of namespace
8470 mappings. This array should be a two-dimensional array with the
8471 length of the second axis being equal to 2 (i.e., it should be an
8472 array of arrays, each of which consists of exactly 2 elements).
8473 The first element of each array entry is the namespace name, the
8474 second the namespace URI.
8480 SELECT xpath('/my:a/text()', '<my:a xmlns:my="http://example.com">test</my:a>',
8481 ARRAY[ARRAY['my', 'http://example.com']]);
8491 <sect2 id="functions-xml-mapping">
8492 <title>Mapping Tables to XML</title>
8494 <indexterm zone="functions-xml-mapping">
8495 <primary>XML export</primary>
8499 The following functions map the contents of relational tables to
8500 XML values. They can be thought of as XML export functionality:
8502 table_to_xml(tbl regclass, nulls boolean, tableforest boolean, targetns text)
8503 query_to_xml(query text, nulls boolean, tableforest boolean, targetns text)
8504 cursor_to_xml(cursor refcursor, count int, nulls boolean,
8505 tableforest boolean, targetns text)
8507 The return type of each function is <type>xml</type>.
8511 <function>table_to_xml</function> maps the content of the named
8512 table, passed as parameter <parameter>tbl</parameter>. The
8513 <type>regclass</type> type accepts strings identifying tables using the
8514 usual notation, including optional schema qualifications and
8515 double quotes. <function>query_to_xml</function> executes the
8516 query whose text is passed as parameter
8517 <parameter>query</parameter> and maps the result set.
8518 <function>cursor_to_xml</function> fetches the indicated number of
8519 rows from the cursor specified by the parameter
8520 <parameter>cursor</parameter>. This variant is recommended if
8521 large tables have to be mapped, because the result value is built
8522 up in memory by each function.
8526 If <parameter>tableforest</parameter> is false, then the resulting
8527 XML document looks like this:
8531 <columnname1>data</columnname1>
8532 <columnname2>data</columnname2>
8543 If <parameter>tableforest</parameter> is true, the result is an
8544 XML content fragment that looks like this:
8547 <columnname1>data</columnname1>
8548 <columnname2>data</columnname2>
8558 If no table name is available, that is, when mapping a query or a
8559 cursor, the string <literal>table</literal> is used in the first
8560 format, <literal>row</literal> in the second format.
8564 The choice between these formats is up to the user. The first
8565 format is a proper XML document, which will be important in many
8566 applications. The second format tends to be more useful in the
8567 <function>cursor_to_xml</function> function if the result values are to be
8568 reassembled into one document later on. The functions for
8569 producing XML content discussed above, in particular
8570 <function>xmlelement</function>, can be used to alter the results
8575 The data values are mapped in the same way as described for the
8576 function <function>xmlelement</function> above.
8580 The parameter <parameter>nulls</parameter> determines whether null
8581 values should be included in the output. If true, null values in
8582 columns are represented as:
8584 <columnname xsi:nil="true"/>
8586 where <literal>xsi</literal> is the XML namespace prefix for XML
8587 Schema Instance. An appropriate namespace declaration will be
8588 added to the result value. If false, columns containing null
8589 values are simply omitted from the output.
8593 The parameter <parameter>targetns</parameter> specifies the
8594 desired XML namespace of the result. If no particular namespace
8595 is wanted, an empty string should be passed.
8599 The following functions return XML Schema documents describing the
8600 mappings performed by the corresponding functions above:
8602 table_to_xmlschema(tbl regclass, nulls boolean, tableforest boolean, targetns text)
8603 query_to_xmlschema(query text, nulls boolean, tableforest boolean, targetns text)
8604 cursor_to_xmlschema(cursor refcursor, nulls boolean, tableforest boolean, targetns text)
8606 It is essential that the same parameters are passed in order to
8607 obtain matching XML data mappings and XML Schema documents.
8611 The following functions produce XML data mappings and the
8612 corresponding XML Schema in one document (or forest), linked
8613 together. They can be useful where self-contained and
8614 self-describing results are wanted:
8616 table_to_xml_and_xmlschema(tbl regclass, nulls boolean, tableforest boolean, targetns text)
8617 query_to_xml_and_xmlschema(query text, nulls boolean, tableforest boolean, targetns text)
8622 In addition, the following functions are available to produce
8623 analogous mappings of entire schemas or the entire current
8626 schema_to_xml(schema name, nulls boolean, tableforest boolean, targetns text)
8627 schema_to_xmlschema(schema name, nulls boolean, tableforest boolean, targetns text)
8628 schema_to_xml_and_xmlschema(schema name, nulls boolean, tableforest boolean, targetns text)
8630 database_to_xml(nulls boolean, tableforest boolean, targetns text)
8631 database_to_xmlschema(nulls boolean, tableforest boolean, targetns text)
8632 database_to_xml_and_xmlschema(nulls boolean, tableforest boolean, targetns text)
8635 Note that these potentially produce a lot of data, which needs to
8636 be built up in memory. When requesting content mappings of large
8637 schemas or databases, it might be worthwhile to consider mapping the
8638 tables separately instead, possibly even through a cursor.
8642 The result of a schema content mapping looks like this:
8653 </schemaname>]]></screen>
8655 where the format of a table mapping depends on the
8656 <parameter>tableforest</parameter> parameter as explained above.
8660 The result of a database content mapping looks like this:
8675 </dbname>]]></screen>
8677 where the schema mapping is as above.
8681 As an example of using the output produced by these functions,
8682 <xref linkend="xslt-xml-html"> shows an XSLT stylesheet that
8683 converts the output of
8684 <function>table_to_xml_and_xmlschema</function> to an HTML
8685 document containing a tabular rendition of the table data. In a
8686 similar manner, the results from these functions can be
8687 converted into other XML-based formats.
8690 <figure id="xslt-xml-html">
8691 <title>XSLT stylesheet for converting SQL/XML output to HTML</title>
8692 <programlisting><![CDATA[
8693 <?xml version="1.0"?>
8694 <xsl:stylesheet version="1.0"
8695 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
8696 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
8697 xmlns="http://www.w3.org/1999/xhtml"
8700 <xsl:output method="xml"
8701 doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
8702 doctype-public="-//W3C/DTD XHTML 1.0 Strict//EN"
8705 <xsl:template match="/*">
8706 <xsl:variable name="schema" select="//xsd:schema"/>
8707 <xsl:variable name="tabletypename"
8708 select="$schema/xsd:element[@name=name(current())]/@type"/>
8709 <xsl:variable name="rowtypename"
8710 select="$schema/xsd:complexType[@name=$tabletypename]/xsd:sequence/xsd:element[@name='row']/@type"/>
8714 <title><xsl:value-of select="name(current())"/></title>
8719 <xsl:for-each select="$schema/xsd:complexType[@name=$rowtypename]/xsd:sequence/xsd:element/@name">
8720 <th><xsl:value-of select="."/></th>
8724 <xsl:for-each select="row">
8726 <xsl:for-each select="*">
8727 <td><xsl:value-of select="."/></td>
8737 ]]></programlisting>
8743 <sect1 id="functions-sequence">
8744 <title>Sequence Manipulation Functions</title>
8747 <primary>sequence</primary>
8750 <primary>nextval</primary>
8753 <primary>currval</primary>
8756 <primary>lastval</primary>
8759 <primary>setval</primary>
8763 This section describes <productname>PostgreSQL</productname>'s
8764 functions for operating on <firstterm>sequence objects</firstterm>.
8765 Sequence objects (also called sequence generators or just
8766 sequences) are special single-row tables created with <xref
8767 linkend="sql-createsequence" endterm="sql-createsequence-title">.
8768 A sequence object is usually used to generate unique identifiers
8769 for rows of a table. The sequence functions, listed in <xref
8770 linkend="functions-sequence-table">, provide simple, multiuser-safe
8771 methods for obtaining successive sequence values from sequence
8775 <table id="functions-sequence-table">
8776 <title>Sequence Functions</title>
8779 <row><entry>Function</entry> <entry>Return Type</entry> <entry>Description</entry></row>
8784 <entry><literal><function>currval</function>(<type>regclass</type>)</literal></entry>
8785 <entry><type>bigint</type></entry>
8786 <entry>Return value most recently obtained with
8787 <function>nextval</function> for specified sequence</entry>
8790 <entry><literal><function>lastval</function>()</literal></entry>
8791 <entry><type>bigint</type></entry>
8792 <entry>Return value most recently obtained with
8793 <function>nextval</function> for any sequence</entry>
8796 <entry><literal><function>nextval</function>(<type>regclass</type>)</literal></entry>
8797 <entry><type>bigint</type></entry>
8798 <entry>Advance sequence and return new value</entry>
8801 <entry><literal><function>setval</function>(<type>regclass</type>, <type>bigint</type>)</literal></entry>
8802 <entry><type>bigint</type></entry>
8803 <entry>Set sequence's current value</entry>
8806 <entry><literal><function>setval</function>(<type>regclass</type>, <type>bigint</type>, <type>boolean</type>)</literal></entry>
8807 <entry><type>bigint</type></entry>
8808 <entry>Set sequence's current value and <literal>is_called</literal> flag</entry>
8815 The sequence to be operated on by a sequence function is specified by
8816 a <type>regclass</> argument, which is simply the OID of the sequence in the
8817 <structname>pg_class</> system catalog. You do not have to look up the
8818 OID by hand, however, since the <type>regclass</> data type's input
8819 converter will do the work for you. Just write the sequence name enclosed
8820 in single quotes so that it looks like a literal constant. For
8821 compatibility with the handling of ordinary
8822 <acronym>SQL</acronym> names, the string will be converted to lowercase
8823 unless it contains double quotes around the sequence name. Thus:
8825 nextval('foo') <lineannotation>operates on sequence <literal>foo</literal></>
8826 nextval('FOO') <lineannotation>operates on sequence <literal>foo</literal></>
8827 nextval('"Foo"') <lineannotation>operates on sequence <literal>Foo</literal></>
8829 The sequence name can be schema-qualified if necessary:
8831 nextval('myschema.foo') <lineannotation>operates on <literal>myschema.foo</literal></>
8832 nextval('"myschema".foo') <lineannotation>same as above</lineannotation>
8833 nextval('foo') <lineannotation>searches search path for <literal>foo</literal></>
8835 See <xref linkend="datatype-oid"> for more information about
8841 Before <productname>PostgreSQL</productname> 8.1, the arguments of the
8842 sequence functions were of type <type>text</>, not <type>regclass</>, and
8843 the above-described conversion from a text string to an OID value would
8844 happen at run time during each call. For backwards compatibility, this
8845 facility still exists, but internally it is now handled as an implicit
8846 coercion from <type>text</> to <type>regclass</> before the function is
8851 When you write the argument of a sequence function as an unadorned
8852 literal string, it becomes a constant of type <type>regclass</>.
8853 Since this is really just an OID, it will track the originally
8854 identified sequence despite later renaming, schema reassignment,
8855 etc. This <quote>early binding</> behavior is usually desirable for
8856 sequence references in column defaults and views. But sometimes you might
8857 want <quote>late binding</> where the sequence reference is resolved
8858 at run time. To get late-binding behavior, force the constant to be
8859 stored as a <type>text</> constant instead of <type>regclass</>:
8861 nextval('foo'::text) <lineannotation><literal>foo</literal> is looked up at runtime</>
8863 Note that late binding was the only behavior supported in
8864 <productname>PostgreSQL</productname> releases before 8.1, so you
8865 might need to do this to preserve the semantics of old applications.
8869 Of course, the argument of a sequence function can be an expression
8870 as well as a constant. If it is a text expression then the implicit
8871 coercion will result in a run-time lookup.
8876 The available sequence functions are:
8880 <term><function>nextval</function></term>
8883 Advance the sequence object to its next value and return that
8884 value. This is done atomically: even if multiple sessions
8885 execute <function>nextval</function> concurrently, each will safely receive
8886 a distinct sequence value.
8892 <term><function>currval</function></term>
8895 Return the value most recently obtained by <function>nextval</function>
8896 for this sequence in the current session. (An error is
8897 reported if <function>nextval</function> has never been called for this
8898 sequence in this session.) Because this is returning
8899 a session-local value, it gives a predictable answer whether or not
8900 other sessions have executed <function>nextval</function> since the
8901 current session did.
8907 <term><function>lastval</function></term>
8910 Return the value most recently returned by
8911 <function>nextval</> in the current session. This function is
8912 identical to <function>currval</function>, except that instead
8913 of taking the sequence name as an argument it fetches the
8914 value of the last sequence used by <function>nextval</function>
8915 in the current session. It is an error to call
8916 <function>lastval</function> if <function>nextval</function>
8917 has not yet been called in the current session.
8923 <term><function>setval</function></term>
8926 Reset the sequence object's counter value. The two-parameter
8927 form sets the sequence's <literal>last_value</literal> field to the
8928 specified value and sets its <literal>is_called</literal> field to
8929 <literal>true</literal>, meaning that the next
8930 <function>nextval</function> will advance the sequence before
8931 returning a value. The value reported by <function>currval</> is
8932 also set to the specified value. In the three-parameter form,
8933 <literal>is_called</literal> can be set to either <literal>true</literal>
8934 or <literal>false</literal>. <literal>true</> has the same effect as
8935 the two-parameter form. If it is set to <literal>false</literal>, the
8936 next <function>nextval</function> will return exactly the specified
8937 value, and sequence advancement commences with the following
8938 <function>nextval</function>. Furthermore, the value reported by
8939 <function>currval</> is not changed in this case (this is a change
8940 from pre-8.3 behavior). For example,
8943 SELECT setval('foo', 42); <lineannotation>Next <function>nextval</> will return 43</lineannotation>
8944 SELECT setval('foo', 42, true); <lineannotation>Same as above</lineannotation>
8945 SELECT setval('foo', 42, false); <lineannotation>Next <function>nextval</> will return 42</lineannotation>
8948 The result returned by <function>setval</function> is just the value of its
8957 If a sequence object has been created with default parameters,
8958 <function>nextval</function> will return successive values
8959 beginning with 1. Other behaviors can be obtained by using
8960 special parameters in the <xref linkend="sql-createsequence" endterm="sql-createsequence-title"> command;
8961 see its command reference page for more information.
8966 To avoid blocking concurrent transactions that obtain numbers from the
8967 same sequence, a <function>nextval</function> operation is never rolled back;
8968 that is, once a value has been fetched it is considered used, even if the
8969 transaction that did the <function>nextval</function> later aborts. This means
8970 that aborted transactions might leave unused <quote>holes</quote> in the
8971 sequence of assigned values. <function>setval</function> operations are never
8972 rolled back, either.
8979 <sect1 id="functions-conditional">
8980 <title>Conditional Expressions</title>
8983 <primary>CASE</primary>
8987 <primary>conditional expression</primary>
8991 This section describes the <acronym>SQL</acronym>-compliant conditional expressions
8992 available in <productname>PostgreSQL</productname>.
8997 If your needs go beyond the capabilities of these conditional
8998 expressions, you might want to consider writing a stored procedure
8999 in a more expressive programming language.
9004 <title><literal>CASE</></title>
9007 The <acronym>SQL</acronym> <token>CASE</token> expression is a
9008 generic conditional expression, similar to if/else statements in
9009 other programming languages:
9012 CASE WHEN <replaceable>condition</replaceable> THEN <replaceable>result</replaceable>
9013 <optional>WHEN ...</optional>
9014 <optional>ELSE <replaceable>result</replaceable></optional>
9018 <token>CASE</token> clauses can be used wherever
9019 an expression is valid. <replaceable>condition</replaceable> is an
9020 expression that returns a <type>boolean</type> result. If the result is true
9021 the value of the <token>CASE</token> expression is the
9022 <replaceable>result</replaceable> that follows the condition. If the result is false
9023 subsequent <token>WHEN</token> clauses are searched in the same
9024 manner. If no <token>WHEN</token>
9025 <replaceable>condition</replaceable> is true then the value of the
9026 case expression is the <replaceable>result</replaceable> of the
9027 <token>ELSE</token> clause. If the <token>ELSE</token> clause is
9028 omitted and no condition matches, the result is null.
9044 CASE WHEN a=1 THEN 'one'
9059 The data types of all the <replaceable>result</replaceable>
9060 expressions must be convertible to a single output type.
9061 See <xref linkend="typeconv-union-case"> for more details.
9065 The following <token>CASE</token> expression is a
9066 variant of the general form above:
9069 CASE <replaceable>expression</replaceable>
9070 WHEN <replaceable>value</replaceable> THEN <replaceable>result</replaceable>
9071 <optional>WHEN ...</optional>
9072 <optional>ELSE <replaceable>result</replaceable></optional>
9077 <replaceable>expression</replaceable> is computed and compared to
9078 all the <replaceable>value</replaceable>s in the
9079 <token>WHEN</token> clauses until one is found that is equal. If
9080 no match is found, the <replaceable>result</replaceable> of the
9081 <token>ELSE</token> clause (or a null value) is returned. This is similar
9082 to the <function>switch</function> statement in C.
9086 The example above can be written using the simple
9087 <token>CASE</token> syntax:
9090 CASE a WHEN 1 THEN 'one'
9105 A <token>CASE</token> expression evaluates any subexpressions
9106 that are needed to determine the result. For example, this is a
9107 possible way of avoiding a division-by-zero failure:
9109 SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;
9115 <title><literal>COALESCE</></title>
9118 <primary>COALESCE</primary>
9122 <primary>NVL</primary>
9126 <primary>IFNULL</primary>
9130 <function>COALESCE</function>(<replaceable>value</replaceable> <optional>, ...</optional>)
9134 The <function>COALESCE</function> function returns the first of its
9135 arguments that is not null. Null is returned only if all arguments
9136 are null. It is often used to substitute a default value for
9137 null values when data is retrieved for display, for example:
9139 SELECT COALESCE(description, short_description, '(none)') ...
9144 Like a <token>CASE</token> expression, <function>COALESCE</function> only
9145 evaluates arguments that are needed to determine the result;
9146 that is, arguments to the right of the first non-null argument are
9147 not evaluated. This SQL-standard function provides capabilities similar
9148 to <function>NVL</> and <function>IFNULL</>, which are used in some other
9154 <title><literal>NULLIF</></title>
9157 <primary>NULLIF</primary>
9161 <function>NULLIF</function>(<replaceable>value1</replaceable>, <replaceable>value2</replaceable>)
9165 The <function>NULLIF</function> function returns a null value if
9166 <replaceable>value1</replaceable> equals <replaceable>value2</replaceable>;
9167 otherwise it returns <replaceable>value1</replaceable>.
9168 This can be used to perform the inverse operation of the
9169 <function>COALESCE</function> example given above:
9171 SELECT NULLIF(value, '(none)') ...
9175 If <replaceable>value1</replaceable> is <literal>(none)</>, return a null,
9176 otherwise return <replaceable>value1</replaceable>.
9182 <title><literal>GREATEST</literal> and <literal>LEAST</literal></title>
9185 <primary>GREATEST</primary>
9188 <primary>LEAST</primary>
9192 <function>GREATEST</function>(<replaceable>value</replaceable> <optional>, ...</optional>)
9195 <function>LEAST</function>(<replaceable>value</replaceable> <optional>, ...</optional>)
9199 The <function>GREATEST</> and <function>LEAST</> functions select the
9200 largest or smallest value from a list of any number of expressions.
9201 The expressions must all be convertible to a common data type, which
9202 will be the type of the result
9203 (see <xref linkend="typeconv-union-case"> for details). NULL values
9204 in the list are ignored. The result will be NULL only if all the
9205 expressions evaluate to NULL.
9209 Note that <function>GREATEST</> and <function>LEAST</> are not in
9210 the SQL standard, but are a common extension. Some other databases
9211 make them return NULL if any argument is NULL, rather than only when
9217 <sect1 id="functions-array">
9218 <title>Array Functions and Operators</title>
9221 <xref linkend="array-operators-table"> shows the operators
9222 available for array types.
9225 <table id="array-operators-table">
9226 <title>Array Operators</title>
9230 <entry>Operator</entry>
9231 <entry>Description</entry>
9232 <entry>Example</entry>
9233 <entry>Result</entry>
9238 <entry> <literal>=</literal> </entry>
9239 <entry>equal</entry>
9240 <entry><literal>ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3]</literal></entry>
9241 <entry><literal>t</literal></entry>
9245 <entry> <literal><></literal> </entry>
9246 <entry>not equal</entry>
9247 <entry><literal>ARRAY[1,2,3] <> ARRAY[1,2,4]</literal></entry>
9248 <entry><literal>t</literal></entry>
9252 <entry> <literal><</literal> </entry>
9253 <entry>less than</entry>
9254 <entry><literal>ARRAY[1,2,3] < ARRAY[1,2,4]</literal></entry>
9255 <entry><literal>t</literal></entry>
9259 <entry> <literal>></literal> </entry>
9260 <entry>greater than</entry>
9261 <entry><literal>ARRAY[1,4,3] > ARRAY[1,2,4]</literal></entry>
9262 <entry><literal>t</literal></entry>
9266 <entry> <literal><=</literal> </entry>
9267 <entry>less than or equal</entry>
9268 <entry><literal>ARRAY[1,2,3] <= ARRAY[1,2,3]</literal></entry>
9269 <entry><literal>t</literal></entry>
9273 <entry> <literal>>=</literal> </entry>
9274 <entry>greater than or equal</entry>
9275 <entry><literal>ARRAY[1,4,3] >= ARRAY[1,4,3]</literal></entry>
9276 <entry><literal>t</literal></entry>
9280 <entry> <literal>@></literal> </entry>
9281 <entry>contains</entry>
9282 <entry><literal>ARRAY[1,4,3] @> ARRAY[3,1]</literal></entry>
9283 <entry><literal>t</literal></entry>
9287 <entry> <literal><@</literal> </entry>
9288 <entry>is contained by</entry>
9289 <entry><literal>ARRAY[2,7] <@ ARRAY[1,7,4,2,6]</literal></entry>
9290 <entry><literal>t</literal></entry>
9294 <entry> <literal>&&</literal> </entry>
9295 <entry>overlap (have elements in common)</entry>
9296 <entry><literal>ARRAY[1,4,3] && ARRAY[2,1]</literal></entry>
9297 <entry><literal>t</literal></entry>
9301 <entry> <literal>||</literal> </entry>
9302 <entry>array-to-array concatenation</entry>
9303 <entry><literal>ARRAY[1,2,3] || ARRAY[4,5,6]</literal></entry>
9304 <entry><literal>{1,2,3,4,5,6}</literal></entry>
9308 <entry> <literal>||</literal> </entry>
9309 <entry>array-to-array concatenation</entry>
9310 <entry><literal>ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]]</literal></entry>
9311 <entry><literal>{{1,2,3},{4,5,6},{7,8,9}}</literal></entry>
9315 <entry> <literal>||</literal> </entry>
9316 <entry>element-to-array concatenation</entry>
9317 <entry><literal>3 || ARRAY[4,5,6]</literal></entry>
9318 <entry><literal>{3,4,5,6}</literal></entry>
9322 <entry> <literal>||</literal> </entry>
9323 <entry>array-to-element concatenation</entry>
9324 <entry><literal>ARRAY[4,5,6] || 7</literal></entry>
9325 <entry><literal>{4,5,6,7}</literal></entry>
9332 Array comparisons compare the array contents element-by-element,
9333 using the default B-Tree comparison function for the element data type.
9334 In multidimensional arrays the elements are visited in row-major order
9335 (last subscript varies most rapidly).
9336 If the contents of two arrays are equal but the dimensionality is
9337 different, the first difference in the dimensionality information
9338 determines the sort order. (This is a change from versions of
9339 <productname>PostgreSQL</> prior to 8.2: older versions would claim
9340 that two arrays with the same contents were equal, even if the
9341 number of dimensions or subscript ranges were different.)
9345 See <xref linkend="arrays"> for more details about array operator
9350 <xref linkend="array-functions-table"> shows the functions
9351 available for use with array types. See <xref linkend="arrays">
9352 for more information and examples of the use of these functions.
9356 <primary>array_append</primary>
9359 <primary>array_cat</primary>
9362 <primary>array_ndims</primary>
9365 <primary>array_dims</primary>
9368 <primary>array_fill</primary>
9371 <primary>array_length</primary>
9374 <primary>array_lower</primary>
9377 <primary>array_prepend</primary>
9380 <primary>array_to_string</primary>
9383 <primary>array_upper</primary>
9386 <primary>string_to_array</primary>
9389 <primary>unnest</primary>
9392 <table id="array-functions-table">
9393 <title>Array Functions</title>
9397 <entry>Function</entry>
9398 <entry>Return Type</entry>
9399 <entry>Description</entry>
9400 <entry>Example</entry>
9401 <entry>Result</entry>
9408 <function>array_append</function>(<type>anyarray</type>, <type>anyelement</type>)
9411 <entry><type>anyarray</type></entry>
9412 <entry>append an element to the end of an array</entry>
9413 <entry><literal>array_append(ARRAY[1,2], 3)</literal></entry>
9414 <entry><literal>{1,2,3}</literal></entry>
9419 <function>array_cat</function>(<type>anyarray</type>, <type>anyarray</type>)
9422 <entry><type>anyarray</type></entry>
9423 <entry>concatenate two arrays</entry>
9424 <entry><literal>array_cat(ARRAY[1,2,3], ARRAY[4,5])</literal></entry>
9425 <entry><literal>{1,2,3,4,5}</literal></entry>
9430 <function>array_ndims</function>(<type>anyarray</type>)
9433 <entry><type>int</type></entry>
9434 <entry>returns the number of dimensions of the array</entry>
9435 <entry><literal>array_ndims(ARRAY[[1,2,3], [4,5,6]])</literal></entry>
9436 <entry><literal>2</literal></entry>
9441 <function>array_dims</function>(<type>anyarray</type>)
9444 <entry><type>text</type></entry>
9445 <entry>returns a text representation of array's dimensions</entry>
9446 <entry><literal>array_dims(ARRAY[[1,2,3], [4,5,6]])</literal></entry>
9447 <entry><literal>[1:2][1:3]</literal></entry>
9452 <function>array_fill</function>(<type>anyelement</type>, <type>int[]</type>,
9453 <optional>, <type>int[]</type></optional>)
9456 <entry><type>anyarray</type></entry>
9457 <entry>returns an array initialized with supplied value and
9458 dimensions, optionally with lower bounds other than 1</entry>
9459 <entry><literal>array_fill(7, ARRAY[3], ARRAY[2])</literal></entry>
9460 <entry><literal>[2:4]={7,7,7}</literal></entry>
9465 <function>array_length</function>(<type>anyarray</type>, <type>int</type>)
9468 <entry><type>int</type></entry>
9469 <entry>returns the length of the requested array dimension</entry>
9470 <entry><literal>array_length(array[1,2,3], 1)</literal></entry>
9471 <entry><literal>3</literal></entry>
9476 <function>array_lower</function>(<type>anyarray</type>, <type>int</type>)
9479 <entry><type>int</type></entry>
9480 <entry>returns lower bound of the requested array dimension</entry>
9481 <entry><literal>array_lower('[0:2]={1,2,3}'::int[], 1)</literal></entry>
9482 <entry><literal>0</literal></entry>
9487 <function>array_prepend</function>(<type>anyelement</type>, <type>anyarray</type>)
9490 <entry><type>anyarray</type></entry>
9491 <entry>append an element to the beginning of an array</entry>
9492 <entry><literal>array_prepend(1, ARRAY[2,3])</literal></entry>
9493 <entry><literal>{1,2,3}</literal></entry>
9498 <function>array_to_string</function>(<type>anyarray</type>, <type>text</type>)
9501 <entry><type>text</type></entry>
9502 <entry>concatenates array elements using supplied delimiter</entry>
9503 <entry><literal>array_to_string(ARRAY[1, 2, 3], '~^~')</literal></entry>
9504 <entry><literal>1~^~2~^~3</literal></entry>
9509 <function>array_upper</function>(<type>anyarray</type>, <type>int</type>)
9512 <entry><type>int</type></entry>
9513 <entry>returns upper bound of the requested array dimension</entry>
9514 <entry><literal>array_upper(ARRAY[1,2,3,4], 1)</literal></entry>
9515 <entry><literal>4</literal></entry>
9520 <function>string_to_array</function>(<type>text</type>, <type>text</type>)
9523 <entry><type>text[]</type></entry>
9524 <entry>splits string into array elements using supplied delimiter</entry>
9525 <entry><literal>string_to_array('xx~^~yy~^~zz', '~^~')</literal></entry>
9526 <entry><literal>{xx,yy,zz}</literal></entry>
9531 <function>unnest</function>(<type>anyarray</type>)
9534 <entry><type>setof anyelement</type></entry>
9535 <entry>expand an array to a set of rows</entry>
9536 <entry><literal>unnest(ARRAY[1,2])</literal></entry>
9537 <entry><literal>1</literal><para><literal>2</literal></para> (2 rows)</entry>
9544 See also <xref linkend="functions-aggregate"> about the aggregate
9545 function <function>array_agg</function> for use with arrays.
9549 <sect1 id="functions-aggregate">
9550 <title>Aggregate Functions</title>
9552 <indexterm zone="functions-aggregate">
9553 <primary>aggregate function</primary>
9554 <secondary>built-in</secondary>
9558 <firstterm>Aggregate functions</firstterm> compute a single result
9559 from a set of input values. The built-in aggregate functions
9561 <xref linkend="functions-aggregate-table"> and
9562 <xref linkend="functions-aggregate-statistics-table">.
9563 The special syntax considerations for aggregate
9564 functions are explained in <xref linkend="syntax-aggregates">.
9565 Consult <xref linkend="tutorial-agg"> for additional introductory
9569 <table id="functions-aggregate-table">
9570 <title>General-Purpose Aggregate Functions</title>
9575 <entry>Function</entry>
9576 <entry>Argument Type</entry>
9577 <entry>Return Type</entry>
9578 <entry>Description</entry>
9586 <primary>array_agg</primary>
9588 <function>array_agg(<replaceable class="parameter">expression</replaceable>)</function>
9594 array of the argument type
9596 <entry>input values concatenated into an array</entry>
9602 <primary>average</primary>
9604 <function>avg(<replaceable class="parameter">expression</replaceable>)</function>
9607 <type>smallint</type>, <type>int</type>,
9608 <type>bigint</type>, <type>real</type>, <type>double
9609 precision</type>, <type>numeric</type>, or <type>interval</type>
9612 <type>numeric</type> for any integer-type argument,
9613 <type>double precision</type> for a floating-point argument,
9614 otherwise the same as the argument data type
9616 <entry>the average (arithmetic mean) of all input values</entry>
9622 <primary>bit_and</primary>
9624 <function>bit_and(<replaceable class="parameter">expression</replaceable>)</function>
9627 <type>smallint</type>, <type>int</type>, <type>bigint</type>, or
9631 same as argument data type
9633 <entry>the bitwise AND of all non-null input values, or null if none</entry>
9639 <primary>bit_or</primary>
9641 <function>bit_or(<replaceable class="parameter">expression</replaceable>)</function>
9644 <type>smallint</type>, <type>int</type>, <type>bigint</type>, or
9648 same as argument data type
9650 <entry>the bitwise OR of all non-null input values, or null if none</entry>
9656 <primary>bool_and</primary>
9658 <function>bool_and(<replaceable class="parameter">expression</replaceable>)</function>
9666 <entry>true if all input values are true, otherwise false</entry>
9672 <primary>bool_or</primary>
9674 <function>bool_or(<replaceable class="parameter">expression</replaceable>)</function>
9682 <entry>true if at least one input value is true, otherwise false</entry>
9686 <entry><function>count(*)</function></entry>
9688 <entry><type>bigint</type></entry>
9689 <entry>number of input rows</entry>
9693 <entry><function>count(<replaceable class="parameter">expression</replaceable>)</function></entry>
9695 <entry><type>bigint</type></entry>
9697 number of input rows for which the value of <replaceable
9698 class="parameter">expression</replaceable> is not null
9705 <primary>every</primary>
9707 <function>every(<replaceable class="parameter">expression</replaceable>)</function>
9715 <entry>equivalent to <function>bool_and</function></entry>
9719 <entry><function>max(<replaceable class="parameter">expression</replaceable>)</function></entry>
9720 <entry>any array, numeric, string, or date/time type</entry>
9721 <entry>same as argument type</entry>
9723 maximum value of <replaceable
9724 class="parameter">expression</replaceable> across all input
9730 <entry><function>min(<replaceable class="parameter">expression</replaceable>)</function></entry>
9731 <entry>any array, numeric, string, or date/time type</entry>
9732 <entry>same as argument type</entry>
9734 minimum value of <replaceable
9735 class="parameter">expression</replaceable> across all input
9741 <entry><function>sum(<replaceable class="parameter">expression</replaceable>)</function></entry>
9743 <type>smallint</type>, <type>int</type>,
9744 <type>bigint</type>, <type>real</type>, <type>double
9745 precision</type>, <type>numeric</type>, or
9746 <type>interval</type>
9749 <type>bigint</type> for <type>smallint</type> or
9750 <type>int</type> arguments, <type>numeric</type> for
9751 <type>bigint</type> arguments, <type>double precision</type>
9752 for floating-point arguments, otherwise the same as the
9755 <entry>sum of <replaceable class="parameter">expression</replaceable> across all input values</entry>
9761 <primary>xmlagg</primary>
9763 <function>xmlagg(<replaceable class="parameter">expression</replaceable>)</function>
9771 <entry>concatenation of XML values (see also <xref linkend="functions-xml-xmlagg">)</entry>
9778 It should be noted that except for <function>count</function>,
9779 these functions return a null value when no rows are selected. In
9780 particular, <function>sum</function> of no rows returns null, not
9781 zero as one might expect, and <function>array_agg</function>
9782 returns null rather than an empty array when there are no input
9783 rows. The <function>coalesce</function> function can be used to
9784 substitute zero or an empty array for null when necessary.
9789 <primary>ANY</primary>
9792 <primary>SOME</primary>
9795 Boolean aggregates <function>bool_and</function> and
9796 <function>bool_or</function> correspond to standard SQL aggregates
9797 <function>every</function> and <function>any</function> or
9798 <function>some</function>.
9799 As for <function>any</function> and <function>some</function>,
9800 it seems that there is an ambiguity built into the standard syntax:
9802 SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;
9804 Here <function>ANY</function> can be considered as leading either
9805 to a subquery or to an aggregate, if the select expression returns one row.
9806 Thus the standard name cannot be given to these aggregates.
9812 Users accustomed to working with other SQL database management
9813 systems might be disappointed by the performance of the
9814 <function>count</function> aggregate when it is applied to the
9815 entire table. A query like:
9817 SELECT count(*) FROM sometable;
9819 will be executed by <productname>PostgreSQL</productname> using a
9820 sequential scan of an entire table.
9825 The aggregate functions <function>array_agg</function>
9826 and <function>xmlagg</function>, as well as similar user-defined
9827 aggregate functions, produce meaningfully different result values
9828 depending on the order of the input values. In the current
9829 implementation, the order of the input is in principle unspecified.
9830 Supplying the input values from a sorted subquery
9831 will usually work, however. For example:
9834 SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;
9837 But this syntax is not allowed in the SQL standard, and is
9838 not portable to other database systems. A future version of
9839 <productname>PostgreSQL</> might provide an additional feature to control
9840 the order in a better-defined way (<literal>xmlagg(expr ORDER BY expr, expr,
9845 <xref linkend="functions-aggregate-statistics-table"> shows
9846 aggregate functions typically used in statistical analysis.
9847 (These are separated out merely to avoid cluttering the listing
9848 of more-commonly-used aggregates.) Where the description mentions
9849 <replaceable class="parameter">N</replaceable>, it means the
9850 number of input rows for which all the input expressions are non-null.
9851 In all cases, null is returned if the computation is meaningless,
9852 for example when <replaceable class="parameter">N</replaceable> is zero.
9856 <primary>statistics</primary>
9859 <primary>linear regression</primary>
9862 <table id="functions-aggregate-statistics-table">
9863 <title>Aggregate Functions for Statistics</title>
9868 <entry>Function</entry>
9869 <entry>Argument Type</entry>
9870 <entry>Return Type</entry>
9871 <entry>Description</entry>
9880 <primary>correlation</primary>
9882 <function>corr(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9885 <type>double precision</type>
9888 <type>double precision</type>
9890 <entry>correlation coefficient</entry>
9896 <primary>covariance</primary>
9897 <secondary>population</secondary>
9899 <function>covar_pop(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9902 <type>double precision</type>
9905 <type>double precision</type>
9907 <entry>population covariance</entry>
9913 <primary>covariance</primary>
9914 <secondary>sample</secondary>
9916 <function>covar_samp(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9919 <type>double precision</type>
9922 <type>double precision</type>
9924 <entry>sample covariance</entry>
9929 <function>regr_avgx(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9932 <type>double precision</type>
9935 <type>double precision</type>
9937 <entry>average of the independent variable
9938 (<literal>sum(<replaceable class="parameter">X</replaceable>)/<replaceable class="parameter">N</replaceable></literal>)</entry>
9943 <function>regr_avgy(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9946 <type>double precision</type>
9949 <type>double precision</type>
9951 <entry>average of the dependent variable
9952 (<literal>sum(<replaceable class="parameter">Y</replaceable>)/<replaceable class="parameter">N</replaceable></literal>)</entry>
9957 <function>regr_count(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9960 <type>double precision</type>
9965 <entry>number of input rows in which both expressions are nonnull</entry>
9971 <primary>regression intercept</primary>
9973 <function>regr_intercept(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9976 <type>double precision</type>
9979 <type>double precision</type>
9981 <entry>y-intercept of the least-squares-fit linear equation
9982 determined by the (<replaceable
9983 class="parameter">X</replaceable>, <replaceable
9984 class="parameter">Y</replaceable>) pairs</entry>
9989 <function>regr_r2(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9992 <type>double precision</type>
9995 <type>double precision</type>
9997 <entry>square of the correlation coefficient</entry>
10003 <primary>regression slope</primary>
10005 <function>regr_slope(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
10008 <type>double precision</type>
10011 <type>double precision</type>
10013 <entry>slope of the least-squares-fit linear equation determined
10014 by the (<replaceable class="parameter">X</replaceable>,
10015 <replaceable class="parameter">Y</replaceable>) pairs</entry>
10020 <function>regr_sxx(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
10023 <type>double precision</type>
10026 <type>double precision</type>
10028 <entry><literal>sum(<replaceable
10029 class="parameter">X</replaceable>^2) - sum(<replaceable
10030 class="parameter">X</replaceable>)^2/<replaceable
10031 class="parameter">N</replaceable></literal> (<quote>sum of
10032 squares</quote> of the independent variable)</entry>
10037 <function>regr_sxy(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
10040 <type>double precision</type>
10043 <type>double precision</type>
10045 <entry><literal>sum(<replaceable
10046 class="parameter">X</replaceable>*<replaceable
10047 class="parameter">Y</replaceable>) - sum(<replaceable
10048 class="parameter">X</replaceable>) * sum(<replaceable
10049 class="parameter">Y</replaceable>)/<replaceable
10050 class="parameter">N</replaceable></literal> (<quote>sum of
10051 products</quote> of independent times dependent
10057 <function>regr_syy(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
10060 <type>double precision</type>
10063 <type>double precision</type>
10065 <entry><literal>sum(<replaceable
10066 class="parameter">Y</replaceable>^2) - sum(<replaceable
10067 class="parameter">Y</replaceable>)^2/<replaceable
10068 class="parameter">N</replaceable></literal> (<quote>sum of
10069 squares</quote> of the dependent variable)</entry>
10075 <primary>standard deviation</primary>
10077 <function>stddev(<replaceable class="parameter">expression</replaceable>)</function>
10080 <type>smallint</type>, <type>int</type>,
10081 <type>bigint</type>, <type>real</type>, <type>double
10082 precision</type>, or <type>numeric</type>
10085 <type>double precision</type> for floating-point arguments,
10086 otherwise <type>numeric</type>
10088 <entry>historical alias for <function>stddev_samp</function></entry>
10094 <primary>standard deviation</primary>
10095 <secondary>population</secondary>
10097 <function>stddev_pop(<replaceable class="parameter">expression</replaceable>)</function>
10100 <type>smallint</type>, <type>int</type>,
10101 <type>bigint</type>, <type>real</type>, <type>double
10102 precision</type>, or <type>numeric</type>
10105 <type>double precision</type> for floating-point arguments,
10106 otherwise <type>numeric</type>
10108 <entry>population standard deviation of the input values</entry>
10114 <primary>standard deviation</primary>
10115 <secondary>sample</secondary>
10117 <function>stddev_samp(<replaceable class="parameter">expression</replaceable>)</function>
10120 <type>smallint</type>, <type>int</type>,
10121 <type>bigint</type>, <type>real</type>, <type>double
10122 precision</type>, or <type>numeric</type>
10125 <type>double precision</type> for floating-point arguments,
10126 otherwise <type>numeric</type>
10128 <entry>sample standard deviation of the input values</entry>
10134 <primary>variance</primary>
10136 <function>variance</function>(<replaceable class="parameter">expression</replaceable>)
10139 <type>smallint</type>, <type>int</type>,
10140 <type>bigint</type>, <type>real</type>, <type>double
10141 precision</type>, or <type>numeric</type>
10144 <type>double precision</type> for floating-point arguments,
10145 otherwise <type>numeric</type>
10147 <entry>historical alias for <function>var_samp</function></entry>
10153 <primary>variance</primary>
10154 <secondary>population</secondary>
10156 <function>var_pop</function>(<replaceable class="parameter">expression</replaceable>)
10159 <type>smallint</type>, <type>int</type>,
10160 <type>bigint</type>, <type>real</type>, <type>double
10161 precision</type>, or <type>numeric</type>
10164 <type>double precision</type> for floating-point arguments,
10165 otherwise <type>numeric</type>
10167 <entry>population variance of the input values (square of the population standard deviation)</entry>
10173 <primary>variance</primary>
10174 <secondary>sample</secondary>
10176 <function>var_samp</function>(<replaceable class="parameter">expression</replaceable>)
10179 <type>smallint</type>, <type>int</type>,
10180 <type>bigint</type>, <type>real</type>, <type>double
10181 precision</type>, or <type>numeric</type>
10184 <type>double precision</type> for floating-point arguments,
10185 otherwise <type>numeric</type>
10187 <entry>sample variance of the input values (square of the sample standard deviation)</entry>
10195 <sect1 id="functions-window">
10196 <title>Window Functions</title>
10198 <indexterm zone="functions-window">
10199 <primary>window function</primary>
10200 <secondary>built-in</secondary>
10204 <firstterm>Window functions</firstterm> provide the ability to perform
10205 calculations across sets of rows that are related to the current query
10206 row. See <xref linkend="tutorial-window"> for an introduction to this
10211 The built-in window functions are listed in
10212 <xref linkend="functions-window-table">. Note that these functions
10213 <emphasis>must</> be invoked using window function syntax; that is an
10214 <literal>OVER</> clause is required.
10218 In addition to these functions, any built-in or user-defined aggregate
10219 function can be used as a window function (see
10220 <xref linkend="functions-aggregate"> for a list of the built-in aggregates).
10221 Aggregate functions act as window functions only when an <literal>OVER</>
10222 clause follows the call; otherwise they act as regular aggregates.
10225 <table id="functions-window-table">
10226 <title>General-Purpose Window Functions</title>
10231 <entry>Function</entry>
10232 <entry>Return Type</entry>
10233 <entry>Description</entry>
10241 <primary>row_number</primary>
10243 <function>row_number()</function>
10246 <type>bigint</type>
10248 <entry>number of the current row within its partition, counting from 1</entry>
10254 <primary>rank</primary>
10256 <function>rank()</function>
10259 <type>bigint</type>
10261 <entry>rank of the current row with gaps; same as <function>row_number</> of its first peer</entry>
10267 <primary>dense_rank</primary>
10269 <function>dense_rank()</function>
10272 <type>bigint</type>
10274 <entry>rank of the current row without gaps; this function counts peer groups</entry>
10280 <primary>percent_rank</primary>
10282 <function>percent_rank()</function>
10285 <type>double precision</type>
10287 <entry>relative rank of the current row: (<function>rank</> - 1) / (total rows - 1)</entry>
10293 <primary>cume_dist</primary>
10295 <function>cume_dist()</function>
10298 <type>double precision</type>
10300 <entry>relative rank of the current row: (number of rows preceding or peer with current row) / (total rows)</entry>
10306 <primary>ntile</primary>
10308 <function>ntile(<replaceable class="parameter">num_buckets</replaceable> <type>integer</>)</function>
10311 <type>integer</type>
10313 <entry>integer ranging from 1 to the argument value, dividing the
10314 partition as equally as possible</entry>
10320 <primary>lag</primary>
10323 lag(<replaceable class="parameter">value</replaceable> <type>any</>
10324 [, <replaceable class="parameter">offset</replaceable> <type>integer</>
10325 [, <replaceable class="parameter">default</replaceable> <type>any</> ]])
10329 <type>same type as <replaceable class="parameter">value</replaceable></type>
10332 returns <replaceable class="parameter">value</replaceable> evaluated at
10333 the row that is <replaceable class="parameter">offset</replaceable>
10334 rows before the current row within the partition; if there is no such
10335 row, instead return <replaceable class="parameter">default</replaceable>.
10336 Both <replaceable class="parameter">offset</replaceable> and
10337 <replaceable class="parameter">default</replaceable> are evaluated
10338 with respect to the current row. If omitted,
10339 <replaceable class="parameter">offset</replaceable> defaults to 1 and
10340 <replaceable class="parameter">default</replaceable> to null
10347 <primary>lead</primary>
10350 lead(<replaceable class="parameter">value</replaceable> <type>any</>
10351 [, <replaceable class="parameter">offset</replaceable> <type>integer</>
10352 [, <replaceable class="parameter">default</replaceable> <type>any</> ]])
10356 <type>same type as <replaceable class="parameter">value</replaceable></type>
10359 returns <replaceable class="parameter">value</replaceable> evaluated at
10360 the row that is <replaceable class="parameter">offset</replaceable>
10361 rows after the current row within the partition; if there is no such
10362 row, instead return <replaceable class="parameter">default</replaceable>.
10363 Both <replaceable class="parameter">offset</replaceable> and
10364 <replaceable class="parameter">default</replaceable> are evaluated
10365 with respect to the current row. If omitted,
10366 <replaceable class="parameter">offset</replaceable> defaults to 1 and
10367 <replaceable class="parameter">default</replaceable> to null
10374 <primary>first_value</primary>
10376 <function>first_value(<replaceable class="parameter">value</replaceable> <type>any</>)</function>
10379 <type>same type as <replaceable class="parameter">value</replaceable></type>
10382 returns <replaceable class="parameter">value</replaceable> evaluated
10383 at the row that is the first row of the window frame
10390 <primary>last_value</primary>
10392 <function>last_value(<replaceable class="parameter">value</replaceable> <type>any</>)</function>
10395 <type>same type as <replaceable class="parameter">value</replaceable></type>
10398 returns <replaceable class="parameter">value</replaceable> evaluated
10399 at the row that is the last row of the window frame
10406 <primary>nth_value</primary>
10409 nth_value(<replaceable class="parameter">value</replaceable> <type>any</>, <replaceable class="parameter">nth</replaceable> <type>integer</>)
10413 <type>same type as <replaceable class="parameter">value</replaceable></type>
10416 returns <replaceable class="parameter">value</replaceable> evaluated
10417 at the row that is the <replaceable class="parameter">nth</replaceable>
10418 row of the window frame (counting from 1); null if no such row
10426 All of the functions listed in
10427 <xref linkend="functions-window-table"> depend on the sort ordering
10428 specified by the <literal>ORDER BY</> clause of the associated window
10429 definition. Rows that are not distinct in the <literal>ORDER BY</>
10430 ordering are said to be <firstterm>peers</>; the four ranking functions
10431 are defined so that they give the same answer for any two peer rows.
10435 Note that <function>first_value</>, <function>last_value</>, and
10436 <function>nth_value</> consider only the rows within the <quote>window
10437 frame</>, which by default contains the rows from the start of the
10438 partition through the last peer of the current row. This is
10439 likely to give unhelpful results for <function>nth_value</> and
10440 particularly <function>last_value</>. You can redefine the frame as
10441 being the whole partition by adding <literal>ROWS BETWEEN UNBOUNDED
10442 PRECEDING AND UNBOUNDED FOLLOWING</> to the <literal>OVER</> clause.
10443 See <xref linkend="syntax-window-functions"> for more information.
10447 When an aggregate function is used as a window function, it aggregates
10448 over the rows within the current row's window frame. To obtain
10449 aggregation over the whole partition, omit <literal>ORDER BY</> or use
10450 <literal>ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING</>.
10451 An aggregate used with <literal>ORDER BY</> and the default window frame
10452 definition produces a <quote>running sum</> type of behavior, which may or
10453 may not be what's wanted.
10458 The SQL standard defines a <literal>RESPECT NULLS</> or
10459 <literal>IGNORE NULLS</> option for <function>lead</>, <function>lag</>,
10460 <function>first_value</>, <function>last_value</>, and
10461 <function>nth_value</>. This is not implemented in
10462 <productname>PostgreSQL</productname>: the behavior is always the
10463 same as the standard's default, namely <literal>RESPECT NULLS</>.
10464 Likewise, the standard's <literal>FROM FIRST</> or <literal>FROM LAST</>
10465 option for <function>nth_value</> is not implemented: only the
10466 default <literal>FROM FIRST</> behavior is supported. (You can achieve
10467 the result of <literal>FROM LAST</> by reversing the <literal>ORDER BY</>
10474 <sect1 id="functions-subquery">
10475 <title>Subquery Expressions</title>
10478 <primary>EXISTS</primary>
10482 <primary>IN</primary>
10486 <primary>NOT IN</primary>
10490 <primary>ANY</primary>
10494 <primary>ALL</primary>
10498 <primary>SOME</primary>
10502 <primary>subquery</primary>
10506 This section describes the <acronym>SQL</acronym>-compliant subquery
10507 expressions available in <productname>PostgreSQL</productname>.
10508 All of the expression forms documented in this section return
10509 Boolean (true/false) results.
10513 <title><literal>EXISTS</literal></title>
10516 EXISTS (<replaceable>subquery</replaceable>)
10520 The argument of <token>EXISTS</token> is an arbitrary <command>SELECT</> statement,
10521 or <firstterm>subquery</firstterm>. The
10522 subquery is evaluated to determine whether it returns any rows.
10523 If it returns at least one row, the result of <token>EXISTS</token> is
10524 <quote>true</>; if the subquery returns no rows, the result of <token>EXISTS</token>
10525 is <quote>false</>.
10529 The subquery can refer to variables from the surrounding query,
10530 which will act as constants during any one evaluation of the subquery.
10534 The subquery will generally only be executed long enough to determine
10535 whether at least one row is returned, not all the way to completion.
10536 It is unwise to write a subquery that has side effects (such as
10537 calling sequence functions); whether the side effects occur
10538 might be unpredictable.
10542 Since the result depends only on whether any rows are returned,
10543 and not on the contents of those rows, the output list of the
10544 subquery is normally unimportant. A common coding convention is
10545 to write all <literal>EXISTS</> tests in the form
10546 <literal>EXISTS(SELECT 1 WHERE ...)</literal>. There are exceptions to
10547 this rule however, such as subqueries that use <token>INTERSECT</token>.
10551 This simple example is like an inner join on <literal>col2</>, but
10552 it produces at most one output row for each <literal>tab1</> row,
10553 even if there are several matching <literal>tab2</> rows:
10557 WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2);
10563 <title><literal>IN</literal></title>
10566 <replaceable>expression</replaceable> IN (<replaceable>subquery</replaceable>)
10570 The right-hand side is a parenthesized
10571 subquery, which must return exactly one column. The left-hand expression
10572 is evaluated and compared to each row of the subquery result.
10573 The result of <token>IN</token> is <quote>true</> if any equal subquery row is found.
10574 The result is <quote>false</> if no equal row is found (including the
10575 case where the subquery returns no rows).
10579 Note that if the left-hand expression yields null, or if there are
10580 no equal right-hand values and at least one right-hand row yields
10581 null, the result of the <token>IN</token> construct will be null, not false.
10582 This is in accordance with SQL's normal rules for Boolean combinations
10587 As with <token>EXISTS</token>, it's unwise to assume that the subquery will
10588 be evaluated completely.
10592 <replaceable>row_constructor</replaceable> IN (<replaceable>subquery</replaceable>)
10596 The left-hand side of this form of <token>IN</token> is a row constructor,
10597 as described in <xref linkend="sql-syntax-row-constructors">.
10598 The right-hand side is a parenthesized
10599 subquery, which must return exactly as many columns as there are
10600 expressions in the left-hand row. The left-hand expressions are
10601 evaluated and compared row-wise to each row of the subquery result.
10602 The result of <token>IN</token> is <quote>true</> if any equal subquery row is found.
10603 The result is <quote>false</> if no equal row is found (including the
10604 case where the subquery returns no rows).
10608 As usual, null values in the rows are combined per
10609 the normal rules of SQL Boolean expressions. Two rows are considered
10610 equal if all their corresponding members are non-null and equal; the rows
10611 are unequal if any corresponding members are non-null and unequal;
10612 otherwise the result of that row comparison is unknown (null).
10613 If all the per-row results are either unequal or null, with at least one
10614 null, then the result of <token>IN</token> is null.
10619 <title><literal>NOT IN</literal></title>
10622 <replaceable>expression</replaceable> NOT IN (<replaceable>subquery</replaceable>)
10626 The right-hand side is a parenthesized
10627 subquery, which must return exactly one column. The left-hand expression
10628 is evaluated and compared to each row of the subquery result.
10629 The result of <token>NOT IN</token> is <quote>true</> if only unequal subquery rows
10630 are found (including the case where the subquery returns no rows).
10631 The result is <quote>false</> if any equal row is found.
10635 Note that if the left-hand expression yields null, or if there are
10636 no equal right-hand values and at least one right-hand row yields
10637 null, the result of the <token>NOT IN</token> construct will be null, not true.
10638 This is in accordance with SQL's normal rules for Boolean combinations
10643 As with <token>EXISTS</token>, it's unwise to assume that the subquery will
10644 be evaluated completely.
10648 <replaceable>row_constructor</replaceable> NOT IN (<replaceable>subquery</replaceable>)
10652 The left-hand side of this form of <token>NOT IN</token> is a row constructor,
10653 as described in <xref linkend="sql-syntax-row-constructors">.
10654 The right-hand side is a parenthesized
10655 subquery, which must return exactly as many columns as there are
10656 expressions in the left-hand row. The left-hand expressions are
10657 evaluated and compared row-wise to each row of the subquery result.
10658 The result of <token>NOT IN</token> is <quote>true</> if only unequal subquery rows
10659 are found (including the case where the subquery returns no rows).
10660 The result is <quote>false</> if any equal row is found.
10664 As usual, null values in the rows are combined per
10665 the normal rules of SQL Boolean expressions. Two rows are considered
10666 equal if all their corresponding members are non-null and equal; the rows
10667 are unequal if any corresponding members are non-null and unequal;
10668 otherwise the result of that row comparison is unknown (null).
10669 If all the per-row results are either unequal or null, with at least one
10670 null, then the result of <token>NOT IN</token> is null.
10675 <title><literal>ANY</literal>/<literal>SOME</literal></title>
10678 <replaceable>expression</replaceable> <replaceable>operator</replaceable> ANY (<replaceable>subquery</replaceable>)
10679 <replaceable>expression</replaceable> <replaceable>operator</replaceable> SOME (<replaceable>subquery</replaceable>)
10683 The right-hand side is a parenthesized
10684 subquery, which must return exactly one column. The left-hand expression
10685 is evaluated and compared to each row of the subquery result using the
10686 given <replaceable>operator</replaceable>, which must yield a Boolean
10688 The result of <token>ANY</token> is <quote>true</> if any true result is obtained.
10689 The result is <quote>false</> if no true result is found (including the
10690 case where the subquery returns no rows).
10694 <token>SOME</token> is a synonym for <token>ANY</token>.
10695 <token>IN</token> is equivalent to <literal>= ANY</literal>.
10699 Note that if there are no successes and at least one right-hand row yields
10700 null for the operator's result, the result of the <token>ANY</token> construct
10701 will be null, not false.
10702 This is in accordance with SQL's normal rules for Boolean combinations
10707 As with <token>EXISTS</token>, it's unwise to assume that the subquery will
10708 be evaluated completely.
10712 <replaceable>row_constructor</replaceable> <replaceable>operator</> ANY (<replaceable>subquery</replaceable>)
10713 <replaceable>row_constructor</replaceable> <replaceable>operator</> SOME (<replaceable>subquery</replaceable>)
10717 The left-hand side of this form of <token>ANY</token> is a row constructor,
10718 as described in <xref linkend="sql-syntax-row-constructors">.
10719 The right-hand side is a parenthesized
10720 subquery, which must return exactly as many columns as there are
10721 expressions in the left-hand row. The left-hand expressions are
10722 evaluated and compared row-wise to each row of the subquery result,
10723 using the given <replaceable>operator</replaceable>.
10724 The result of <token>ANY</token> is <quote>true</> if the comparison
10725 returns true for any subquery row.
10726 The result is <quote>false</> if the comparison returns false for every
10727 subquery row (including the case where the subquery returns no
10729 The result is NULL if the comparison does not return true for any row,
10730 and it returns NULL for at least one row.
10734 See <xref linkend="row-wise-comparison"> for details about the meaning
10735 of a row-wise comparison.
10740 <title><literal>ALL</literal></title>
10743 <replaceable>expression</replaceable> <replaceable>operator</replaceable> ALL (<replaceable>subquery</replaceable>)
10747 The right-hand side is a parenthesized
10748 subquery, which must return exactly one column. The left-hand expression
10749 is evaluated and compared to each row of the subquery result using the
10750 given <replaceable>operator</replaceable>, which must yield a Boolean
10752 The result of <token>ALL</token> is <quote>true</> if all rows yield true
10753 (including the case where the subquery returns no rows).
10754 The result is <quote>false</> if any false result is found.
10755 The result is NULL if the comparison does not return false for any row,
10756 and it returns NULL for at least one row.
10760 <token>NOT IN</token> is equivalent to <literal><> ALL</literal>.
10764 As with <token>EXISTS</token>, it's unwise to assume that the subquery will
10765 be evaluated completely.
10769 <replaceable>row_constructor</replaceable> <replaceable>operator</replaceable> ALL (<replaceable>subquery</replaceable>)
10773 The left-hand side of this form of <token>ALL</token> is a row constructor,
10774 as described in <xref linkend="sql-syntax-row-constructors">.
10775 The right-hand side is a parenthesized
10776 subquery, which must return exactly as many columns as there are
10777 expressions in the left-hand row. The left-hand expressions are
10778 evaluated and compared row-wise to each row of the subquery result,
10779 using the given <replaceable>operator</replaceable>.
10780 The result of <token>ALL</token> is <quote>true</> if the comparison
10781 returns true for all subquery rows (including the
10782 case where the subquery returns no rows).
10783 The result is <quote>false</> if the comparison returns false for any
10785 The result is NULL if the comparison does not return false for any
10786 subquery row, and it returns NULL for at least one row.
10790 See <xref linkend="row-wise-comparison"> for details about the meaning
10791 of a row-wise comparison.
10796 <title>Row-wise Comparison</title>
10798 <indexterm zone="functions-subquery">
10799 <primary>comparison</primary>
10800 <secondary>subquery result row</secondary>
10804 <replaceable>row_constructor</replaceable> <replaceable>operator</replaceable> (<replaceable>subquery</replaceable>)
10808 The left-hand side is a row constructor,
10809 as described in <xref linkend="sql-syntax-row-constructors">.
10810 The right-hand side is a parenthesized subquery, which must return exactly
10811 as many columns as there are expressions in the left-hand row. Furthermore,
10812 the subquery cannot return more than one row. (If it returns zero rows,
10813 the result is taken to be null.) The left-hand side is evaluated and
10814 compared row-wise to the single subquery result row.
10818 See <xref linkend="row-wise-comparison"> for details about the meaning
10819 of a row-wise comparison.
10825 <sect1 id="functions-comparisons">
10826 <title>Row and Array Comparisons</title>
10829 <primary>IN</primary>
10833 <primary>NOT IN</primary>
10837 <primary>ANY</primary>
10841 <primary>ALL</primary>
10845 <primary>SOME</primary>
10849 <primary>row-wise comparison</primary>
10853 <primary>comparison</primary>
10854 <secondary>row-wise</secondary>
10858 <primary>IS DISTINCT FROM</primary>
10862 <primary>IS NOT DISTINCT FROM</primary>
10866 This section describes several specialized constructs for making
10867 multiple comparisons between groups of values. These forms are
10868 syntactically related to the subquery forms of the previous section,
10869 but do not involve subqueries.
10870 The forms involving array subexpressions are
10871 <productname>PostgreSQL</productname> extensions; the rest are
10872 <acronym>SQL</acronym>-compliant.
10873 All of the expressions documented in this section return
10874 Boolean (true/false) results.
10878 <title><literal>IN</literal></title>
10881 <replaceable>expression</replaceable> IN (<replaceable>value</replaceable> <optional>, ...</optional>)
10885 The right-hand side is a parenthesized list
10886 of scalar expressions. The result is <quote>true</> if the left-hand expression's
10887 result is equal to any of the right-hand expressions. This is a shorthand
10891 <replaceable>expression</replaceable> = <replaceable>value1</replaceable>
10893 <replaceable>expression</replaceable> = <replaceable>value2</replaceable>
10900 Note that if the left-hand expression yields null, or if there are
10901 no equal right-hand values and at least one right-hand expression yields
10902 null, the result of the <token>IN</token> construct will be null, not false.
10903 This is in accordance with SQL's normal rules for Boolean combinations
10909 <title><literal>NOT IN</literal></title>
10912 <replaceable>expression</replaceable> NOT IN (<replaceable>value</replaceable> <optional>, ...</optional>)
10916 The right-hand side is a parenthesized list
10917 of scalar expressions. The result is <quote>true</quote> if the left-hand expression's
10918 result is unequal to all of the right-hand expressions. This is a shorthand
10922 <replaceable>expression</replaceable> <> <replaceable>value1</replaceable>
10924 <replaceable>expression</replaceable> <> <replaceable>value2</replaceable>
10931 Note that if the left-hand expression yields null, or if there are
10932 no equal right-hand values and at least one right-hand expression yields
10933 null, the result of the <token>NOT IN</token> construct will be null, not true
10934 as one might naively expect.
10935 This is in accordance with SQL's normal rules for Boolean combinations
10941 <literal>x NOT IN y</literal> is equivalent to <literal>NOT (x IN y)</literal> in all
10942 cases. However, null values are much more likely to trip up the novice when
10943 working with <token>NOT IN</token> than when working with <token>IN</token>.
10944 It is best to express your condition positively if possible.
10950 <title><literal>ANY</literal>/<literal>SOME</literal> (array)</title>
10953 <replaceable>expression</replaceable> <replaceable>operator</replaceable> ANY (<replaceable>array expression</replaceable>)
10954 <replaceable>expression</replaceable> <replaceable>operator</replaceable> SOME (<replaceable>array expression</replaceable>)
10958 The right-hand side is a parenthesized expression, which must yield an
10960 The left-hand expression
10961 is evaluated and compared to each element of the array using the
10962 given <replaceable>operator</replaceable>, which must yield a Boolean
10964 The result of <token>ANY</token> is <quote>true</> if any true result is obtained.
10965 The result is <quote>false</> if no true result is found (including the
10966 case where the array has zero elements).
10970 If the array expression yields a null array, the result of
10971 <token>ANY</token> will be null. If the left-hand expression yields null,
10972 the result of <token>ANY</token> is ordinarily null (though a non-strict
10973 comparison operator could possibly yield a different result).
10974 Also, if the right-hand array contains any null elements and no true
10975 comparison result is obtained, the result of <token>ANY</token>
10976 will be null, not false (again, assuming a strict comparison operator).
10977 This is in accordance with SQL's normal rules for Boolean combinations
10982 <token>SOME</token> is a synonym for <token>ANY</token>.
10987 <title><literal>ALL</literal> (array)</title>
10990 <replaceable>expression</replaceable> <replaceable>operator</replaceable> ALL (<replaceable>array expression</replaceable>)
10994 The right-hand side is a parenthesized expression, which must yield an
10996 The left-hand expression
10997 is evaluated and compared to each element of the array using the
10998 given <replaceable>operator</replaceable>, which must yield a Boolean
11000 The result of <token>ALL</token> is <quote>true</> if all comparisons yield true
11001 (including the case where the array has zero elements).
11002 The result is <quote>false</> if any false result is found.
11006 If the array expression yields a null array, the result of
11007 <token>ALL</token> will be null. If the left-hand expression yields null,
11008 the result of <token>ALL</token> is ordinarily null (though a non-strict
11009 comparison operator could possibly yield a different result).
11010 Also, if the right-hand array contains any null elements and no false
11011 comparison result is obtained, the result of <token>ALL</token>
11012 will be null, not true (again, assuming a strict comparison operator).
11013 This is in accordance with SQL's normal rules for Boolean combinations
11018 <sect2 id="row-wise-comparison">
11019 <title>Row-wise Comparison</title>
11022 <replaceable>row_constructor</replaceable> <replaceable>operator</replaceable> <replaceable>row_constructor</replaceable>
11026 Each side is a row constructor,
11027 as described in <xref linkend="sql-syntax-row-constructors">.
11028 The two row values must have the same number of fields.
11029 Each side is evaluated and they are compared row-wise. Row comparisons
11030 are allowed when the <replaceable>operator</replaceable> is
11032 <literal><></>,
11035 <literal>></> or
11037 or has semantics similar to one of these. (To be specific, an operator
11038 can be a row comparison operator if it is a member of a B-Tree operator
11039 class, or is the negator of the <literal>=</> member of a B-Tree operator
11044 The <literal>=</> and <literal><></> cases work slightly differently
11045 from the others. Two rows are considered
11046 equal if all their corresponding members are non-null and equal; the rows
11047 are unequal if any corresponding members are non-null and unequal;
11048 otherwise the result of the row comparison is unknown (null).
11052 For the <literal><</>, <literal><=</>, <literal>></> and
11053 <literal>>=</> cases, the row elements are compared left-to-right,
11054 stopping as soon as an unequal or null pair of elements is found.
11055 If either of this pair of elements is null, the result of the
11056 row comparison is unknown (null); otherwise comparison of this pair
11057 of elements determines the result. For example,
11058 <literal>ROW(1,2,NULL) < ROW(1,3,0)</>
11059 yields true, not null, because the third pair of elements are not
11065 Prior to <productname>PostgreSQL</productname> 8.2, the
11066 <literal><</>, <literal><=</>, <literal>></> and <literal>>=</>
11067 cases were not handled per SQL specification. A comparison like
11068 <literal>ROW(a,b) < ROW(c,d)</>
11070 <literal>a < c AND b < d</>
11071 whereas the correct behavior is equivalent to
11072 <literal>a < c OR (a = c AND b < d)</>.
11077 <replaceable>row_constructor</replaceable> IS DISTINCT FROM <replaceable>row_constructor</replaceable>
11081 This construct is similar to a <literal><></literal> row comparison,
11082 but it does not yield null for null inputs. Instead, any null value is
11083 considered unequal to (distinct from) any non-null value, and any two
11084 nulls are considered equal (not distinct). Thus the result will
11085 either be true or false, never null.
11089 <replaceable>row_constructor</replaceable> IS NOT DISTINCT FROM <replaceable>row_constructor</replaceable>
11093 This construct is similar to a <literal>=</literal> row comparison,
11094 but it does not yield null for null inputs. Instead, any null value is
11095 considered unequal to (distinct from) any non-null value, and any two
11096 nulls are considered equal (not distinct). Thus the result will always
11097 be either true or false, never null.
11102 The SQL specification requires row-wise comparison to return NULL if the
11103 result depends on comparing two NULL values or a NULL and a non-NULL.
11104 <productname>PostgreSQL</productname> does this only when comparing the
11105 results of two row constructors or comparing a row constructor to the
11106 output of a subquery (as in <xref linkend="functions-subquery">).
11107 In other contexts where two composite-type values are compared, two
11108 NULL field values are considered equal, and a NULL is considered larger
11109 than a non-NULL. This is necessary in order to have consistent sorting
11110 and indexing behavior for composite types.
11117 <sect1 id="functions-srf">
11118 <title>Set Returning Functions</title>
11120 <indexterm zone="functions-srf">
11121 <primary>set returning functions</primary>
11122 <secondary>functions</secondary>
11126 <primary>generate_series</primary>
11130 This section describes functions that possibly return more than one row.
11131 Currently the only functions in this class are series generating functions,
11132 as detailed in <xref linkend="functions-srf-series"> and
11133 <xref linkend="functions-srf-subscripts">.
11136 <table id="functions-srf-series">
11137 <title>Series Generating Functions</title>
11141 <entry>Function</entry>
11142 <entry>Argument Type</entry>
11143 <entry>Return Type</entry>
11144 <entry>Description</entry>
11150 <entry><literal><function>generate_series</function>(<parameter>start</parameter>, <parameter>stop</parameter>)</literal></entry>
11151 <entry><type>int</type> or <type>bigint</type></entry>
11152 <entry><type>setof int</type> or <type>setof bigint</type> (same as argument type)</entry>
11154 Generate a series of values, from <parameter>start</parameter> to <parameter>stop</parameter>
11155 with a step size of one
11160 <entry><literal><function>generate_series</function>(<parameter>start</parameter>, <parameter>stop</parameter>, <parameter>step</parameter>)</literal></entry>
11161 <entry><type>int</type> or <type>bigint</type></entry>
11162 <entry><type>setof int</type> or <type>setof bigint</type> (same as argument type)</entry>
11164 Generate a series of values, from <parameter>start</parameter> to <parameter>stop</parameter>
11165 with a step size of <parameter>step</parameter>
11170 <entry><literal><function>generate_series</function>(<parameter>start</parameter>, <parameter>stop</parameter>, <parameter>step</parameter> <type>interval</>)</literal></entry>
11171 <entry><type>timestamp</type> or <type>timestamp with time zone</type></entry>
11172 <entry><type>setof timestamp</type> or <type>setof timestamp with time zone</type> (same as argument type)</entry>
11174 Generate a series of values, from <parameter>start</parameter> to <parameter>stop</parameter>
11175 with a step size of <parameter>step</parameter>
11184 When <parameter>step</parameter> is positive, zero rows are returned if
11185 <parameter>start</parameter> is greater than <parameter>stop</parameter>.
11186 Conversely, when <parameter>step</parameter> is negative, zero rows are
11187 returned if <parameter>start</parameter> is less than <parameter>stop</parameter>.
11188 Zero rows are also returned for <literal>NULL</literal> inputs. It is an error
11189 for <parameter>step</parameter> to be zero. Some examples follow:
11191 SELECT * FROM generate_series(2,4);
11199 SELECT * FROM generate_series(5,1,-2);
11207 SELECT * FROM generate_series(4,3);
11212 -- this example relies on the date-plus-integer operator
11213 SELECT current_date + s.a AS dates FROM generate_series(0,14,7) AS s(a);
11221 SELECT * FROM generate_series('2008-03-01 00:00'::timestamp,
11222 '2008-03-04 12:00', '10 hours');
11224 ---------------------
11225 2008-03-01 00:00:00
11226 2008-03-01 10:00:00
11227 2008-03-01 20:00:00
11228 2008-03-02 06:00:00
11229 2008-03-02 16:00:00
11230 2008-03-03 02:00:00
11231 2008-03-03 12:00:00
11232 2008-03-03 22:00:00
11233 2008-03-04 08:00:00
11238 <table id="functions-srf-subscripts">
11239 <title>Subscript Generating Functions</title>
11243 <entry>Function</entry>
11244 <entry>Return Type</entry>
11245 <entry>Description</entry>
11251 <entry><literal><function>generate_subscripts</function>(<parameter>array anyarray</parameter>, <parameter>dim int</parameter>)</literal></entry>
11252 <entry><type>setof int</type></entry>
11254 Generate a series comprising the given array's subscripts.
11259 <entry><literal><function>generate_subscripts</function>(<parameter>array anyarray</parameter>, <parameter>dim int</parameter>, <parameter>reverse boolean</parameter>)</literal></entry>
11260 <entry><type>setof int</type></entry>
11262 Generate a series comprising the given array's subscripts. When
11263 <parameter>reverse</parameter> is true, the series is returned in
11273 <primary>generate_subscripts</primary>
11277 <function>generate_subscripts</> is a convenience function that generates
11278 the set of valid subscripts for the specified dimension of the given
11280 Zero rows are returned for arrays that do not have the requested dimension,
11281 or for NULL arrays (but valid subscripts are returned for NULL array
11282 elements). Some examples follow:
11285 select generate_subscripts('{NULL,1,NULL,2}'::int[], 1) as s;
11294 -- presenting an array, the subscript and the subscripted
11295 -- value requires a subquery
11296 select * from arrays;
11298 --------------------
11303 select a as array, s as subscript, a[s] as value
11304 from (select generate_subscripts(a, 1) as s, a from arrays) foo;
11305 array | subscript | value
11306 -----------+-----------+-------
11309 {100,200} | 1 | 100
11310 {100,200} | 2 | 200
11313 -- unnest a 2D array
11314 create or replace function unnest2(anyarray)
11315 returns setof anyelement as $$
11317 from generate_subscripts($1,1) g1(i),
11318 generate_subscripts($1,2) g2(j);
11319 $$ language sql immutable;
11321 postgres=# select * from unnest2(array[[1,2],[3,4]]);
11334 <sect1 id="functions-info">
11335 <title>System Information Functions</title>
11338 <xref linkend="functions-info-session-table"> shows several
11339 functions that extract session and system information.
11343 In addition to the functions listed in this section, there are a number of
11344 functions related to the statistics system that also provide system
11345 information. See <xref linkend="monitoring-stats-views"> for more
11349 <table id="functions-info-session-table">
11350 <title>Session Information Functions</title>
11353 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
11358 <entry><literal><function>current_catalog</function></literal></entry>
11359 <entry><type>name</type></entry>
11360 <entry>name of current database (called <quote>catalog</quote> in the SQL standard)</entry>
11364 <entry><literal><function>current_database</function>()</literal></entry>
11365 <entry><type>name</type></entry>
11366 <entry>name of current database</entry>
11370 <entry><literal><function>current_schema</function>[()]</literal></entry>
11371 <entry><type>name</type></entry>
11372 <entry>name of current schema</entry>
11376 <entry><literal><function>current_schemas</function>(<type>boolean</type>)</literal></entry>
11377 <entry><type>name[]</type></entry>
11378 <entry>names of schemas in search path optionally including implicit schemas</entry>
11382 <entry><literal><function>current_user</function></literal></entry>
11383 <entry><type>name</type></entry>
11384 <entry>user name of current execution context</entry>
11388 <entry><literal><function>current_query</function></literal></entry>
11389 <entry><type>text</type></entry>
11390 <entry>text of the currently executing query, as submitted
11391 by the client (might contain more than one statement)</entry>
11395 <!-- See also the entry for this in monitoring.sgml -->
11396 <entry><literal><function>pg_backend_pid</function>()</literal></entry>
11397 <entry><type>int</type></entry>
11399 Process ID of the server process attached to the current session
11404 <entry><literal><function>inet_client_addr</function>()</literal></entry>
11405 <entry><type>inet</type></entry>
11406 <entry>address of the remote connection</entry>
11410 <entry><literal><function>inet_client_port</function>()</literal></entry>
11411 <entry><type>int</type></entry>
11412 <entry>port of the remote connection</entry>
11416 <entry><literal><function>inet_server_addr</function>()</literal></entry>
11417 <entry><type>inet</type></entry>
11418 <entry>address of the local connection</entry>
11422 <entry><literal><function>inet_server_port</function>()</literal></entry>
11423 <entry><type>int</type></entry>
11424 <entry>port of the local connection</entry>
11428 <entry><literal><function>pg_my_temp_schema</function>()</literal></entry>
11429 <entry><type>oid</type></entry>
11430 <entry>OID of session's temporary schema, or 0 if none</entry>
11434 <entry><literal><function>pg_is_other_temp_schema</function>(<type>oid</type>)</literal></entry>
11435 <entry><type>boolean</type></entry>
11436 <entry>is schema another session's temporary schema?</entry>
11440 <entry><literal><function>pg_postmaster_start_time</function>()</literal></entry>
11441 <entry><type>timestamp with time zone</type></entry>
11442 <entry>server start time</entry>
11446 <entry><literal><function>pg_conf_load_time</function>()</literal></entry>
11447 <entry><type>timestamp with time zone</type></entry>
11448 <entry>configuration load time</entry>
11452 <entry><literal><function>session_user</function></literal></entry>
11453 <entry><type>name</type></entry>
11454 <entry>session user name</entry>
11458 <entry><literal><function>user</function></literal></entry>
11459 <entry><type>name</type></entry>
11460 <entry>equivalent to <function>current_user</function></entry>
11464 <entry><literal><function>version</function>()</literal></entry>
11465 <entry><type>text</type></entry>
11466 <entry><productname>PostgreSQL</> version information</entry>
11473 <primary>user</primary>
11474 <secondary>current</secondary>
11478 <primary>schema</primary>
11479 <secondary>current</secondary>
11483 <primary>search path</primary>
11484 <secondary>current</secondary>
11488 <primary>current_catalog</primary>
11492 <primary>current_database</primary>
11496 <primary>current_schema</primary>
11500 <primary>current_user</primary>
11504 The <function>session_user</function> is normally the user who initiated
11505 the current database connection; but superusers can change this setting
11506 with <xref linkend="sql-set-session-authorization" endterm="sql-set-session-authorization-title">.
11507 The <function>current_user</function> is the user identifier
11508 that is applicable for permission checking. Normally it is equal
11509 to the session user, but it can be changed with
11510 <xref linkend="sql-set-role" endterm="sql-set-role-title">.
11511 It also changes during the execution of
11512 functions with the attribute <literal>SECURITY DEFINER</literal>.
11513 In Unix parlance, the session user is the <quote>real user</quote> and
11514 the current user is the <quote>effective user</quote>.
11519 <function>current_catalog</function>, <function>current_schema</function>,
11520 <function>current_user</function>, <function>session_user</function>,
11521 and <function>user</function> have special syntactic status
11522 in <acronym>SQL</acronym>: they must be called without trailing
11523 parentheses (optional in PostgreSQL in the case
11524 of <function>current_schema</function>).
11529 <function>current_schema</function> returns the name of the schema that is
11530 first in the search path (or a null value if the search path is
11531 empty). This is the schema that will be used for any tables or
11532 other named objects that are created without specifying a target schema.
11533 <function>current_schemas(boolean)</function> returns an array of the names of all
11534 schemas presently in the search path. The Boolean option determines whether or not
11535 implicitly included system schemas such as <literal>pg_catalog</> are included in the
11536 returned search path.
11541 The search path can be altered at run time. The command is:
11543 SET search_path TO <replaceable>schema</> <optional>, <replaceable>schema</>, ...</optional>
11549 <primary>inet_client_addr</primary>
11553 <primary>inet_client_port</primary>
11557 <primary>inet_server_addr</primary>
11561 <primary>inet_server_port</primary>
11565 <function>inet_client_addr</function> returns the IP address of the
11566 current client, and <function>inet_client_port</function> returns the
11568 <function>inet_server_addr</function> returns the IP address on which
11569 the server accepted the current connection, and
11570 <function>inet_server_port</function> returns the port number.
11571 All these functions return NULL if the current connection is via a
11572 Unix-domain socket.
11576 <primary>pg_my_temp_schema</primary>
11580 <primary>pg_is_other_temp_schema</primary>
11584 <function>pg_my_temp_schema</function> returns the OID of the current
11585 session's temporary schema, or 0 if it has none (because no
11586 temporary tables have been created).
11587 <function>pg_is_other_temp_schema</function> returns true if the
11588 given OID is the OID of another session's temporary schema.
11589 (This can be useful, for example, to exclude other sessions' temporary
11590 tables from a catalog display.)
11594 <primary>pg_postmaster_start_time</primary>
11598 <function>pg_postmaster_start_time</function> returns the
11599 <type>timestamp with time zone</type> when the
11604 <primary>pg_conf_load_time</primary>
11608 <function>pg_conf_load_time</function> returns the
11609 <type>timestamp with time zone</type> when the
11610 server configuration files were last loaded.
11611 (If the current session was alive at the time, this will be the time
11612 when the session itself re-read the configuration files, so the
11613 reading will vary a little in different sessions. Otherwise it is
11614 the time when the postmaster process re-read the configuration files.)
11618 <primary>version</primary>
11622 <function>version</function> returns a string describing the
11623 <productname>PostgreSQL</productname> server's version.
11627 <primary>privilege</primary>
11628 <secondary>querying</secondary>
11632 <xref linkend="functions-info-access-table"> lists functions that
11633 allow the user to query object access privileges programmatically.
11634 See <xref linkend="ddl-priv"> for more information about
11638 <table id="functions-info-access-table">
11639 <title>Access Privilege Inquiry Functions</title>
11642 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
11647 <entry><literal><function>has_any_column_privilege</function>(<parameter>user</parameter>,
11648 <parameter>table</parameter>,
11649 <parameter>privilege</parameter>)</literal>
11651 <entry><type>boolean</type></entry>
11652 <entry>does user have privilege for any column of table</entry>
11655 <entry><literal><function>has_any_column_privilege</function>(<parameter>table</parameter>,
11656 <parameter>privilege</parameter>)</literal>
11658 <entry><type>boolean</type></entry>
11659 <entry>does current user have privilege for any column of table</entry>
11662 <entry><literal><function>has_column_privilege</function>(<parameter>user</parameter>,
11663 <parameter>table</parameter>,
11664 <parameter>column</parameter>,
11665 <parameter>privilege</parameter>)</literal>
11667 <entry><type>boolean</type></entry>
11668 <entry>does user have privilege for column</entry>
11671 <entry><literal><function>has_column_privilege</function>(<parameter>table</parameter>,
11672 <parameter>column</parameter>,
11673 <parameter>privilege</parameter>)</literal>
11675 <entry><type>boolean</type></entry>
11676 <entry>does current user have privilege for column</entry>
11679 <entry><literal><function>has_database_privilege</function>(<parameter>user</parameter>,
11680 <parameter>database</parameter>,
11681 <parameter>privilege</parameter>)</literal>
11683 <entry><type>boolean</type></entry>
11684 <entry>does user have privilege for database</entry>
11687 <entry><literal><function>has_database_privilege</function>(<parameter>database</parameter>,
11688 <parameter>privilege</parameter>)</literal>
11690 <entry><type>boolean</type></entry>
11691 <entry>does current user have privilege for database</entry>
11694 <entry><literal><function>has_foreign_data_wrapper_privilege</function>(<parameter>user</parameter>,
11695 <parameter>fdw</parameter>,
11696 <parameter>privilege</parameter>)</literal>
11698 <entry><type>boolean</type></entry>
11699 <entry>does user have privilege for foreign-data wrapper</entry>
11702 <entry><literal><function>has_foreign_data_wrapper_privilege</function>(<parameter>fdw</parameter>,
11703 <parameter>privilege</parameter>)</literal>
11705 <entry><type>boolean</type></entry>
11706 <entry>does current user have privilege for foreign-data wrapper</entry>
11709 <entry><literal><function>has_function_privilege</function>(<parameter>user</parameter>,
11710 <parameter>function</parameter>,
11711 <parameter>privilege</parameter>)</literal>
11713 <entry><type>boolean</type></entry>
11714 <entry>does user have privilege for function</entry>
11717 <entry><literal><function>has_function_privilege</function>(<parameter>function</parameter>,
11718 <parameter>privilege</parameter>)</literal>
11720 <entry><type>boolean</type></entry>
11721 <entry>does current user have privilege for function</entry>
11724 <entry><literal><function>has_language_privilege</function>(<parameter>user</parameter>,
11725 <parameter>language</parameter>,
11726 <parameter>privilege</parameter>)</literal>
11728 <entry><type>boolean</type></entry>
11729 <entry>does user have privilege for language</entry>
11732 <entry><literal><function>has_language_privilege</function>(<parameter>language</parameter>,
11733 <parameter>privilege</parameter>)</literal>
11735 <entry><type>boolean</type></entry>
11736 <entry>does current user have privilege for language</entry>
11739 <entry><literal><function>has_schema_privilege</function>(<parameter>user</parameter>,
11740 <parameter>schema</parameter>,
11741 <parameter>privilege</parameter>)</literal>
11743 <entry><type>boolean</type></entry>
11744 <entry>does user have privilege for schema</entry>
11747 <entry><literal><function>has_schema_privilege</function>(<parameter>schema</parameter>,
11748 <parameter>privilege</parameter>)</literal>
11750 <entry><type>boolean</type></entry>
11751 <entry>does current user have privilege for schema</entry>
11754 <entry><literal><function>has_server_privilege</function>(<parameter>user</parameter>,
11755 <parameter>server</parameter>,
11756 <parameter>privilege</parameter>)</literal>
11758 <entry><type>boolean</type></entry>
11759 <entry>does user have privilege for foreign server</entry>
11762 <entry><literal><function>has_server_privilege</function>(<parameter>server</parameter>,
11763 <parameter>privilege</parameter>)</literal>
11765 <entry><type>boolean</type></entry>
11766 <entry>does current user have privilege for foreign server</entry>
11769 <entry><literal><function>has_table_privilege</function>(<parameter>user</parameter>,
11770 <parameter>table</parameter>,
11771 <parameter>privilege</parameter>)</literal>
11773 <entry><type>boolean</type></entry>
11774 <entry>does user have privilege for table</entry>
11777 <entry><literal><function>has_table_privilege</function>(<parameter>table</parameter>,
11778 <parameter>privilege</parameter>)</literal>
11780 <entry><type>boolean</type></entry>
11781 <entry>does current user have privilege for table</entry>
11784 <entry><literal><function>has_tablespace_privilege</function>(<parameter>user</parameter>,
11785 <parameter>tablespace</parameter>,
11786 <parameter>privilege</parameter>)</literal>
11788 <entry><type>boolean</type></entry>
11789 <entry>does user have privilege for tablespace</entry>
11792 <entry><literal><function>has_tablespace_privilege</function>(<parameter>tablespace</parameter>,
11793 <parameter>privilege</parameter>)</literal>
11795 <entry><type>boolean</type></entry>
11796 <entry>does current user have privilege for tablespace</entry>
11799 <entry><literal><function>pg_has_role</function>(<parameter>user</parameter>,
11800 <parameter>role</parameter>,
11801 <parameter>privilege</parameter>)</literal>
11803 <entry><type>boolean</type></entry>
11804 <entry>does user have privilege for role</entry>
11807 <entry><literal><function>pg_has_role</function>(<parameter>role</parameter>,
11808 <parameter>privilege</parameter>)</literal>
11810 <entry><type>boolean</type></entry>
11811 <entry>does current user have privilege for role</entry>
11818 <primary>has_any_column_privilege</primary>
11821 <primary>has_column_privilege</primary>
11824 <primary>has_database_privilege</primary>
11827 <primary>has_function_privilege</primary>
11830 <primary>has_foreign_data_wrapper_privilege</primary>
11833 <primary>has_language_privilege</primary>
11836 <primary>has_schema_privilege</primary>
11839 <primary>has_server_privilege</primary>
11842 <primary>has_table_privilege</primary>
11845 <primary>has_tablespace_privilege</primary>
11848 <primary>pg_has_role</primary>
11852 <function>has_table_privilege</function> checks whether a user
11853 can access a table in a particular way. The user can be
11854 specified by name or by OID
11855 (<literal>pg_authid.oid</literal>), or if the argument is
11857 <function>current_user</function> is assumed. The table can be specified
11858 by name or by OID. (Thus, there are actually six variants of
11859 <function>has_table_privilege</function>, which can be distinguished by
11860 the number and types of their arguments.) When specifying by name,
11861 the name can be schema-qualified if necessary.
11862 The desired access privilege type
11863 is specified by a text string, which must evaluate to one of the
11864 values <literal>SELECT</literal>, <literal>INSERT</literal>,
11865 <literal>UPDATE</literal>, <literal>DELETE</literal>, <literal>TRUNCATE</>,
11866 <literal>REFERENCES</literal>, or <literal>TRIGGER</literal>. Optionally,
11867 <literal>WITH GRANT OPTION</> can be added to a privilege type to test
11868 whether the privilege is held with grant option. Also, multiple privilege
11869 types can be listed separated by commas, in which case the result will
11870 be <literal>true</> if any of the listed privileges is held.
11871 (Case of the privilege string is not significant, and extra whitespace
11872 is allowed between but not within privilege names.)
11875 SELECT has_table_privilege('myschema.mytable', 'select');
11876 SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');
11881 <function>has_any_column_privilege</function> checks whether a user can
11882 access any column of a table in a particular way; its argument possibilities
11883 are analogous to <function>has_table_privilege</>,
11884 except that the desired access privilege type must evaluate to some
11886 <literal>SELECT</literal>,
11887 <literal>INSERT</literal>,
11888 <literal>UPDATE</literal>, or
11889 <literal>REFERENCES</literal>. Note that having any of these privileges
11890 at the table level implicitly grants it for each column of the table,
11891 so <function>has_any_column_privilege</function> will always return
11892 <literal>true</> if <function>has_table_privilege</> does for the same
11893 arguments. But <function>has_any_column_privilege</> also succeeds if
11894 there is a column-level grant of the privilege for at least one column.
11898 <function>has_column_privilege</function> checks whether a user
11899 can access a column in a particular way; its argument possibilities
11900 are analogous to <function>has_table_privilege</function>,
11901 with the addition that the column can be specified either by name
11902 or attribute number.
11903 The desired access privilege type must evaluate to some combination of
11904 <literal>SELECT</literal>,
11905 <literal>INSERT</literal>,
11906 <literal>UPDATE</literal>, or
11907 <literal>REFERENCES</literal>. Note that having any of these privileges
11908 at the table level implicitly grants it for each column of the table.
11912 <function>has_database_privilege</function> checks whether a user
11913 can access a database in a particular way; its argument possibilities
11914 are analogous to <function>has_table_privilege</function>.
11915 The desired access privilege type must evaluate to some combination of
11916 <literal>CREATE</literal>,
11917 <literal>CONNECT</literal>,
11918 <literal>TEMPORARY</literal>, or
11919 <literal>TEMP</literal> (which is equivalent to
11920 <literal>TEMPORARY</literal>).
11924 <function>has_function_privilege</function> checks whether a user
11925 can access a function in a particular way; its argument possibilities
11926 are analogous to <function>has_table_privilege</function>.
11927 When specifying a function by a text string rather than by OID,
11928 the allowed input is the same as for the <type>regprocedure</> data type
11929 (see <xref linkend="datatype-oid">).
11930 The desired access privilege type must evaluate to
11931 <literal>EXECUTE</literal>.
11934 SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');
11939 <function>has_foreign_data_wrapper_privilege</function> checks whether a user
11940 can access a foreign-data wrapper in a particular way; its argument possibilities
11941 are analogous to <function>has_table_privilege</function>.
11942 The desired access privilege type must evaluate to
11943 <literal>USAGE</literal>.
11947 <function>has_language_privilege</function> checks whether a user
11948 can access a procedural language in a particular way; its argument possibilities
11949 are analogous to <function>has_table_privilege</function>.
11950 The desired access privilege type must evaluate to
11951 <literal>USAGE</literal>.
11955 <function>has_schema_privilege</function> checks whether a user
11956 can access a schema in a particular way; its argument possibilities
11957 are analogous to <function>has_table_privilege</function>.
11958 The desired access privilege type must evaluate to some combination of
11959 <literal>CREATE</literal> or
11960 <literal>USAGE</literal>.
11964 <function>has_server_privilege</function> checks whether a user
11965 can access a foreign server in a particular way; its argument possibilities
11966 are analogous to <function>has_table_privilege</function>.
11967 The desired access privilege type must evaluate to
11968 <literal>USAGE</literal>.
11972 <function>has_tablespace_privilege</function> checks whether a user
11973 can access a tablespace in a particular way; its argument possibilities
11974 are analogous to <function>has_table_privilege</function>.
11975 The desired access privilege type must evaluate to
11976 <literal>CREATE</literal>.
11980 <function>pg_has_role</function> checks whether a user
11981 can access a role in a particular way; its argument possibilities
11982 are analogous to <function>has_table_privilege</function>.
11983 The desired access privilege type must evaluate to some combination of
11984 <literal>MEMBER</literal> or
11985 <literal>USAGE</literal>.
11986 <literal>MEMBER</literal> denotes direct or indirect membership in
11987 the role (that is, the right to do <command>SET ROLE</>), while
11988 <literal>USAGE</literal> denotes whether the privileges of the role
11989 are immediately available without doing <command>SET ROLE</>.
11993 <xref linkend="functions-info-schema-table"> shows functions that
11994 determine whether a certain object is <firstterm>visible</> in the
11995 current schema search path.
11996 For example, a table is said to be visible if its
11997 containing schema is in the search path and no table of the same
11998 name appears earlier in the search path. This is equivalent to the
11999 statement that the table can be referenced by name without explicit
12000 schema qualification. To list the names of all visible tables:
12002 SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
12006 <table id="functions-info-schema-table">
12007 <title>Schema Visibility Inquiry Functions</title>
12010 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
12015 <entry><literal><function>pg_conversion_is_visible</function>(<parameter>conversion_oid</parameter>)</literal>
12017 <entry><type>boolean</type></entry>
12018 <entry>is conversion visible in search path</entry>
12021 <entry><literal><function>pg_function_is_visible</function>(<parameter>function_oid</parameter>)</literal>
12023 <entry><type>boolean</type></entry>
12024 <entry>is function visible in search path</entry>
12027 <entry><literal><function>pg_operator_is_visible</function>(<parameter>operator_oid</parameter>)</literal>
12029 <entry><type>boolean</type></entry>
12030 <entry>is operator visible in search path</entry>
12033 <entry><literal><function>pg_opclass_is_visible</function>(<parameter>opclass_oid</parameter>)</literal>
12035 <entry><type>boolean</type></entry>
12036 <entry>is operator class visible in search path</entry>
12039 <entry><literal><function>pg_table_is_visible</function>(<parameter>table_oid</parameter>)</literal>
12041 <entry><type>boolean</type></entry>
12042 <entry>is table visible in search path</entry>
12045 <entry><literal><function>pg_ts_config_is_visible</function>(<parameter>config_oid</parameter>)</literal>
12047 <entry><type>boolean</type></entry>
12048 <entry>is text search configuration visible in search path</entry>
12051 <entry><literal><function>pg_ts_dict_is_visible</function>(<parameter>dict_oid</parameter>)</literal>
12053 <entry><type>boolean</type></entry>
12054 <entry>is text search dictionary visible in search path</entry>
12057 <entry><literal><function>pg_ts_parser_is_visible</function>(<parameter>parser_oid</parameter>)</literal>
12059 <entry><type>boolean</type></entry>
12060 <entry>is text search parser visible in search path</entry>
12063 <entry><literal><function>pg_ts_template_is_visible</function>(<parameter>template_oid</parameter>)</literal>
12065 <entry><type>boolean</type></entry>
12066 <entry>is text search template visible in search path</entry>
12069 <entry><literal><function>pg_type_is_visible</function>(<parameter>type_oid</parameter>)</literal>
12071 <entry><type>boolean</type></entry>
12072 <entry>is type (or domain) visible in search path</entry>
12079 <primary>pg_conversion_is_visible</primary>
12082 <primary>pg_function_is_visible</primary>
12085 <primary>pg_operator_is_visible</primary>
12088 <primary>pg_opclass_is_visible</primary>
12091 <primary>pg_table_is_visible</primary>
12094 <primary>pg_ts_config_is_visible</primary>
12097 <primary>pg_ts_dict_is_visible</primary>
12100 <primary>pg_ts_parser_is_visible</primary>
12103 <primary>pg_ts_template_is_visible</primary>
12106 <primary>pg_type_is_visible</primary>
12110 Each function performs the visibility check for one type of database
12111 object. Note that <function>pg_table_is_visible</function> can also be used
12112 with views, indexes and sequences; <function>pg_type_is_visible</function>
12113 can also be used with domains. For functions and operators, an object in
12114 the search path is visible if there is no object of the same name
12115 <emphasis>and argument data type(s)</> earlier in the path. For operator
12116 classes, both name and associated index access method are considered.
12120 All these functions require object OIDs to identify the object to be
12121 checked. If you want to test an object by name, it is convenient to use
12122 the OID alias types (<type>regclass</>, <type>regtype</>,
12123 <type>regprocedure</>, <type>regoperator</>, <type>regconfig</>,
12124 or <type>regdictionary</>),
12127 SELECT pg_type_is_visible('myschema.widget'::regtype);
12129 Note that it would not make much sense to test a non-schema-qualified
12130 type name in this way — if the name can be recognized at all, it must be visible.
12134 <primary>format_type</primary>
12138 <primary>pg_get_keywords</primary>
12142 <primary>pg_get_viewdef</primary>
12146 <primary>pg_get_ruledef</primary>
12150 <primary>pg_get_functiondef</primary>
12154 <primary>pg_get_function_arguments</primary>
12158 <primary>pg_get_function_identity_arguments</primary>
12162 <primary>pg_get_function_result</primary>
12166 <primary>pg_get_indexdef</primary>
12170 <primary>pg_get_triggerdef</primary>
12174 <primary>pg_get_constraintdef</primary>
12178 <primary>pg_get_expr</primary>
12182 <primary>pg_get_userbyid</primary>
12186 <primary>pg_get_serial_sequence</primary>
12190 <primary>pg_tablespace_databases</primary>
12194 <primary>pg_typeof</primary>
12198 <xref linkend="functions-info-catalog-table"> lists functions that
12199 extract information from the system catalogs.
12202 <table id="functions-info-catalog-table">
12203 <title>System Catalog Information Functions</title>
12206 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
12211 <entry><literal><function>format_type</function>(<parameter>type_oid</parameter>, <parameter>typemod</>)</literal></entry>
12212 <entry><type>text</type></entry>
12213 <entry>get SQL name of a data type</entry>
12216 <entry><literal><function>pg_get_keywords</function>()</literal></entry>
12217 <entry><type>setof record</type></entry>
12218 <entry>get list of SQL keywords and their categories</entry>
12221 <entry><literal><function>pg_get_constraintdef</function>(<parameter>constraint_oid</parameter>)</literal></entry>
12222 <entry><type>text</type></entry>
12223 <entry>get definition of a constraint</entry>
12226 <entry><literal><function>pg_get_constraintdef</function>(<parameter>constraint_oid</parameter>, <parameter>pretty_bool</>)</literal></entry>
12227 <entry><type>text</type></entry>
12228 <entry>get definition of a constraint</entry>
12231 <entry><literal><function>pg_get_expr</function>(<parameter>expr_text</parameter>, <parameter>relation_oid</>)</literal></entry>
12232 <entry><type>text</type></entry>
12233 <entry>decompile internal form of an expression, assuming that any Vars
12234 in it refer to the relation indicated by the second parameter</entry>
12237 <entry><literal><function>pg_get_expr</function>(<parameter>expr_text</parameter>, <parameter>relation_oid</>, <parameter>pretty_bool</>)</literal></entry>
12238 <entry><type>text</type></entry>
12239 <entry>decompile internal form of an expression, assuming that any Vars
12240 in it refer to the relation indicated by the second parameter</entry>
12243 <entry><literal><function>pg_get_functiondef</function>(<parameter>func_oid</parameter>)</literal></entry>
12244 <entry><type>text</type></entry>
12245 <entry>get definition of a function</entry>
12248 <entry><literal><function>pg_get_function_arguments</function>(<parameter>func_oid</parameter>)</literal></entry>
12249 <entry><type>text</type></entry>
12250 <entry>get argument list of function's definition (with default values)</entry>
12253 <entry><literal><function>pg_get_function_identity_arguments</function>(<parameter>func_oid</parameter>)</literal></entry>
12254 <entry><type>text</type></entry>
12255 <entry>get argument list to identify a function (without default values)</entry>
12258 <entry><literal><function>pg_get_function_result</function>(<parameter>func_oid</parameter>)</literal></entry>
12259 <entry><type>text</type></entry>
12260 <entry>get <literal>RETURNS</> clause for function</entry>
12263 <entry><literal><function>pg_get_indexdef</function>(<parameter>index_oid</parameter>)</literal></entry>
12264 <entry><type>text</type></entry>
12265 <entry>get <command>CREATE INDEX</> command for index</entry>
12268 <entry><literal><function>pg_get_indexdef</function>(<parameter>index_oid</parameter>, <parameter>column_no</>, <parameter>pretty_bool</>)</literal></entry>
12269 <entry><type>text</type></entry>
12270 <entry>get <command>CREATE INDEX</> command for index,
12271 or definition of just one index column when
12272 <parameter>column_no</> is not zero</entry>
12275 <entry><literal><function>pg_get_ruledef</function>(<parameter>rule_oid</parameter>)</literal></entry>
12276 <entry><type>text</type></entry>
12277 <entry>get <command>CREATE RULE</> command for rule</entry>
12280 <entry><literal><function>pg_get_ruledef</function>(<parameter>rule_oid</parameter>, <parameter>pretty_bool</>)</literal></entry>
12281 <entry><type>text</type></entry>
12282 <entry>get <command>CREATE RULE</> command for rule</entry>
12285 <entry><literal><function>pg_get_serial_sequence</function>(<parameter>table_name</parameter>, <parameter>column_name</parameter>)</literal></entry>
12286 <entry><type>text</type></entry>
12287 <entry>get name of the sequence that a <type>serial</type> or <type>bigserial</type> column
12291 <entry><function>pg_get_triggerdef</function>(<parameter>trigger_oid</parameter>)</entry>
12292 <entry><type>text</type></entry>
12293 <entry>get <command>CREATE [ CONSTRAINT ] TRIGGER</> command for trigger</entry>
12296 <entry><literal><function>pg_get_userbyid</function>(<parameter>roleid</parameter>)</literal></entry>
12297 <entry><type>name</type></entry>
12298 <entry>get role name with given OID</entry>
12301 <entry><literal><function>pg_get_viewdef</function>(<parameter>view_name</parameter>)</literal></entry>
12302 <entry><type>text</type></entry>
12303 <entry>get underlying <command>SELECT</command> command for view (<emphasis>deprecated</emphasis>)</entry>
12306 <entry><literal><function>pg_get_viewdef</function>(<parameter>view_name</parameter>, <parameter>pretty_bool</>)</literal></entry>
12307 <entry><type>text</type></entry>
12308 <entry>get underlying <command>SELECT</command> command for view (<emphasis>deprecated</emphasis>)</entry>
12311 <entry><literal><function>pg_get_viewdef</function>(<parameter>view_oid</parameter>)</literal></entry>
12312 <entry><type>text</type></entry>
12313 <entry>get underlying <command>SELECT</command> command for view</entry>
12316 <entry><literal><function>pg_get_viewdef</function>(<parameter>view_oid</parameter>, <parameter>pretty_bool</>)</literal></entry>
12317 <entry><type>text</type></entry>
12318 <entry>get underlying <command>SELECT</command> command for view</entry>
12321 <entry><literal><function>pg_tablespace_databases</function>(<parameter>tablespace_oid</parameter>)</literal></entry>
12322 <entry><type>setof oid</type></entry>
12323 <entry>get the set of database OIDs that have objects in the tablespace</entry>
12326 <entry><literal><function>pg_typeof</function>(<parameter>any</parameter>)</literal></entry>
12327 <entry><type>regtype</type></entry>
12328 <entry>get the data type of any value</entry>
12335 <function>format_type</function> returns the SQL name of a data type that
12336 is identified by its type OID and possibly a type modifier. Pass NULL
12337 for the type modifier if no specific modifier is known.
12341 <function>pg_get_keywords</function> returns a set of records describing
12342 the SQL keywords recognized by the server. The <structfield>word</> column
12343 contains the keyword. The <structfield>catcode</> column contains a
12344 category code: <literal>U</> for unreserved, <literal>C</> for column name,
12345 <literal>T</> for type or function name, or <literal>R</> for reserved.
12346 The <structfield>catdesc</> column contains a possibly-localized string
12347 describing the category.
12351 <function>pg_get_constraintdef</function>,
12352 <function>pg_get_indexdef</function>, <function>pg_get_ruledef</function>,
12353 and <function>pg_get_triggerdef</function>, respectively reconstruct the
12354 creating command for a constraint, index, rule, or trigger. (Note that this
12355 is a decompiled reconstruction, not the original text of the command.)
12356 <function>pg_get_expr</function> decompiles the internal form of an
12357 individual expression, such as the default value for a column. It can be
12358 useful when examining the contents of system catalogs.
12359 <function>pg_get_viewdef</function> reconstructs the <command>SELECT</>
12360 query that defines a view. Most of these functions come in two variants,
12361 one of which can optionally <quote>pretty-print</> the result. The
12362 pretty-printed format is more readable, but the default format is more
12363 likely to be interpreted the same way by future versions of
12364 <productname>PostgreSQL</>; avoid using pretty-printed output for dump
12365 purposes. Passing <literal>false</> for the pretty-print parameter yields
12366 the same result as the variant that does not have the parameter at all.
12370 <function>pg_get_functiondef</> returns a complete
12371 <command>CREATE OR REPLACE FUNCTION</> statement for a function.
12372 <function>pg_get_function_arguments</function> returns the argument list
12373 of a function, in the form it would need to appear in within
12374 <command>CREATE FUNCTION</>.
12375 <function>pg_get_function_result</function> similarly returns the
12376 appropriate <literal>RETURNS</> clause for the function.
12377 <function>pg_get_function_identity_arguments</function> returns the
12378 argument list necessary to identify a function, in the form it
12379 would need to appear in within <command>ALTER FUNCTION</>, for
12380 instance. This form omits default values.
12384 <function>pg_get_serial_sequence</function> returns the name of the
12385 sequence associated with a column, or NULL if no sequence is associated
12386 with the column. The first input parameter is a table name with
12387 optional schema, and the second parameter is a column name. Because
12388 the first parameter is potentially a schema and table, it is not treated
12389 as a double-quoted identifier, meaning it is lowercased by default,
12390 while the second parameter, being just a column name, is treated as
12391 double-quoted and has its case preserved. The function returns a value
12392 suitably formatted for passing to sequence functions (see <xref
12393 linkend="functions-sequence">). This association can be modified or
12394 removed with <command>ALTER SEQUENCE OWNED BY</>. (The function
12395 probably should have been called
12396 <function>pg_get_owned_sequence</function>; its current name reflects the fact
12397 that it's typically used with <type>serial</> or <type>bigserial</>
12402 <function>pg_get_userbyid</function> extracts a role's name given
12407 <function>pg_tablespace_databases</function> allows a tablespace to be
12408 examined. It returns the set of OIDs of databases that have objects stored
12409 in the tablespace. If this function returns any rows, the tablespace is not
12410 empty and cannot be dropped. To display the specific objects populating the
12411 tablespace, you will need to connect to the databases identified by
12412 <function>pg_tablespace_databases</function> and query their
12413 <structname>pg_class</> catalogs.
12417 <function>pg_typeof</function> returns the OID of the data type of the
12418 value that is passed to it. This can be helpful for troubleshooting or
12419 dynamically constructing SQL queries. The function is declared as
12420 returning <type>regtype</>, which is an OID alias type (see
12421 <xref linkend="datatype-oid">); this means that it is the same as an
12422 OID for comparison purposes but displays as a type name. For example:
12424 SELECT pg_typeof(33);
12431 SELECT typlen FROM pg_type WHERE oid = pg_typeof(33);
12440 <primary>col_description</primary>
12444 <primary>obj_description</primary>
12448 <primary>shobj_description</primary>
12452 <primary>comment</primary>
12453 <secondary sortas="database objects">about database objects</secondary>
12457 The functions shown in <xref linkend="functions-info-comment-table">
12458 extract comments previously stored with the <xref linkend="sql-comment"
12459 endterm="sql-comment-title"> command. A null value is returned if no
12460 comment could be found for the specified parameters.
12463 <table id="functions-info-comment-table">
12464 <title>Comment Information Functions</title>
12467 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
12472 <entry><literal><function>col_description</function>(<parameter>table_oid</parameter>, <parameter>column_number</parameter>)</literal></entry>
12473 <entry><type>text</type></entry>
12474 <entry>get comment for a table column</entry>
12477 <entry><literal><function>obj_description</function>(<parameter>object_oid</parameter>, <parameter>catalog_name</parameter>)</literal></entry>
12478 <entry><type>text</type></entry>
12479 <entry>get comment for a database object</entry>
12482 <entry><literal><function>obj_description</function>(<parameter>object_oid</parameter>)</literal></entry>
12483 <entry><type>text</type></entry>
12484 <entry>get comment for a database object (<emphasis>deprecated</emphasis>)</entry>
12487 <entry><literal><function>shobj_description</function>(<parameter>object_oid</parameter>, <parameter>catalog_name</parameter>)</literal></entry>
12488 <entry><type>text</type></entry>
12489 <entry>get comment for a shared database object</entry>
12496 <function>col_description</function> returns the comment for a table column,
12497 which is specified by the OID of its table and its column number.
12498 <function>obj_description</function> cannot be used for table columns since
12499 columns do not have OIDs of their own.
12503 The two-parameter form of <function>obj_description</function> returns the
12504 comment for a database object specified by its OID and the name of the
12505 containing system catalog. For example,
12506 <literal>obj_description(123456,'pg_class')</literal>
12507 would retrieve the comment for the table with OID 123456.
12508 The one-parameter form of <function>obj_description</function> requires only
12509 the object OID. It is deprecated since there is no guarantee that
12510 OIDs are unique across different system catalogs; therefore, the wrong
12511 comment might be returned.
12515 <function>shobj_description</function> is used just like
12516 <function>obj_description</function> except it is used for retrieving
12517 comments on shared objects. Some system catalogs are global to all
12518 databases within each cluster and their descriptions are stored globally
12523 <primary>txid_current</primary>
12527 <primary>txid_current_snapshot</primary>
12531 <primary>txid_snapshot_xmin</primary>
12535 <primary>txid_snapshot_xmax</primary>
12539 <primary>txid_snapshot_xip</primary>
12543 <primary>txid_visible_in_snapshot</primary>
12547 The functions shown in <xref linkend="functions-txid-snapshot">
12548 export server transaction information. The main
12549 use of these functions is to determine which transactions were committed
12550 between two snapshots.
12553 <table id="functions-txid-snapshot">
12554 <title>Transaction IDs and snapshots</title>
12557 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
12562 <entry><literal><function>txid_current</function>()</literal></entry>
12563 <entry><type>bigint</type></entry>
12564 <entry>get current transaction ID</entry>
12567 <entry><literal><function>txid_current_snapshot</function>()</literal></entry>
12568 <entry><type>txid_snapshot</type></entry>
12569 <entry>get current snapshot</entry>
12572 <entry><literal><function>txid_snapshot_xmin</function>(<parameter>txid_snapshot</parameter>)</literal></entry>
12573 <entry><type>bigint</type></entry>
12574 <entry>get xmin of snapshot</entry>
12577 <entry><literal><function>txid_snapshot_xmax</function>(<parameter>txid_snapshot</parameter>)</literal></entry>
12578 <entry><type>bigint</type></entry>
12579 <entry>get xmax of snapshot</entry>
12582 <entry><literal><function>txid_snapshot_xip</function>(<parameter>txid_snapshot</parameter>)</literal></entry>
12583 <entry><type>setof bigint</type></entry>
12584 <entry>get in-progress transaction IDs in snapshot</entry>
12587 <entry><literal><function>txid_visible_in_snapshot</function>(<parameter>bigint</parameter>, <parameter>txid_snapshot</parameter>)</literal></entry>
12588 <entry><type>boolean</type></entry>
12589 <entry>is transaction ID visible in snapshot? (do not use with subtransaction ids)</entry>
12596 The internal transaction ID type (<type>xid</>) is 32 bits wide and
12597 wraps around every 4 billion transactions. However, these functions
12598 export a 64-bit format that is extended with an <quote>epoch</> counter
12599 so it will not wrap around during the life of an installation.
12600 The data type used by these functions, <type>txid_snapshot</type>,
12601 stores information about transaction ID
12602 visibility at a particular moment in time. Its components are
12603 described in <xref linkend="functions-txid-snapshot-parts">.
12606 <table id="functions-txid-snapshot-parts">
12607 <title>Snapshot components</title>
12611 <entry>Name</entry>
12612 <entry>Description</entry>
12619 <entry><type>xmin</type></entry>
12621 Earliest transaction ID (txid) that is still active. All earlier
12622 transactions will either be committed and visible, or rolled
12628 <entry><type>xmax</type></entry>
12630 First as-yet-unassigned txid. All txids later than this are
12631 not yet started as of the time of the snapshot, and thus invisible.
12636 <entry><type>xip_list</type></entry>
12638 Active txids at the time of the snapshot. The list
12639 includes only those active txids between <literal>xmin</>
12640 and <literal>xmax</>; there might be active txids higher
12641 than xmax. A txid that is <literal>xmin <= txid <
12642 xmax</literal> and not in this list was already completed
12643 at the time of the snapshot, and thus either visible or
12644 dead according to its commit status. The list does not
12645 include txids of subtransactions.
12654 <type>txid_snapshot</>'s textual representation is
12655 <literal><replaceable>xmin</>:<replaceable>xmax</>:<replaceable>xip_list</></literal>.
12656 For example <literal>10:20:10,14,15</literal> means
12657 <literal>xmin=10, xmax=20, xip_list=10, 14, 15</literal>.
12661 <sect1 id="functions-admin">
12662 <title>System Administration Functions</title>
12665 <xref linkend="functions-admin-set-table"> shows the functions
12666 available to query and alter run-time configuration parameters.
12669 <table id="functions-admin-set-table">
12670 <title>Configuration Settings Functions</title>
12673 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
12679 <literal><function>current_setting</function>(<parameter>setting_name</parameter>)</literal>
12681 <entry><type>text</type></entry>
12682 <entry>get current value of setting</entry>
12686 <literal><function>set_config(<parameter>setting_name</parameter>,
12687 <parameter>new_value</parameter>,
12688 <parameter>is_local</parameter>)</function></literal>
12690 <entry><type>text</type></entry>
12691 <entry>set parameter and return new value</entry>
12698 <primary>SET</primary>
12702 <primary>SHOW</primary>
12706 <primary>configuration</primary>
12707 <secondary sortas="server">of the server</secondary>
12708 <tertiary>functions</tertiary>
12712 The function <function>current_setting</function> yields the
12713 current value of the setting <parameter>setting_name</parameter>.
12714 It corresponds to the <acronym>SQL</acronym> command
12715 <command>SHOW</command>. An example:
12717 SELECT current_setting('datestyle');
12727 <function>set_config</function> sets the parameter
12728 <parameter>setting_name</parameter> to
12729 <parameter>new_value</parameter>. If
12730 <parameter>is_local</parameter> is <literal>true</literal>, the
12731 new value will only apply to the current transaction. If you want
12732 the new value to apply for the current session, use
12733 <literal>false</literal> instead. The function corresponds to the
12734 SQL command <command>SET</command>. An example:
12736 SELECT set_config('log_statement_stats', 'off', false);
12746 <primary>pg_cancel_backend</primary>
12749 <primary>pg_terminate_backend</primary>
12752 <primary>pg_reload_conf</primary>
12755 <primary>pg_rotate_logfile</primary>
12759 <primary>signal</primary>
12760 <secondary sortas="backend">backend processes</secondary>
12764 The functions shown in <xref
12765 linkend="functions-admin-signal-table"> send control signals to
12766 other server processes. Use of these functions is restricted
12770 <table id="functions-admin-signal-table">
12771 <title>Server Signalling Functions</title>
12774 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
12781 <literal><function>pg_cancel_backend</function>(<parameter>pid</parameter> <type>int</>)</literal>
12783 <entry><type>boolean</type></entry>
12784 <entry>Cancel a backend's current query</entry>
12788 <literal><function>pg_terminate_backend</function>(<parameter>pid</parameter> <type>int</>)</literal>
12790 <entry><type>boolean</type></entry>
12791 <entry>Terminate a backend</entry>
12795 <literal><function>pg_reload_conf</function>()</literal>
12797 <entry><type>boolean</type></entry>
12798 <entry>Cause server processes to reload their configuration files</entry>
12802 <literal><function>pg_rotate_logfile</function>()</literal>
12804 <entry><type>boolean</type></entry>
12805 <entry>Rotate server's log file</entry>
12812 Each of these functions returns <literal>true</literal> if
12813 successful and <literal>false</literal> otherwise.
12817 <function>pg_cancel_backend</> and <function>pg_terminate_backend</>
12818 send signals (<systemitem>SIGINT</> or <systemitem>SIGTERM</>
12819 respectively) to backend processes identified by process ID.
12820 The process ID of an active backend can be found from
12821 the <structfield>procpid</structfield> column of the
12822 <structname>pg_stat_activity</structname> view, or by listing the
12823 <command>postgres</command> processes on the server using
12824 <application>ps</> on Unix or the <application>Task
12825 Manager</> on <productname>Windows</>.
12829 <function>pg_reload_conf</> sends a <systemitem>SIGHUP</> signal
12830 to the server, causing configuration files
12831 to be reloaded by all server processes.
12835 <function>pg_rotate_logfile</> signals the log-file manager to switch
12836 to a new output file immediately. This works only when the built-in
12837 log collector is running, since otherwise there is no log-file manager
12842 <primary>pg_start_backup</primary>
12845 <primary>pg_stop_backup</primary>
12848 <primary>pg_switch_xlog</primary>
12851 <primary>pg_current_xlog_location</primary>
12854 <primary>pg_current_xlog_insert_location</primary>
12857 <primary>pg_xlogfile_name_offset</primary>
12860 <primary>pg_xlogfile_name</primary>
12863 <primary>backup</primary>
12867 The functions shown in <xref
12868 linkend="functions-admin-backup-table"> assist in making on-line backups.
12869 Use of the first three functions is restricted to superusers.
12872 <table id="functions-admin-backup-table">
12873 <title>Backup Control Functions</title>
12876 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
12883 <literal><function>pg_start_backup</function>(<parameter>label</> <type>text</> <optional>, <parameter>fast</> <type>boolean</> </optional>)</literal>
12885 <entry><type>text</type></entry>
12886 <entry>Prepare for performing on-line backup</entry>
12890 <literal><function>pg_stop_backup</function>()</literal>
12892 <entry><type>text</type></entry>
12893 <entry>Finalize after performing on-line backup</entry>
12897 <literal><function>pg_switch_xlog</function>()</literal>
12899 <entry><type>text</type></entry>
12900 <entry>Force switch to a new transaction log file</entry>
12904 <literal><function>pg_current_xlog_location</function>()</literal>
12906 <entry><type>text</type></entry>
12907 <entry>Get current transaction log write location</entry>
12911 <literal><function>pg_current_xlog_insert_location</function>()</literal>
12913 <entry><type>text</type></entry>
12914 <entry>Get current transaction log insert location</entry>
12918 <literal><function>pg_xlogfile_name_offset</function>(<parameter>location</> <type>text</>)</literal>
12920 <entry><type>text</>, <type>integer</></entry>
12921 <entry>Convert transaction log location string to file name and decimal byte offset within file</entry>
12925 <literal><function>pg_xlogfile_name</function>(<parameter>location</> <type>text</>)</literal>
12927 <entry><type>text</type></entry>
12928 <entry>Convert transaction log location string to file name</entry>
12935 <function>pg_start_backup</> accepts an
12936 arbitrary user-defined label for the backup. (Typically this would be
12937 the name under which the backup dump file will be stored.) The function
12938 writes a backup label file (<filename>backup_label</>) into the
12939 database cluster's data directory, performs a checkpoint,
12940 and then returns the backup's starting transaction log location as text.
12941 The user can ignore this result value, but it is
12942 provided in case it is useful.
12944 postgres=# select pg_start_backup('label_goes_here');
12950 There is an optional boolean second parameter. If <literal>true</>,
12951 it specifies executing <function>pg_start_backup</> as quickly as
12952 possible. This forces an immediate checkpoint which will cause a
12953 spike in I/O operations, slowing any concurrently executing queries.
12957 <function>pg_stop_backup</> removes the label file created by
12958 <function>pg_start_backup</>, and creates a backup history file in
12959 the transaction log archive area. The history file includes the label given to
12960 <function>pg_start_backup</>, the starting and ending transaction log locations for
12961 the backup, and the starting and ending times of the backup. The return
12962 value is the backup's ending transaction log location (which again
12963 can be ignored). After recording the ending location, the current
12964 transaction log insertion
12965 point is automatically advanced to the next transaction log file, so that the
12966 ending transaction log file can be archived immediately to complete the backup.
12970 <function>pg_switch_xlog</> moves to the next transaction log file, allowing the
12971 current file to be archived (assuming you are using continuous archiving).
12972 The return value is the ending transaction log location + 1 within the just-completed transaction log file.
12973 If there has been no transaction log activity since the last transaction log switch,
12974 <function>pg_switch_xlog</> does nothing and returns the start location
12975 of the transaction log file currently in use.
12979 <function>pg_current_xlog_location</> displays the current transaction log write
12980 location in the format used by the above functions. Similarly,
12981 <function>pg_current_xlog_insert_location</> displays the current transaction log
12982 insertion point. The insertion point is the <quote>logical</> end
12983 of the transaction log
12984 at any instant, while the write location is the end of what has actually
12985 been written out from the server's internal buffers. The write location
12986 is the end of what can be examined from outside the server, and is usually
12987 what you want if you are interested in archiving partially-complete transaction log
12988 files. The insertion point is made available primarily for server
12989 debugging purposes. These are both read-only operations and do not
12990 require superuser permissions.
12994 You can use <function>pg_xlogfile_name_offset</> to extract the
12995 corresponding transaction log file name and byte offset from the results of any of the
12996 above functions. For example:
12998 postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
12999 file_name | file_offset
13000 --------------------------+-------------
13001 00000001000000000000000D | 4039624
13004 Similarly, <function>pg_xlogfile_name</> extracts just the transaction log file name.
13005 When the given transaction log location is exactly at a transaction log file boundary, both
13006 these functions return the name of the preceding transaction log file.
13007 This is usually the desired behavior for managing transaction log archiving
13008 behavior, since the preceding file is the last one that currently
13009 needs to be archived.
13013 For details about proper usage of these functions, see
13014 <xref linkend="continuous-archiving">.
13018 The functions shown in <xref linkend="functions-admin-dbsize"> calculate
13019 the disk space usage of database objects.
13023 <primary>pg_column_size</primary>
13026 <primary>pg_database_size</primary>
13029 <primary>pg_relation_size</primary>
13032 <primary>pg_size_pretty</primary>
13035 <primary>pg_tablespace_size</primary>
13038 <primary>pg_total_relation_size</primary>
13041 <table id="functions-admin-dbsize">
13042 <title>Database Object Size Functions</title>
13045 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
13051 <entry><literal><function>pg_column_size</function>(<type>any</type>)</literal></entry>
13052 <entry><type>int</type></entry>
13053 <entry>Number of bytes used to store a particular value (possibly compressed)</entry>
13057 <literal><function>pg_database_size</function>(<type>oid</type>)</literal>
13059 <entry><type>bigint</type></entry>
13060 <entry>Disk space used by the database with the specified OID</entry>
13064 <literal><function>pg_database_size</function>(<type>name</type>)</literal>
13066 <entry><type>bigint</type></entry>
13067 <entry>Disk space used by the database with the specified name</entry>
13071 <literal><function>pg_relation_size</function>(<parameter>relation</parameter> <type>regclass</type>, <parameter>fork</parameter> <type>text</type>)</literal>
13073 <entry><type>bigint</type></entry>
13075 Disk space used by the specified fork, <literal>'main'</literal> or
13076 <literal>'fsm'</literal>, of a table or index with the specified OID
13077 or name; the table name can be schema-qualified.
13082 <literal><function>pg_relation_size</function>(<parameter>relation</parameter> <type>regclass</type>)</literal>
13084 <entry><type>bigint</type></entry>
13086 Shorthand for <literal>pg_relation_size(..., 'main')</literal>
13091 <literal><function>pg_size_pretty</function>(<type>bigint</type>)</literal>
13093 <entry><type>text</type></entry>
13094 <entry>Converts a size in bytes into a human-readable format with size units</entry>
13098 <literal><function>pg_tablespace_size</function>(<type>oid</type>)</literal>
13100 <entry><type>bigint</type></entry>
13101 <entry>Disk space used by the tablespace with the specified OID</entry>
13105 <literal><function>pg_tablespace_size</function>(<type>name</type>)</literal>
13107 <entry><type>bigint</type></entry>
13108 <entry>Disk space used by the tablespace with the specified name</entry>
13112 <literal><function>pg_total_relation_size</function>(<type>regclass</type>)</literal>
13114 <entry><type>bigint</type></entry>
13116 Total disk space used by the table with the specified OID or name,
13117 including indexes and <acronym>TOAST</> data; the table name can be
13126 <function>pg_column_size</> shows the space used to store any individual
13131 <function>pg_database_size</function> and <function>pg_tablespace_size</>
13132 accept the OID or name of a database or tablespace, and return the total
13133 disk space used therein.
13137 <function>pg_relation_size</> accepts the OID or name of a table, index or
13138 toast table, and returns the size in bytes. Specifying
13139 <literal>'main'</literal> or leaving out the second argument returns the
13140 size of the main data fork of the relation. Specifying
13141 <literal>'fsm'</literal> returns the size of the
13142 Free Space Map (see <xref linkend="storage-fsm">) associated with the
13147 <function>pg_size_pretty</> can be used to format the result of one of
13148 the other functions in a human-readable way, using kB, MB, GB or TB as
13153 <function>pg_total_relation_size</> accepts the OID or name of a
13154 table or toast table, and returns the size in bytes of the data
13155 and all associated indexes and toast tables.
13159 The functions shown in <xref
13160 linkend="functions-admin-genfile"> provide native access to
13161 files on the machine hosting the server. Only files within the
13162 database cluster directory and the <varname>log_directory</> can be
13163 accessed. Use a relative path for files in the cluster directory,
13164 and a path matching the <varname>log_directory</> configuration setting
13165 for log files. Use of these functions is restricted to superusers.
13168 <table id="functions-admin-genfile">
13169 <title>Generic File Access Functions</title>
13172 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
13179 <literal><function>pg_ls_dir</function>(<parameter>dirname</> <type>text</>)</literal>
13181 <entry><type>setof text</type></entry>
13182 <entry>List the contents of a directory</entry>
13186 <literal><function>pg_read_file</function>(<parameter>filename</> <type>text</>, <parameter>offset</> <type>bigint</>, <parameter>length</> <type>bigint</>)</literal>
13188 <entry><type>text</type></entry>
13189 <entry>Return the contents of a text file</entry>
13193 <literal><function>pg_stat_file</function>(<parameter>filename</> <type>text</>)</literal>
13195 <entry><type>record</type></entry>
13196 <entry>Return information about a file</entry>
13203 <primary>pg_ls_dir</primary>
13206 <function>pg_ls_dir</> returns all the names in the specified
13207 directory, except the special entries <quote><literal>.</></> and
13208 <quote><literal>..</></>.
13212 <primary>pg_read_file</primary>
13215 <function>pg_read_file</> returns part of a text file, starting
13216 at the given <parameter>offset</>, returning at most <parameter>length</>
13217 bytes (less if the end of file is reached first). If <parameter>offset</>
13218 is negative, it is relative to the end of the file.
13222 <primary>pg_stat_file</primary>
13225 <function>pg_stat_file</> returns a record containing the file
13226 size, last accessed time stamp, last modified time stamp,
13227 last file status change time stamp (Unix platforms only),
13228 file creation time stamp (Windows only), and a <type>boolean</type>
13229 indicating if it is a directory. Typical usage include:
13231 SELECT * FROM pg_stat_file('filename');
13232 SELECT (pg_stat_file('filename')).modification;
13237 The functions shown in <xref linkend="functions-advisory-locks"> manage
13238 advisory locks. For details about proper use of these functions, see
13239 <xref linkend="advisory-locks">.
13242 <table id="functions-advisory-locks">
13243 <title>Advisory Lock Functions</title>
13246 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
13253 <literal><function>pg_advisory_lock</function>(<parameter>key</> <type>bigint</>)</literal>
13255 <entry><type>void</type></entry>
13256 <entry>Obtain exclusive advisory lock</entry>
13260 <literal><function>pg_advisory_lock</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
13262 <entry><type>void</type></entry>
13263 <entry>Obtain exclusive advisory lock</entry>
13268 <literal><function>pg_advisory_lock_shared</function>(<parameter>key</> <type>bigint</>)</literal>
13270 <entry><type>void</type></entry>
13271 <entry>Obtain shared advisory lock</entry>
13275 <literal><function>pg_advisory_lock_shared</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
13277 <entry><type>void</type></entry>
13278 <entry>Obtain shared advisory lock</entry>
13283 <literal><function>pg_try_advisory_lock</function>(<parameter>key</> <type>bigint</>)</literal>
13285 <entry><type>boolean</type></entry>
13286 <entry>Obtain exclusive advisory lock if available</entry>
13290 <literal><function>pg_try_advisory_lock</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
13292 <entry><type>boolean</type></entry>
13293 <entry>Obtain exclusive advisory lock if available</entry>
13298 <literal><function>pg_try_advisory_lock_shared</function>(<parameter>key</> <type>bigint</>)</literal>
13300 <entry><type>boolean</type></entry>
13301 <entry>Obtain shared advisory lock if available</entry>
13305 <literal><function>pg_try_advisory_lock_shared</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
13307 <entry><type>boolean</type></entry>
13308 <entry>Obtain shared advisory lock if available</entry>
13313 <literal><function>pg_advisory_unlock</function>(<parameter>key</> <type>bigint</>)</literal>
13315 <entry><type>boolean</type></entry>
13316 <entry>Release an exclusive advisory lock</entry>
13320 <literal><function>pg_advisory_unlock</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
13322 <entry><type>boolean</type></entry>
13323 <entry>Release an exclusive advisory lock</entry>
13328 <literal><function>pg_advisory_unlock_shared</function>(<parameter>key</> <type>bigint</>)</literal>
13330 <entry><type>boolean</type></entry>
13331 <entry>Release a shared advisory lock</entry>
13335 <literal><function>pg_advisory_unlock_shared</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
13337 <entry><type>boolean</type></entry>
13338 <entry>Release a shared advisory lock</entry>
13343 <literal><function>pg_advisory_unlock_all</function>()</literal>
13345 <entry><type>void</type></entry>
13346 <entry>Release all advisory locks held by the current session</entry>
13354 <primary>pg_advisory_lock</primary>
13357 <function>pg_advisory_lock</> locks an application-defined resource,
13358 which can be identified either by a single 64-bit key value or two
13359 32-bit key values (note that these two key spaces do not overlap).
13360 The key type is specified in <literal>pg_locks.objid</>. If
13361 another session already holds a lock on the same resource, the
13362 function will wait until the resource becomes available. The lock
13363 is exclusive. Multiple lock requests stack, so that if the same resource
13364 is locked three times it must be also unlocked three times to be
13365 released for other sessions' use.
13369 <primary>pg_advisory_lock_shared</primary>
13372 <function>pg_advisory_lock_shared</> works the same as
13373 <function>pg_advisory_lock</>,
13374 except the lock can be shared with other sessions requesting shared locks.
13375 Only would-be exclusive lockers are locked out.
13379 <primary>pg_try_advisory_lock</primary>
13382 <function>pg_try_advisory_lock</> is similar to
13383 <function>pg_advisory_lock</>, except the function will not wait for the
13384 lock to become available. It will either obtain the lock immediately and
13385 return <literal>true</>, or return <literal>false</> if the lock cannot be
13386 acquired immediately.
13390 <primary>pg_try_advisory_lock_shared</primary>
13393 <function>pg_try_advisory_lock_shared</> works the same as
13394 <function>pg_try_advisory_lock</>, except it attempts to acquire
13395 a shared rather than an exclusive lock.
13399 <primary>pg_advisory_unlock</primary>
13402 <function>pg_advisory_unlock</> will release a previously-acquired
13403 exclusive advisory lock. It
13404 returns <literal>true</> if the lock is successfully released.
13405 If the lock was not held, it will return <literal>false</>,
13406 and in addition, an SQL warning will be raised by the server.
13410 <primary>pg_advisory_unlock_shared</primary>
13413 <function>pg_advisory_unlock_shared</> works the same as
13414 <function>pg_advisory_unlock</>,
13415 except is releases a shared advisory lock.
13419 <primary>pg_advisory_unlock_all</primary>
13422 <function>pg_advisory_unlock_all</> will release all advisory locks
13423 held by the current session. (This function is implicitly invoked
13424 at session end, even if the client disconnects abruptly.)
13429 <sect1 id="functions-trigger">
13430 <title>Trigger Functions</title>
13433 <primary>suppress_redundant_updates_trigger</primary>
13437 Currently <productname>PostgreSQL</> provides one built in trigger
13438 function, <function>suppress_redundant_updates_trigger</>,
13439 which will prevent any update
13440 that does not actually change the data in the row from taking place, in
13441 contrast to the normal behaviour which always performs the update
13442 regardless of whether or not the data has changed. (This normal behaviour
13443 makes updates run faster, since no checking is required, and is also
13444 useful in certain cases.)
13448 Ideally, you should normally avoid running updates that don't actually
13449 change the data in the record. Redundant updates can cost considerable
13450 unnecessary time, especially if there are lots of indexes to alter,
13451 and space in dead rows that will eventually have to be vacuumed.
13452 However, detecting such situations in client code is not
13453 always easy, or even possible, and writing expressions to detect
13454 them can be error-prone. An alternative is to use
13455 <function>suppress_redundant_updates_trigger</>, which will skip
13456 updates that don't change the data. You should use this with care,
13457 however. The trigger takes a small but non-trivial time for each record,
13458 so if most of the records affected by an update are actually changed,
13459 use of this trigger will actually make the update run slower.
13463 The <function>suppress_redundant_updates_trigger</> function can be
13464 added to a table like this:
13466 CREATE TRIGGER z_min_update
13467 BEFORE UPDATE ON tablename
13468 FOR EACH ROW EXECUTE PROCEDURE suppress_redundant_updates_trigger();
13470 In most cases, you would want to fire this trigger last for each row.
13471 Bearing in mind that triggers fire in name order, you would then
13472 choose a trigger name that comes after the name of any other trigger
13473 you might have on the table.
13476 For more information about creating triggers, see
13477 <xref linkend="SQL-CREATETRIGGER">.