1 <!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.421 2008/03/03 17:11:13 momjian 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 show the list of all actually
21 available functions and operators, respectively.
25 If you are concerned about portability then take 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 the 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 data types where this
251 makes sense. 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>
273 <replaceable>a</replaceable> NOT BETWEEN <replaceable>x</replaceable> AND <replaceable>y</replaceable>
277 <replaceable>a</replaceable> < <replaceable>x</replaceable> OR <replaceable>a</replaceable> > <replaceable>y</replaceable>
279 There is no difference between the two respective forms apart from
280 the <acronym>CPU</acronym> cycles required to rewrite the first one
281 into the second one internally.
283 <primary>BETWEEN SYMMETRIC</primary>
285 <token>BETWEEN SYMMETRIC</> is the same as <literal>BETWEEN</>
286 except there is no requirement that the argument to the left of <literal>AND</> be less than
287 or equal to the argument on the right; the proper range is automatically determined.
292 <primary>IS NULL</primary>
295 <primary>IS NOT NULL</primary>
298 <primary>ISNULL</primary>
301 <primary>NOTNULL</primary>
303 To check whether a value is or is not null, use the constructs
305 <replaceable>expression</replaceable> IS NULL
306 <replaceable>expression</replaceable> IS NOT NULL
308 or the equivalent, but nonstandard, constructs
310 <replaceable>expression</replaceable> ISNULL
311 <replaceable>expression</replaceable> NOTNULL
313 <indexterm><primary>null value</primary><secondary>comparing</secondary></indexterm>
317 Do <emphasis>not</emphasis> write
318 <literal><replaceable>expression</replaceable> = NULL</literal>
319 because <literal>NULL</> is not <quote>equal to</quote>
320 <literal>NULL</>. (The null value represents an unknown value,
321 and it is not known whether two unknown values are equal.) This
322 behavior conforms to the SQL standard.
327 Some applications might expect that
328 <literal><replaceable>expression</replaceable> = NULL</literal>
329 returns true if <replaceable>expression</replaceable> evaluates to
330 the null value. It is highly recommended that these applications
331 be modified to comply with the SQL standard. However, if that
332 cannot be done the <xref linkend="guc-transform-null-equals">
333 configuration variable is available. If it is enabled,
334 <productname>PostgreSQL</productname> will convert <literal>x =
335 NULL</literal> clauses to <literal>x IS NULL</literal>. This was
336 the default behavior in <productname>PostgreSQL</productname>
337 releases 6.5 through 7.1.
343 If the <replaceable>expression</replaceable> is row-valued, then
344 <literal>IS NULL</> is true when the row expression itself is null
345 or when all the row's fields are null, while
346 <literal>IS NOT NULL</> is true when the row expression itself is non-null
347 and all the row's fields are non-null.
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 The ordinary comparison operators yield null (signifying <quote>unknown</>)
362 when either input is null. Another way to do comparisons is with the
363 <literal>IS <optional> NOT </> DISTINCT FROM</literal> construct:
365 <replaceable>expression</replaceable> IS DISTINCT FROM <replaceable>expression</replaceable>
366 <replaceable>expression</replaceable> IS NOT DISTINCT FROM <replaceable>expression</replaceable>
368 For non-null inputs, <literal>IS DISTINCT FROM</literal> is
369 the same as the <literal><></> operator. However, when both
370 inputs are null it will return false, and when just one input is
371 null it will return true. Similarly, <literal>IS NOT DISTINCT
372 FROM</literal> is identical to <literal>=</literal> for non-null
373 inputs, but it returns true when both inputs are null, and false when only
374 one input is null. Thus, these constructs effectively act as though null
375 were a normal data value, rather than <quote>unknown</>.
380 <primary>IS TRUE</primary>
383 <primary>IS NOT TRUE</primary>
386 <primary>IS FALSE</primary>
389 <primary>IS NOT FALSE</primary>
392 <primary>IS UNKNOWN</primary>
395 <primary>IS NOT UNKNOWN</primary>
397 Boolean values can also be tested using the constructs
399 <replaceable>expression</replaceable> IS TRUE
400 <replaceable>expression</replaceable> IS NOT TRUE
401 <replaceable>expression</replaceable> IS FALSE
402 <replaceable>expression</replaceable> IS NOT FALSE
403 <replaceable>expression</replaceable> IS UNKNOWN
404 <replaceable>expression</replaceable> IS NOT UNKNOWN
406 These will always return true or false, never a null value, even when the
408 A null input is treated as the logical value <quote>unknown</>.
409 Notice that <literal>IS UNKNOWN</> and <literal>IS NOT UNKNOWN</> are
410 effectively the same as <literal>IS NULL</literal> and
411 <literal>IS NOT NULL</literal>, respectively, except that the input
412 expression must be of Boolean type.
415 <!-- IS OF does not conform to the ISO SQL behavior, so it is undocumented here
418 <primary>IS OF</primary>
421 <primary>IS NOT OF</primary>
423 It is possible to check the data type of an expression using the
426 <replaceable>expression</replaceable> IS OF (typename, ...)
427 <replaceable>expression</replaceable> IS NOT OF (typename, ...)
429 They return a boolean value based on whether the expression's data
430 type is one of the listed data types.
436 <sect1 id="functions-math">
437 <title>Mathematical Functions and Operators</title>
440 Mathematical operators are provided for many
441 <productname>PostgreSQL</productname> types. For types without
442 common mathematical conventions for all possible permutations
443 (e.g., date/time types) we
444 describe the actual behavior in subsequent sections.
448 <xref linkend="functions-math-op-table"> shows the available mathematical operators.
451 <table id="functions-math-op-table">
452 <title>Mathematical Operators</title>
457 <entry>Operator</entry>
458 <entry>Description</entry>
459 <entry>Example</entry>
460 <entry>Result</entry>
466 <entry> <literal>+</literal> </entry>
467 <entry>addition</entry>
468 <entry><literal>2 + 3</literal></entry>
469 <entry><literal>5</literal></entry>
473 <entry> <literal>-</literal> </entry>
474 <entry>subtraction</entry>
475 <entry><literal>2 - 3</literal></entry>
476 <entry><literal>-1</literal></entry>
480 <entry> <literal>*</literal> </entry>
481 <entry>multiplication</entry>
482 <entry><literal>2 * 3</literal></entry>
483 <entry><literal>6</literal></entry>
487 <entry> <literal>/</literal> </entry>
488 <entry>division (integer division truncates results)</entry>
489 <entry><literal>4 / 2</literal></entry>
490 <entry><literal>2</literal></entry>
494 <entry> <literal>%</literal> </entry>
495 <entry>modulo (remainder)</entry>
496 <entry><literal>5 % 4</literal></entry>
497 <entry><literal>1</literal></entry>
501 <entry> <literal>^</literal> </entry>
502 <entry>exponentiation</entry>
503 <entry><literal>2.0 ^ 3.0</literal></entry>
504 <entry><literal>8</literal></entry>
508 <entry> <literal>|/</literal> </entry>
509 <entry>square root</entry>
510 <entry><literal>|/ 25.0</literal></entry>
511 <entry><literal>5</literal></entry>
515 <entry> <literal>||/</literal> </entry>
516 <entry>cube root</entry>
517 <entry><literal>||/ 27.0</literal></entry>
518 <entry><literal>3</literal></entry>
522 <entry> <literal>!</literal> </entry>
523 <entry>factorial</entry>
524 <entry><literal>5 !</literal></entry>
525 <entry><literal>120</literal></entry>
529 <entry> <literal>!!</literal> </entry>
530 <entry>factorial (prefix operator)</entry>
531 <entry><literal>!! 5</literal></entry>
532 <entry><literal>120</literal></entry>
536 <entry> <literal>@</literal> </entry>
537 <entry>absolute value</entry>
538 <entry><literal>@ -5.0</literal></entry>
539 <entry><literal>5</literal></entry>
543 <entry> <literal>&</literal> </entry>
544 <entry>bitwise AND</entry>
545 <entry><literal>91 & 15</literal></entry>
546 <entry><literal>11</literal></entry>
550 <entry> <literal>|</literal> </entry>
551 <entry>bitwise OR</entry>
552 <entry><literal>32 | 3</literal></entry>
553 <entry><literal>35</literal></entry>
557 <entry> <literal>#</literal> </entry>
558 <entry>bitwise XOR</entry>
559 <entry><literal>17 # 5</literal></entry>
560 <entry><literal>20</literal></entry>
564 <entry> <literal>~</literal> </entry>
565 <entry>bitwise NOT</entry>
566 <entry><literal>~1</literal></entry>
567 <entry><literal>-2</literal></entry>
571 <entry> <literal><<</literal> </entry>
572 <entry>bitwise shift left</entry>
573 <entry><literal>1 << 4</literal></entry>
574 <entry><literal>16</literal></entry>
578 <entry> <literal>>></literal> </entry>
579 <entry>bitwise shift right</entry>
580 <entry><literal>8 >> 2</literal></entry>
581 <entry><literal>2</literal></entry>
589 The bitwise operators work only on integral data types, whereas
590 the others are available for all numeric data types. The bitwise
591 operators are also available for the bit
592 string types <type>bit</type> and <type>bit varying</type>, as
593 shown in <xref linkend="functions-bit-string-op-table">.
597 <xref linkend="functions-math-func-table"> shows the available
598 mathematical functions. In the table, <literal>dp</literal>
599 indicates <type>double precision</type>. Many of these functions
600 are provided in multiple forms with different argument types.
601 Except where noted, any given form of a function returns the same
602 data type as its argument.
603 The functions working with <type>double precision</type> data are mostly
604 implemented on top of the host system's C library; accuracy and behavior in
605 boundary cases can therefore vary depending on the host system.
609 <primary>abs</primary>
612 <primary>cbrt</primary>
615 <primary>ceiling</primary>
618 <primary>degrees</primary>
621 <primary>exp</primary>
624 <primary>floor</primary>
627 <primary>ln</primary>
630 <primary>log</primary>
633 <primary>mod</primary>
636 <primary>pi</primary>
639 <primary>power</primary>
642 <primary>radians</primary>
645 <primary>random</primary>
648 <primary>round</primary>
651 <primary>setseed</primary>
654 <primary>sign</primary>
657 <primary>sqrt</primary>
660 <primary>trunc</primary>
663 <primary>width_bucket</primary>
666 <table id="functions-math-func-table">
667 <title>Mathematical Functions</title>
671 <entry>Function</entry>
672 <entry>Return Type</entry>
673 <entry>Description</entry>
674 <entry>Example</entry>
675 <entry>Result</entry>
681 <entry><literal><function>abs</>(<replaceable>x</replaceable>)</literal></entry>
682 <entry>(same as <replaceable>x</>)</entry>
683 <entry>absolute value</entry>
684 <entry><literal>abs(-17.4)</literal></entry>
685 <entry><literal>17.4</literal></entry>
689 <entry><literal><function>cbrt</function>(<type>dp</type>)</literal></entry>
690 <entry><type>dp</type></entry>
691 <entry>cube root</entry>
692 <entry><literal>cbrt(27.0)</literal></entry>
693 <entry><literal>3</literal></entry>
697 <entry><literal><function>ceil</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
698 <entry>(same as input)</entry>
699 <entry>smallest integer not less than argument</entry>
700 <entry><literal>ceil(-42.8)</literal></entry>
701 <entry><literal>-42</literal></entry>
705 <entry><literal><function>ceiling</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
706 <entry>(same as input)</entry>
707 <entry>smallest integer not less than argument (alias for <function>ceil</function>)</entry>
708 <entry><literal>ceiling(-95.3)</literal></entry>
709 <entry><literal>-95</literal></entry>
713 <entry><literal><function>degrees</function>(<type>dp</type>)</literal></entry>
714 <entry><type>dp</type></entry>
715 <entry>radians to degrees</entry>
716 <entry><literal>degrees(0.5)</literal></entry>
717 <entry><literal>28.6478897565412</literal></entry>
721 <entry><literal><function>exp</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
722 <entry>(same as input)</entry>
723 <entry>exponential</entry>
724 <entry><literal>exp(1.0)</literal></entry>
725 <entry><literal>2.71828182845905</literal></entry>
729 <entry><literal><function>floor</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
730 <entry>(same as input)</entry>
731 <entry>largest integer not greater than argument</entry>
732 <entry><literal>floor(-42.8)</literal></entry>
733 <entry><literal>-43</literal></entry>
737 <entry><literal><function>ln</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
738 <entry>(same as input)</entry>
739 <entry>natural logarithm</entry>
740 <entry><literal>ln(2.0)</literal></entry>
741 <entry><literal>0.693147180559945</literal></entry>
745 <entry><literal><function>log</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
746 <entry>(same as input)</entry>
747 <entry>base 10 logarithm</entry>
748 <entry><literal>log(100.0)</literal></entry>
749 <entry><literal>2</literal></entry>
753 <entry><literal><function>log</function>(<parameter>b</parameter> <type>numeric</type>,
754 <parameter>x</parameter> <type>numeric</type>)</literal></entry>
755 <entry><type>numeric</type></entry>
756 <entry>logarithm to base <parameter>b</parameter></entry>
757 <entry><literal>log(2.0, 64.0)</literal></entry>
758 <entry><literal>6.0000000000</literal></entry>
762 <entry><literal><function>mod</function>(<parameter>y</parameter>,
763 <parameter>x</parameter>)</literal></entry>
764 <entry>(same as argument types)</entry>
765 <entry>remainder of <parameter>y</parameter>/<parameter>x</parameter></entry>
766 <entry><literal>mod(9,4)</literal></entry>
767 <entry><literal>1</literal></entry>
771 <entry><literal><function>pi</function>()</literal></entry>
772 <entry><type>dp</type></entry>
773 <entry><quote>π</quote> constant</entry>
774 <entry><literal>pi()</literal></entry>
775 <entry><literal>3.14159265358979</literal></entry>
779 <entry><literal><function>power</function>(<parameter>a</parameter> <type>dp</type>,
780 <parameter>b</parameter> <type>dp</type>)</literal></entry>
781 <entry><type>dp</type></entry>
782 <entry><parameter>a</> raised to the power of <parameter>b</parameter></entry>
783 <entry><literal>power(9.0, 3.0)</literal></entry>
784 <entry><literal>729</literal></entry>
788 <entry><literal><function>power</function>(<parameter>a</parameter> <type>numeric</type>,
789 <parameter>b</parameter> <type>numeric</type>)</literal></entry>
790 <entry><type>numeric</type></entry>
791 <entry><parameter>a</> raised to the power of <parameter>b</parameter></entry>
792 <entry><literal>power(9.0, 3.0)</literal></entry>
793 <entry><literal>729</literal></entry>
797 <entry><literal><function>radians</function>(<type>dp</type>)</literal></entry>
798 <entry><type>dp</type></entry>
799 <entry>degrees to radians</entry>
800 <entry><literal>radians(45.0)</literal></entry>
801 <entry><literal>0.785398163397448</literal></entry>
805 <entry><literal><function>random</function>()</literal></entry>
806 <entry><type>dp</type></entry>
807 <entry>random value between 0.0 and 1.0</entry>
808 <entry><literal>random()</literal></entry>
813 <entry><literal><function>round</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
814 <entry>(same as input)</entry>
815 <entry>round to nearest integer</entry>
816 <entry><literal>round(42.4)</literal></entry>
817 <entry><literal>42</literal></entry>
821 <entry><literal><function>round</function>(<parameter>v</parameter> <type>numeric</type>, <parameter>s</parameter> <type>int</type>)</literal></entry>
822 <entry><type>numeric</type></entry>
823 <entry>round to <parameter>s</parameter> decimal places</entry>
824 <entry><literal>round(42.4382, 2)</literal></entry>
825 <entry><literal>42.44</literal></entry>
829 <entry><literal><function>setseed</function>(<type>dp</type>)</literal></entry>
830 <entry><type>void</type></entry>
831 <entry>set seed for subsequent <literal>random()</literal> calls (value between 0 and 1.0)</entry>
832 <entry><literal>setseed(0.54823)</literal></entry>
837 <entry><literal><function>sign</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
838 <entry>(same as input)</entry>
839 <entry>sign of the argument (-1, 0, +1)</entry>
840 <entry><literal>sign(-8.4)</literal></entry>
841 <entry><literal>-1</literal></entry>
845 <entry><literal><function>sqrt</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
846 <entry>(same as input)</entry>
847 <entry>square root</entry>
848 <entry><literal>sqrt(2.0)</literal></entry>
849 <entry><literal>1.4142135623731</literal></entry>
853 <entry><literal><function>trunc</function>(<type>dp</type> or <type>numeric</type>)</literal></entry>
854 <entry>(same as input)</entry>
855 <entry>truncate toward zero</entry>
856 <entry><literal>trunc(42.8)</literal></entry>
857 <entry><literal>42</literal></entry>
861 <entry><literal><function>trunc</function>(<parameter>v</parameter> <type>numeric</type>, <parameter>s</parameter> <type>int</type>)</literal></entry>
862 <entry><type>numeric</type></entry>
863 <entry>truncate to <parameter>s</parameter> decimal places</entry>
864 <entry><literal>trunc(42.4382, 2)</literal></entry>
865 <entry><literal>42.43</literal></entry>
869 <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>
870 <entry><type>int</type></entry>
871 <entry>return the bucket to which <parameter>operand</> would
872 be assigned in an equidepth histogram with <parameter>count</>
873 buckets, in the range <parameter>b1</> to <parameter>b2</></entry>
874 <entry><literal>width_bucket(5.35, 0.024, 10.06, 5)</literal></entry>
875 <entry><literal>3</literal></entry>
879 <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>
880 <entry><type>int</type></entry>
881 <entry>return the bucket to which <parameter>operand</> would
882 be assigned in an equidepth histogram with <parameter>count</>
883 buckets, in the range <parameter>b1</> to <parameter>b2</></entry>
884 <entry><literal>width_bucket(5.35, 0.024, 10.06, 5)</literal></entry>
885 <entry><literal>3</literal></entry>
892 Finally, <xref linkend="functions-math-trig-table"> shows the
893 available trigonometric functions. All trigonometric functions
894 take arguments and return values of type <type>double
899 <primary>acos</primary>
902 <primary>asin</primary>
905 <primary>atan</primary>
908 <primary>atan2</primary>
911 <primary>cos</primary>
914 <primary>cot</primary>
917 <primary>sin</primary>
920 <primary>tan</primary>
923 <table id="functions-math-trig-table">
924 <title>Trigonometric Functions</title>
929 <entry>Function</entry>
930 <entry>Description</entry>
936 <entry><literal><function>acos</function>(<replaceable>x</replaceable>)</literal></entry>
937 <entry>inverse cosine</entry>
941 <entry><literal><function>asin</function>(<replaceable>x</replaceable>)</literal></entry>
942 <entry>inverse sine</entry>
946 <entry><literal><function>atan</function>(<replaceable>x</replaceable>)</literal></entry>
947 <entry>inverse tangent</entry>
951 <entry><literal><function>atan2</function>(<replaceable>y</replaceable>,
952 <replaceable>x</replaceable>)</literal></entry>
953 <entry>inverse tangent of
954 <literal><replaceable>y</replaceable>/<replaceable>x</replaceable></literal></entry>
958 <entry><literal><function>cos</function>(<replaceable>x</replaceable>)</literal></entry>
959 <entry>cosine</entry>
963 <entry><literal><function>cot</function>(<replaceable>x</replaceable>)</literal></entry>
964 <entry>cotangent</entry>
968 <entry><literal><function>sin</function>(<replaceable>x</replaceable>)</literal></entry>
973 <entry><literal><function>tan</function>(<replaceable>x</replaceable>)</literal></entry>
974 <entry>tangent</entry>
983 <sect1 id="functions-string">
984 <title>String Functions and Operators</title>
987 This section describes functions and operators for examining and
988 manipulating string values. Strings in this context include values
989 of the types <type>character</type>, <type>character varying</type>,
990 and <type>text</type>. Unless otherwise noted, all
991 of the functions listed below work on all of these types, but be
992 wary of potential effects of automatic space-padding when using the
993 <type>character</type> type. Some functions also exist
994 natively for the bit-string types.
998 <acronym>SQL</acronym> defines some string functions with a special syntax
999 wherein certain key words rather than commas are used to separate the
1000 arguments. Details are in <xref linkend="functions-string-sql">.
1001 These functions are also implemented using the regular syntax for
1002 function invocation. (See <xref linkend="functions-string-other">.)
1007 Before <productname>PostgreSQL</productname> 8.3, these functions would
1008 silently accept values of several non-string data types as well, due to
1009 the presence of implicit coercions from those data types to
1010 <type>text</>. Those coercions have been removed because they frequently
1011 caused surprising behaviors. However, the string concatenation operator
1012 (<literal>||</>) still accepts non-string input, so long as at least one
1013 input is of a string type, as shown in <xref
1014 linkend="functions-string-sql">. For other cases, insert an explicit
1015 coercion to <type>text</> if you need to duplicate the previous behavior.
1020 <primary>bit_length</primary>
1023 <primary>char_length</primary>
1026 <primary>lower</primary>
1029 <primary>octet_length</primary>
1032 <primary>overlay</primary>
1035 <primary>position</primary>
1038 <primary>substring</primary>
1041 <primary>trim</primary>
1044 <primary>upper</primary>
1047 <table id="functions-string-sql">
1048 <title><acronym>SQL</acronym> String Functions and Operators</title>
1052 <entry>Function</entry>
1053 <entry>Return Type</entry>
1054 <entry>Description</entry>
1055 <entry>Example</entry>
1056 <entry>Result</entry>
1062 <entry><literal><parameter>string</parameter> <literal>||</literal>
1063 <parameter>string</parameter></literal></entry>
1064 <entry> <type>text</type> </entry>
1066 String concatenation
1068 <primary>character string</primary>
1069 <secondary>concatenation</secondary>
1072 <entry><literal>'Post' || 'greSQL'</literal></entry>
1073 <entry><literal>PostgreSQL</literal></entry>
1078 <literal><parameter>string</parameter> <literal>||</literal>
1079 <parameter>non-string</parameter></literal>
1081 <literal><parameter>non-string</parameter> <literal>||</literal>
1082 <parameter>string</parameter></literal>
1084 <entry> <type>text</type> </entry>
1086 String concatenation with one non-string input
1088 <entry><literal>'Value: ' || 42</literal></entry>
1089 <entry><literal>Value: 42</literal></entry>
1093 <entry><literal><function>bit_length</function>(<parameter>string</parameter>)</literal></entry>
1094 <entry><type>int</type></entry>
1095 <entry>Number of bits in string</entry>
1096 <entry><literal>bit_length('jose')</literal></entry>
1097 <entry><literal>32</literal></entry>
1101 <entry><literal><function>char_length</function>(<parameter>string</parameter>)</literal> or <literal><function>character_length</function>(<parameter>string</parameter>)</literal></entry>
1102 <entry><type>int</type></entry>
1104 Number of characters in string
1106 <primary>character string</primary>
1107 <secondary>length</secondary>
1110 <primary>length</primary>
1111 <secondary sortas="character string">of a character string</secondary>
1112 <see>character string, length</see>
1115 <entry><literal>char_length('jose')</literal></entry>
1116 <entry><literal>4</literal></entry>
1120 <entry><literal><function>lower</function>(<parameter>string</parameter>)</literal></entry>
1121 <entry><type>text</type></entry>
1122 <entry>Convert string to lower case</entry>
1123 <entry><literal>lower('TOM')</literal></entry>
1124 <entry><literal>tom</literal></entry>
1128 <entry><literal><function>octet_length</function>(<parameter>string</parameter>)</literal></entry>
1129 <entry><type>int</type></entry>
1130 <entry>Number of bytes in string</entry>
1131 <entry><literal>octet_length('jose')</literal></entry>
1132 <entry><literal>4</literal></entry>
1136 <entry><literal><function>overlay</function>(<parameter>string</parameter> placing <parameter>string</parameter> from <type>int</type> <optional>for <type>int</type></optional>)</literal></entry>
1137 <entry><type>text</type></entry>
1141 <entry><literal>overlay('Txxxxas' placing 'hom' from 2 for 4)</literal></entry>
1142 <entry><literal>Thomas</literal></entry>
1146 <entry><literal><function>position</function>(<parameter>substring</parameter> in <parameter>string</parameter>)</literal></entry>
1147 <entry><type>int</type></entry>
1148 <entry>Location of specified substring</entry>
1149 <entry><literal>position('om' in 'Thomas')</literal></entry>
1150 <entry><literal>3</literal></entry>
1154 <entry><literal><function>substring</function>(<parameter>string</parameter> <optional>from <type>int</type></optional> <optional>for <type>int</type></optional>)</literal></entry>
1155 <entry><type>text</type></entry>
1159 <entry><literal>substring('Thomas' from 2 for 3)</literal></entry>
1160 <entry><literal>hom</literal></entry>
1164 <entry><literal><function>substring</function>(<parameter>string</parameter> from <replaceable>pattern</replaceable>)</literal></entry>
1165 <entry><type>text</type></entry>
1167 Extract substring matching POSIX regular expression. See
1168 <xref linkend="functions-matching"> for more information on pattern
1171 <entry><literal>substring('Thomas' from '...$')</literal></entry>
1172 <entry><literal>mas</literal></entry>
1176 <entry><literal><function>substring</function>(<parameter>string</parameter> from <replaceable>pattern</replaceable> for <replaceable>escape</replaceable>)</literal></entry>
1177 <entry><type>text</type></entry>
1179 Extract substring matching <acronym>SQL</acronym> regular expression.
1180 See <xref linkend="functions-matching"> for more information on
1183 <entry><literal>substring('Thomas' from '%#"o_a#"_' for '#')</literal></entry>
1184 <entry><literal>oma</literal></entry>
1189 <literal><function>trim</function>(<optional>leading | trailing | both</optional>
1190 <optional><parameter>characters</parameter></optional> from
1191 <parameter>string</parameter>)</literal>
1193 <entry><type>text</type></entry>
1195 Remove the longest string containing only the
1196 <parameter>characters</parameter> (a space by default) from the
1197 start/end/both ends of the <parameter>string</parameter>
1199 <entry><literal>trim(both 'x' from 'xTomxx')</literal></entry>
1200 <entry><literal>Tom</literal></entry>
1204 <entry><literal><function>upper</function>(<parameter>string</parameter>)</literal></entry>
1205 <entry><type>text</type></entry>
1206 <entry>Convert string to uppercase</entry>
1207 <entry><literal>upper('tom')</literal></entry>
1208 <entry><literal>TOM</literal></entry>
1215 Additional string manipulation functions are available and are
1216 listed in <xref linkend="functions-string-other">. Some of them are used internally to implement the
1217 <acronym>SQL</acronym>-standard string functions listed in <xref linkend="functions-string-sql">.
1221 <primary>ascii</primary>
1224 <primary>btrim</primary>
1227 <primary>chr</primary>
1230 <primary>convert</primary>
1233 <primary>convert_from</primary>
1236 <primary>convert_to</primary>
1239 <primary>decode</primary>
1242 <primary>encode</primary>
1245 <primary>initcap</primary>
1248 <primary>lpad</primary>
1251 <primary>ltrim</primary>
1254 <primary>md5</primary>
1257 <primary>pg_client_encoding</primary>
1260 <primary>quote_ident</primary>
1263 <primary>quote_literal</primary>
1266 <primary>repeat</primary>
1269 <primary>replace</primary>
1272 <primary>rpad</primary>
1275 <primary>rtrim</primary>
1278 <primary>split_part</primary>
1281 <primary>strpos</primary>
1284 <primary>substr</primary>
1287 <primary>to_ascii</primary>
1290 <primary>to_hex</primary>
1293 <primary>translate</primary>
1296 <table id="functions-string-other">
1297 <title>Other String Functions</title>
1301 <entry>Function</entry>
1302 <entry>Return Type</entry>
1303 <entry>Description</entry>
1304 <entry>Example</entry>
1305 <entry>Result</entry>
1311 <entry><literal><function>ascii</function>(<parameter>string</parameter>)</literal></entry>
1312 <entry><type>int</type></entry>
1314 <acronym>ASCII</acronym> code of the first character of the
1315 argument. For <acronym>UTF8</acronym> returns the Unicode code
1316 point of the character. For other multibyte encodings. the
1317 argument must be a strictly <acronym>ASCII</acronym> character.
1319 <entry><literal>ascii('x')</literal></entry>
1320 <entry><literal>120</literal></entry>
1324 <entry><literal><function>btrim</function>(<parameter>string</parameter> <type>text</type>
1325 <optional>, <parameter>characters</parameter> <type>text</type></optional>)</literal></entry>
1326 <entry><type>text</type></entry>
1328 Remove the longest string consisting only of characters
1329 in <parameter>characters</parameter> (a space by default)
1330 from the start and end of <parameter>string</parameter>
1332 <entry><literal>btrim('xyxtrimyyx', 'xy')</literal></entry>
1333 <entry><literal>trim</literal></entry>
1337 <entry><literal><function>chr</function>(<type>int</type>)</literal></entry>
1338 <entry><type>text</type></entry>
1340 Character with the given code. For <acronym>UTF8</acronym> the
1341 argument is treated as a Unicode code point. For other multibyte
1342 encodings the argument must designate a strictly
1343 <acronym>ASCII</acronym> character. The NULL (0) character is not
1344 allowed because text data types cannot reliably store such bytes.
1346 <entry><literal>chr(65)</literal></entry>
1347 <entry><literal>A</literal></entry>
1352 <literal><function>convert</function>(<parameter>string</parameter> <type>bytea</type>,
1353 <parameter>src_encoding</parameter> <type>name</type>,
1354 <parameter>dest_encoding</parameter> <type>name</type>)</literal>
1356 <entry><type>bytea</type></entry>
1358 Convert string to <parameter>dest_encoding</parameter>. The
1359 original encoding is specified by
1360 <parameter>src_encoding</parameter>. The
1361 <parameter>string</parameter> must be valid in this encoding.
1362 Conversions can be defined by <command>CREATE CONVERSION</command>.
1363 Also there are some predefined conversions. See <xref
1364 linkend="conversion-names"> for available conversions.
1366 <entry><literal>convert('text_in_utf8', 'UTF8', 'LATIN1')</literal></entry>
1367 <entry><literal>text_in_utf8</literal> represented in ISO 8859-1 encoding</entry>
1372 <literal><function>convert_from</function>(<parameter>string</parameter> <type>bytea</type>,
1373 <parameter>src_encoding</parameter> <type>name</type>)</literal>
1375 <entry><type>text</type></entry>
1377 Convert string to the database encoding. The original encoding
1378 is specified by <parameter>src_encoding</parameter>. The
1379 <parameter>string</parameter> must be valid in this encoding.
1381 <entry><literal>convert_from('text_in_utf8', 'UTF8')</literal></entry>
1382 <entry><literal>text_in_utf8</literal> represented in the current database encoding</entry>
1387 <literal><function>convert_to</function>(<parameter>string</parameter> <type>text</type>,
1388 <parameter>dest_encoding</parameter> <type>name</type>)</literal>
1390 <entry><type>bytea</type></entry>
1392 Convert string to <parameter>dest_encoding</parameter>.
1394 <entry><literal>convert_to('some text', 'UTF8')</literal></entry>
1395 <entry><literal>some text</literal> represented in the UTF8 encoding</entry>
1400 <literal><function>decode</function>(<parameter>string</parameter> <type>text</type>,
1401 <parameter>type</parameter> <type>text</type>)</literal>
1403 <entry><type>bytea</type></entry>
1405 Decode binary data from <parameter>string</parameter> previously
1406 encoded with <function>encode</>. Parameter type is same as in <function>encode</>.
1408 <entry><literal>decode('MTIzAAE=', 'base64')</literal></entry>
1409 <entry><literal>123\000\001</literal></entry>
1414 <literal><function>encode</function>(<parameter>data</parameter> <type>bytea</type>,
1415 <parameter>type</parameter> <type>text</type>)</literal>
1417 <entry><type>text</type></entry>
1419 Encode binary data to different representation. Supported
1420 types are: <literal>base64</>, <literal>hex</>, <literal>escape</>.
1421 <literal>Escape</> merely outputs null bytes as <literal>\000</> and
1422 doubles backslashes.
1424 <entry><literal>encode(E'123\\000\\001', 'base64')</literal></entry>
1425 <entry><literal>MTIzAAE=</literal></entry>
1429 <entry><literal><function>initcap</function>(<parameter>string</parameter>)</literal></entry>
1430 <entry><type>text</type></entry>
1432 Convert the first letter of each word to uppercase and the
1433 rest to lowercase. Words are sequences of alphanumeric
1434 characters separated by non-alphanumeric characters.
1436 <entry><literal>initcap('hi THOMAS')</literal></entry>
1437 <entry><literal>Hi Thomas</literal></entry>
1441 <entry><literal><function>length</function>(<parameter>string</parameter>)</literal></entry>
1442 <entry><type>int</type></entry>
1444 Number of characters in <parameter>string</parameter>
1446 <entry><literal>length('jose')</literal></entry>
1447 <entry><literal>4</literal></entry>
1451 <entry><literal><function>length</function>(<parameter>string</parameter><type>bytea</type>,
1452 <parameter>encoding</parameter> <type>name</type> )</literal></entry>
1453 <entry><type>int</type></entry>
1455 Number of characters in <parameter>string</parameter> in the given
1456 <parameter>encoding</parameter>. The <parameter>string</parameter>
1457 must be valid in this encoding.
1459 <entry><literal>length('jose', 'UTF8')</literal></entry>
1460 <entry><literal>4</literal></entry>
1465 <literal><function>lpad</function>(<parameter>string</parameter> <type>text</type>,
1466 <parameter>length</parameter> <type>int</type>
1467 <optional>, <parameter>fill</parameter> <type>text</type></optional>)</literal>
1469 <entry><type>text</type></entry>
1471 Fill up the <parameter>string</parameter> to length
1472 <parameter>length</parameter> by prepending the characters
1473 <parameter>fill</parameter> (a space by default). If the
1474 <parameter>string</parameter> is already longer than
1475 <parameter>length</parameter> then it is truncated (on the
1478 <entry><literal>lpad('hi', 5, 'xy')</literal></entry>
1479 <entry><literal>xyxhi</literal></entry>
1483 <entry><literal><function>ltrim</function>(<parameter>string</parameter> <type>text</type>
1484 <optional>, <parameter>characters</parameter> <type>text</type></optional>)</literal>
1486 <entry><type>text</type></entry>
1488 Remove the longest string containing only characters from
1489 <parameter>characters</parameter> (a space by default) from the start of
1490 <parameter>string</parameter>
1492 <entry><literal>ltrim('zzzytrim', 'xyz')</literal></entry>
1493 <entry><literal>trim</literal></entry>
1497 <entry><literal><function>md5</function>(<parameter>string</parameter>)</literal></entry>
1498 <entry><type>text</type></entry>
1500 Calculates the MD5 hash of <parameter>string</parameter>,
1501 returning the result in hexadecimal
1503 <entry><literal>md5('abc')</literal></entry>
1504 <entry><literal>900150983cd24fb0 d6963f7d28e17f72</literal></entry>
1508 <entry><literal><function>pg_client_encoding</function>()</literal></entry>
1509 <entry><type>name</type></entry>
1511 Current client encoding name
1513 <entry><literal>pg_client_encoding()</literal></entry>
1514 <entry><literal>SQL_ASCII</literal></entry>
1518 <entry><literal><function>quote_ident</function>(<parameter>string</parameter> <type>text</type>)</literal></entry>
1519 <entry><type>text</type></entry>
1521 Return the given string suitably quoted to be used as an identifier
1522 in an <acronym>SQL</acronym> statement string.
1523 Quotes are added only if necessary (i.e., if the string contains
1524 non-identifier characters or would be case-folded).
1525 Embedded quotes are properly doubled.
1527 <entry><literal>quote_ident('Foo bar')</literal></entry>
1528 <entry><literal>"Foo bar"</literal></entry>
1532 <entry><literal><function>quote_literal</function>(<parameter>string</parameter> <type>text</type>)</literal></entry>
1533 <entry><type>text</type></entry>
1535 Return the given string suitably quoted to be used as a string literal
1536 in an <acronym>SQL</acronym> statement string.
1537 Embedded single-quotes and backslashes are properly doubled.
1539 <entry><literal>quote_literal('O\'Reilly')</literal></entry>
1540 <entry><literal>'O''Reilly'</literal></entry>
1544 <entry><literal><function>quote_literal</function>(<parameter>value</parameter> <type>anyelement</type>)</literal></entry>
1545 <entry><type>text</type></entry>
1547 Coerce the given value to text and then quote it as a literal.
1548 Embedded single-quotes and backslashes are properly doubled.
1550 <entry><literal>quote_literal(42.5)</literal></entry>
1551 <entry><literal>'42.5'</literal></entry>
1555 <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>
1556 <entry><type>setof text[]</type></entry>
1558 Return all captured substrings resulting from matching a POSIX regular
1559 expression against the <parameter>string</parameter>. See
1560 <xref linkend="functions-posix-regexp"> for more information.
1562 <entry><literal>regexp_matches('foobarbequebaz', '(bar)(beque)')</literal></entry>
1563 <entry><literal>{bar,beque}</literal></entry>
1567 <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>
1568 <entry><type>text</type></entry>
1570 Replace substring(s) matching a POSIX regular expression. See
1571 <xref linkend="functions-posix-regexp"> for more information.
1573 <entry><literal>regexp_replace('Thomas', '.[mN]a.', 'M')</literal></entry>
1574 <entry><literal>ThM</literal></entry>
1578 <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>
1579 <entry><type>text[]</type></entry>
1581 Split <parameter>string</parameter> using a POSIX regular expression as
1582 the delimiter. See <xref linkend="functions-posix-regexp"> for more
1585 <entry><literal>regexp_split_to_array('hello world', E'\\s+')</literal></entry>
1586 <entry><literal>{hello,world}</literal></entry>
1590 <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>
1591 <entry><type>setof text</type></entry>
1593 Split <parameter>string</parameter> using a POSIX regular expression as
1594 the delimiter. See <xref linkend="functions-posix-regexp"> for more
1597 <entry><literal>regexp_split_to_table('hello world', E'\\s+')</literal></entry>
1598 <entry><literal>hello</literal><para><literal>world</literal></para> (2 rows)</entry>
1602 <entry><literal><function>repeat</function>(<parameter>string</parameter> <type>text</type>, <parameter>number</parameter> <type>int</type>)</literal></entry>
1603 <entry><type>text</type></entry>
1604 <entry>Repeat <parameter>string</parameter> the specified
1605 <parameter>number</parameter> of times</entry>
1606 <entry><literal>repeat('Pg', 4)</literal></entry>
1607 <entry><literal>PgPgPgPg</literal></entry>
1611 <entry><literal><function>replace</function>(<parameter>string</parameter> <type>text</type>,
1612 <parameter>from</parameter> <type>text</type>,
1613 <parameter>to</parameter> <type>text</type>)</literal></entry>
1614 <entry><type>text</type></entry>
1615 <entry>Replace all occurrences in <parameter>string</parameter> of substring
1616 <parameter>from</parameter> with substring <parameter>to</parameter>
1618 <entry><literal>replace('abcdefabcdef', 'cd', 'XX')</literal></entry>
1619 <entry><literal>abXXefabXXef</literal></entry>
1624 <literal><function>rpad</function>(<parameter>string</parameter> <type>text</type>,
1625 <parameter>length</parameter> <type>int</type>
1626 <optional>, <parameter>fill</parameter> <type>text</type></optional>)</literal>
1628 <entry><type>text</type></entry>
1630 Fill up the <parameter>string</parameter> to length
1631 <parameter>length</parameter> by appending the characters
1632 <parameter>fill</parameter> (a space by default). If the
1633 <parameter>string</parameter> is already longer than
1634 <parameter>length</parameter> then it is truncated.
1636 <entry><literal>rpad('hi', 5, 'xy')</literal></entry>
1637 <entry><literal>hixyx</literal></entry>
1641 <entry><literal><function>rtrim</function>(<parameter>string</parameter> <type>text</type>
1642 <optional>, <parameter>characters</parameter> <type>text</type></optional>)</literal>
1644 <entry><type>text</type></entry>
1646 Remove the longest string containing only characters from
1647 <parameter>characters</parameter> (a space by default) from the end of
1648 <parameter>string</parameter>
1650 <entry><literal>rtrim('trimxxxx', 'x')</literal></entry>
1651 <entry><literal>trim</literal></entry>
1655 <entry><literal><function>split_part</function>(<parameter>string</parameter> <type>text</type>,
1656 <parameter>delimiter</parameter> <type>text</type>,
1657 <parameter>field</parameter> <type>int</type>)</literal></entry>
1658 <entry><type>text</type></entry>
1659 <entry>Split <parameter>string</parameter> on <parameter>delimiter</parameter>
1660 and return the given field (counting from one)
1662 <entry><literal>split_part('abc~@~def~@~ghi', '~@~', 2)</literal></entry>
1663 <entry><literal>def</literal></entry>
1667 <entry><literal><function>strpos</function>(<parameter>string</parameter>, <parameter>substring</parameter>)</literal></entry>
1668 <entry><type>int</type></entry>
1670 Location of specified substring (same as
1671 <literal>position(<parameter>substring</parameter> in
1672 <parameter>string</parameter>)</literal>, but note the reversed
1675 <entry><literal>strpos('high', 'ig')</literal></entry>
1676 <entry><literal>2</literal></entry>
1680 <entry><literal><function>substr</function>(<parameter>string</parameter>, <parameter>from</parameter> <optional>, <parameter>count</parameter></optional>)</literal></entry>
1681 <entry><type>text</type></entry>
1683 Extract substring (same as
1684 <literal>substring(<parameter>string</parameter> from <parameter>from</parameter> for <parameter>count</parameter>)</literal>)
1686 <entry><literal>substr('alphabet', 3, 2)</literal></entry>
1687 <entry><literal>ph</literal></entry>
1691 <entry><literal><function>to_ascii</function>(<parameter>string</parameter> <type>text</type>
1692 <optional>, <parameter>encoding</parameter> <type>text</type></optional>)</literal></entry>
1693 <entry><type>text</type></entry>
1696 Convert <parameter>string</parameter> to <acronym>ASCII</acronym> from another encoding
1697 (only supports conversion from <literal>LATIN1</>, <literal>LATIN2</>, <literal>LATIN9</>,
1698 and <literal>WIN1250</> encodings)
1701 <entry><literal>to_ascii('Karel')</literal></entry>
1702 <entry><literal>Karel</literal></entry>
1706 <entry><literal><function>to_hex</function>(<parameter>number</parameter> <type>int</type>
1707 or <type>bigint</type>)</literal></entry>
1708 <entry><type>text</type></entry>
1709 <entry>Convert <parameter>number</parameter> to its equivalent hexadecimal
1712 <entry><literal>to_hex(2147483647)</literal></entry>
1713 <entry><literal>7fffffff</literal></entry>
1718 <literal><function>translate</function>(<parameter>string</parameter> <type>text</type>,
1719 <parameter>from</parameter> <type>text</type>,
1720 <parameter>to</parameter> <type>text</type>)</literal>
1722 <entry><type>text</type></entry>
1724 Any character in <parameter>string</parameter> that matches a
1725 character in the <parameter>from</parameter> set is replaced by
1726 the corresponding character in the <parameter>to</parameter>
1729 <entry><literal>translate('12345', '14', 'ax')</literal></entry>
1730 <entry><literal>a23x5</literal></entry>
1738 <table id="conversion-names">
1739 <title>Built-in Conversions</title>
1743 <entry>Conversion Name
1746 The conversion names follow a standard naming scheme: The
1747 official name of the source encoding with all
1748 non-alphanumeric characters replaced by underscores followed
1749 by <literal>_to_</literal> followed by the equally processed
1750 destination encoding name. Therefore the names might deviate
1751 from the customary encoding names.
1755 <entry>Source Encoding</entry>
1756 <entry>Destination Encoding</entry>
1762 <entry><literal>ascii_to_mic</literal></entry>
1763 <entry><literal>SQL_ASCII</literal></entry>
1764 <entry><literal>MULE_INTERNAL</literal></entry>
1768 <entry><literal>ascii_to_utf8</literal></entry>
1769 <entry><literal>SQL_ASCII</literal></entry>
1770 <entry><literal>UTF8</literal></entry>
1774 <entry><literal>big5_to_euc_tw</literal></entry>
1775 <entry><literal>BIG5</literal></entry>
1776 <entry><literal>EUC_TW</literal></entry>
1780 <entry><literal>big5_to_mic</literal></entry>
1781 <entry><literal>BIG5</literal></entry>
1782 <entry><literal>MULE_INTERNAL</literal></entry>
1786 <entry><literal>big5_to_utf8</literal></entry>
1787 <entry><literal>BIG5</literal></entry>
1788 <entry><literal>UTF8</literal></entry>
1792 <entry><literal>euc_cn_to_mic</literal></entry>
1793 <entry><literal>EUC_CN</literal></entry>
1794 <entry><literal>MULE_INTERNAL</literal></entry>
1798 <entry><literal>euc_cn_to_utf8</literal></entry>
1799 <entry><literal>EUC_CN</literal></entry>
1800 <entry><literal>UTF8</literal></entry>
1804 <entry><literal>euc_jp_to_mic</literal></entry>
1805 <entry><literal>EUC_JP</literal></entry>
1806 <entry><literal>MULE_INTERNAL</literal></entry>
1810 <entry><literal>euc_jp_to_sjis</literal></entry>
1811 <entry><literal>EUC_JP</literal></entry>
1812 <entry><literal>SJIS</literal></entry>
1816 <entry><literal>euc_jp_to_utf8</literal></entry>
1817 <entry><literal>EUC_JP</literal></entry>
1818 <entry><literal>UTF8</literal></entry>
1822 <entry><literal>euc_kr_to_mic</literal></entry>
1823 <entry><literal>EUC_KR</literal></entry>
1824 <entry><literal>MULE_INTERNAL</literal></entry>
1828 <entry><literal>euc_kr_to_utf8</literal></entry>
1829 <entry><literal>EUC_KR</literal></entry>
1830 <entry><literal>UTF8</literal></entry>
1834 <entry><literal>euc_tw_to_big5</literal></entry>
1835 <entry><literal>EUC_TW</literal></entry>
1836 <entry><literal>BIG5</literal></entry>
1840 <entry><literal>euc_tw_to_mic</literal></entry>
1841 <entry><literal>EUC_TW</literal></entry>
1842 <entry><literal>MULE_INTERNAL</literal></entry>
1846 <entry><literal>euc_tw_to_utf8</literal></entry>
1847 <entry><literal>EUC_TW</literal></entry>
1848 <entry><literal>UTF8</literal></entry>
1852 <entry><literal>gb18030_to_utf8</literal></entry>
1853 <entry><literal>GB18030</literal></entry>
1854 <entry><literal>UTF8</literal></entry>
1858 <entry><literal>gbk_to_utf8</literal></entry>
1859 <entry><literal>GBK</literal></entry>
1860 <entry><literal>UTF8</literal></entry>
1864 <entry><literal>iso_8859_10_to_utf8</literal></entry>
1865 <entry><literal>LATIN6</literal></entry>
1866 <entry><literal>UTF8</literal></entry>
1870 <entry><literal>iso_8859_13_to_utf8</literal></entry>
1871 <entry><literal>LATIN7</literal></entry>
1872 <entry><literal>UTF8</literal></entry>
1876 <entry><literal>iso_8859_14_to_utf8</literal></entry>
1877 <entry><literal>LATIN8</literal></entry>
1878 <entry><literal>UTF8</literal></entry>
1882 <entry><literal>iso_8859_15_to_utf8</literal></entry>
1883 <entry><literal>LATIN9</literal></entry>
1884 <entry><literal>UTF8</literal></entry>
1888 <entry><literal>iso_8859_16_to_utf8</literal></entry>
1889 <entry><literal>LATIN10</literal></entry>
1890 <entry><literal>UTF8</literal></entry>
1894 <entry><literal>iso_8859_1_to_mic</literal></entry>
1895 <entry><literal>LATIN1</literal></entry>
1896 <entry><literal>MULE_INTERNAL</literal></entry>
1900 <entry><literal>iso_8859_1_to_utf8</literal></entry>
1901 <entry><literal>LATIN1</literal></entry>
1902 <entry><literal>UTF8</literal></entry>
1906 <entry><literal>iso_8859_2_to_mic</literal></entry>
1907 <entry><literal>LATIN2</literal></entry>
1908 <entry><literal>MULE_INTERNAL</literal></entry>
1912 <entry><literal>iso_8859_2_to_utf8</literal></entry>
1913 <entry><literal>LATIN2</literal></entry>
1914 <entry><literal>UTF8</literal></entry>
1918 <entry><literal>iso_8859_2_to_windows_1250</literal></entry>
1919 <entry><literal>LATIN2</literal></entry>
1920 <entry><literal>WIN1250</literal></entry>
1924 <entry><literal>iso_8859_3_to_mic</literal></entry>
1925 <entry><literal>LATIN3</literal></entry>
1926 <entry><literal>MULE_INTERNAL</literal></entry>
1930 <entry><literal>iso_8859_3_to_utf8</literal></entry>
1931 <entry><literal>LATIN3</literal></entry>
1932 <entry><literal>UTF8</literal></entry>
1936 <entry><literal>iso_8859_4_to_mic</literal></entry>
1937 <entry><literal>LATIN4</literal></entry>
1938 <entry><literal>MULE_INTERNAL</literal></entry>
1942 <entry><literal>iso_8859_4_to_utf8</literal></entry>
1943 <entry><literal>LATIN4</literal></entry>
1944 <entry><literal>UTF8</literal></entry>
1948 <entry><literal>iso_8859_5_to_koi8_r</literal></entry>
1949 <entry><literal>ISO_8859_5</literal></entry>
1950 <entry><literal>KOI8</literal></entry>
1954 <entry><literal>iso_8859_5_to_mic</literal></entry>
1955 <entry><literal>ISO_8859_5</literal></entry>
1956 <entry><literal>MULE_INTERNAL</literal></entry>
1960 <entry><literal>iso_8859_5_to_utf8</literal></entry>
1961 <entry><literal>ISO_8859_5</literal></entry>
1962 <entry><literal>UTF8</literal></entry>
1966 <entry><literal>iso_8859_5_to_windows_1251</literal></entry>
1967 <entry><literal>ISO_8859_5</literal></entry>
1968 <entry><literal>WIN1251</literal></entry>
1972 <entry><literal>iso_8859_5_to_windows_866</literal></entry>
1973 <entry><literal>ISO_8859_5</literal></entry>
1974 <entry><literal>WIN866</literal></entry>
1978 <entry><literal>iso_8859_6_to_utf8</literal></entry>
1979 <entry><literal>ISO_8859_6</literal></entry>
1980 <entry><literal>UTF8</literal></entry>
1984 <entry><literal>iso_8859_7_to_utf8</literal></entry>
1985 <entry><literal>ISO_8859_7</literal></entry>
1986 <entry><literal>UTF8</literal></entry>
1990 <entry><literal>iso_8859_8_to_utf8</literal></entry>
1991 <entry><literal>ISO_8859_8</literal></entry>
1992 <entry><literal>UTF8</literal></entry>
1996 <entry><literal>iso_8859_9_to_utf8</literal></entry>
1997 <entry><literal>LATIN5</literal></entry>
1998 <entry><literal>UTF8</literal></entry>
2002 <entry><literal>johab_to_utf8</literal></entry>
2003 <entry><literal>JOHAB</literal></entry>
2004 <entry><literal>UTF8</literal></entry>
2008 <entry><literal>koi8_r_to_iso_8859_5</literal></entry>
2009 <entry><literal>KOI8</literal></entry>
2010 <entry><literal>ISO_8859_5</literal></entry>
2014 <entry><literal>koi8_r_to_mic</literal></entry>
2015 <entry><literal>KOI8</literal></entry>
2016 <entry><literal>MULE_INTERNAL</literal></entry>
2020 <entry><literal>koi8_r_to_utf8</literal></entry>
2021 <entry><literal>KOI8</literal></entry>
2022 <entry><literal>UTF8</literal></entry>
2026 <entry><literal>koi8_r_to_windows_1251</literal></entry>
2027 <entry><literal>KOI8</literal></entry>
2028 <entry><literal>WIN1251</literal></entry>
2032 <entry><literal>koi8_r_to_windows_866</literal></entry>
2033 <entry><literal>KOI8</literal></entry>
2034 <entry><literal>WIN866</literal></entry>
2038 <entry><literal>mic_to_ascii</literal></entry>
2039 <entry><literal>MULE_INTERNAL</literal></entry>
2040 <entry><literal>SQL_ASCII</literal></entry>
2044 <entry><literal>mic_to_big5</literal></entry>
2045 <entry><literal>MULE_INTERNAL</literal></entry>
2046 <entry><literal>BIG5</literal></entry>
2050 <entry><literal>mic_to_euc_cn</literal></entry>
2051 <entry><literal>MULE_INTERNAL</literal></entry>
2052 <entry><literal>EUC_CN</literal></entry>
2056 <entry><literal>mic_to_euc_jp</literal></entry>
2057 <entry><literal>MULE_INTERNAL</literal></entry>
2058 <entry><literal>EUC_JP</literal></entry>
2062 <entry><literal>mic_to_euc_kr</literal></entry>
2063 <entry><literal>MULE_INTERNAL</literal></entry>
2064 <entry><literal>EUC_KR</literal></entry>
2068 <entry><literal>mic_to_euc_tw</literal></entry>
2069 <entry><literal>MULE_INTERNAL</literal></entry>
2070 <entry><literal>EUC_TW</literal></entry>
2074 <entry><literal>mic_to_iso_8859_1</literal></entry>
2075 <entry><literal>MULE_INTERNAL</literal></entry>
2076 <entry><literal>LATIN1</literal></entry>
2080 <entry><literal>mic_to_iso_8859_2</literal></entry>
2081 <entry><literal>MULE_INTERNAL</literal></entry>
2082 <entry><literal>LATIN2</literal></entry>
2086 <entry><literal>mic_to_iso_8859_3</literal></entry>
2087 <entry><literal>MULE_INTERNAL</literal></entry>
2088 <entry><literal>LATIN3</literal></entry>
2092 <entry><literal>mic_to_iso_8859_4</literal></entry>
2093 <entry><literal>MULE_INTERNAL</literal></entry>
2094 <entry><literal>LATIN4</literal></entry>
2098 <entry><literal>mic_to_iso_8859_5</literal></entry>
2099 <entry><literal>MULE_INTERNAL</literal></entry>
2100 <entry><literal>ISO_8859_5</literal></entry>
2104 <entry><literal>mic_to_koi8_r</literal></entry>
2105 <entry><literal>MULE_INTERNAL</literal></entry>
2106 <entry><literal>KOI8</literal></entry>
2110 <entry><literal>mic_to_sjis</literal></entry>
2111 <entry><literal>MULE_INTERNAL</literal></entry>
2112 <entry><literal>SJIS</literal></entry>
2116 <entry><literal>mic_to_windows_1250</literal></entry>
2117 <entry><literal>MULE_INTERNAL</literal></entry>
2118 <entry><literal>WIN1250</literal></entry>
2122 <entry><literal>mic_to_windows_1251</literal></entry>
2123 <entry><literal>MULE_INTERNAL</literal></entry>
2124 <entry><literal>WIN1251</literal></entry>
2128 <entry><literal>mic_to_windows_866</literal></entry>
2129 <entry><literal>MULE_INTERNAL</literal></entry>
2130 <entry><literal>WIN866</literal></entry>
2134 <entry><literal>sjis_to_euc_jp</literal></entry>
2135 <entry><literal>SJIS</literal></entry>
2136 <entry><literal>EUC_JP</literal></entry>
2140 <entry><literal>sjis_to_mic</literal></entry>
2141 <entry><literal>SJIS</literal></entry>
2142 <entry><literal>MULE_INTERNAL</literal></entry>
2146 <entry><literal>sjis_to_utf8</literal></entry>
2147 <entry><literal>SJIS</literal></entry>
2148 <entry><literal>UTF8</literal></entry>
2152 <entry><literal>tcvn_to_utf8</literal></entry>
2153 <entry><literal>WIN1258</literal></entry>
2154 <entry><literal>UTF8</literal></entry>
2158 <entry><literal>uhc_to_utf8</literal></entry>
2159 <entry><literal>UHC</literal></entry>
2160 <entry><literal>UTF8</literal></entry>
2164 <entry><literal>utf8_to_ascii</literal></entry>
2165 <entry><literal>UTF8</literal></entry>
2166 <entry><literal>SQL_ASCII</literal></entry>
2170 <entry><literal>utf8_to_big5</literal></entry>
2171 <entry><literal>UTF8</literal></entry>
2172 <entry><literal>BIG5</literal></entry>
2176 <entry><literal>utf8_to_euc_cn</literal></entry>
2177 <entry><literal>UTF8</literal></entry>
2178 <entry><literal>EUC_CN</literal></entry>
2182 <entry><literal>utf8_to_euc_jp</literal></entry>
2183 <entry><literal>UTF8</literal></entry>
2184 <entry><literal>EUC_JP</literal></entry>
2188 <entry><literal>utf8_to_euc_kr</literal></entry>
2189 <entry><literal>UTF8</literal></entry>
2190 <entry><literal>EUC_KR</literal></entry>
2194 <entry><literal>utf8_to_euc_tw</literal></entry>
2195 <entry><literal>UTF8</literal></entry>
2196 <entry><literal>EUC_TW</literal></entry>
2200 <entry><literal>utf8_to_gb18030</literal></entry>
2201 <entry><literal>UTF8</literal></entry>
2202 <entry><literal>GB18030</literal></entry>
2206 <entry><literal>utf8_to_gbk</literal></entry>
2207 <entry><literal>UTF8</literal></entry>
2208 <entry><literal>GBK</literal></entry>
2212 <entry><literal>utf8_to_iso_8859_1</literal></entry>
2213 <entry><literal>UTF8</literal></entry>
2214 <entry><literal>LATIN1</literal></entry>
2218 <entry><literal>utf8_to_iso_8859_10</literal></entry>
2219 <entry><literal>UTF8</literal></entry>
2220 <entry><literal>LATIN6</literal></entry>
2224 <entry><literal>utf8_to_iso_8859_13</literal></entry>
2225 <entry><literal>UTF8</literal></entry>
2226 <entry><literal>LATIN7</literal></entry>
2230 <entry><literal>utf8_to_iso_8859_14</literal></entry>
2231 <entry><literal>UTF8</literal></entry>
2232 <entry><literal>LATIN8</literal></entry>
2236 <entry><literal>utf8_to_iso_8859_15</literal></entry>
2237 <entry><literal>UTF8</literal></entry>
2238 <entry><literal>LATIN9</literal></entry>
2242 <entry><literal>utf8_to_iso_8859_16</literal></entry>
2243 <entry><literal>UTF8</literal></entry>
2244 <entry><literal>LATIN10</literal></entry>
2248 <entry><literal>utf8_to_iso_8859_2</literal></entry>
2249 <entry><literal>UTF8</literal></entry>
2250 <entry><literal>LATIN2</literal></entry>
2254 <entry><literal>utf8_to_iso_8859_3</literal></entry>
2255 <entry><literal>UTF8</literal></entry>
2256 <entry><literal>LATIN3</literal></entry>
2260 <entry><literal>utf8_to_iso_8859_4</literal></entry>
2261 <entry><literal>UTF8</literal></entry>
2262 <entry><literal>LATIN4</literal></entry>
2266 <entry><literal>utf8_to_iso_8859_5</literal></entry>
2267 <entry><literal>UTF8</literal></entry>
2268 <entry><literal>ISO_8859_5</literal></entry>
2272 <entry><literal>utf8_to_iso_8859_6</literal></entry>
2273 <entry><literal>UTF8</literal></entry>
2274 <entry><literal>ISO_8859_6</literal></entry>
2278 <entry><literal>utf8_to_iso_8859_7</literal></entry>
2279 <entry><literal>UTF8</literal></entry>
2280 <entry><literal>ISO_8859_7</literal></entry>
2284 <entry><literal>utf8_to_iso_8859_8</literal></entry>
2285 <entry><literal>UTF8</literal></entry>
2286 <entry><literal>ISO_8859_8</literal></entry>
2290 <entry><literal>utf8_to_iso_8859_9</literal></entry>
2291 <entry><literal>UTF8</literal></entry>
2292 <entry><literal>LATIN5</literal></entry>
2296 <entry><literal>utf8_to_johab</literal></entry>
2297 <entry><literal>UTF8</literal></entry>
2298 <entry><literal>JOHAB</literal></entry>
2302 <entry><literal>utf8_to_koi8_r</literal></entry>
2303 <entry><literal>UTF8</literal></entry>
2304 <entry><literal>KOI8</literal></entry>
2308 <entry><literal>utf8_to_sjis</literal></entry>
2309 <entry><literal>UTF8</literal></entry>
2310 <entry><literal>SJIS</literal></entry>
2314 <entry><literal>utf8_to_tcvn</literal></entry>
2315 <entry><literal>UTF8</literal></entry>
2316 <entry><literal>WIN1258</literal></entry>
2320 <entry><literal>utf8_to_uhc</literal></entry>
2321 <entry><literal>UTF8</literal></entry>
2322 <entry><literal>UHC</literal></entry>
2326 <entry><literal>utf8_to_windows_1250</literal></entry>
2327 <entry><literal>UTF8</literal></entry>
2328 <entry><literal>WIN1250</literal></entry>
2332 <entry><literal>utf8_to_windows_1251</literal></entry>
2333 <entry><literal>UTF8</literal></entry>
2334 <entry><literal>WIN1251</literal></entry>
2338 <entry><literal>utf8_to_windows_1252</literal></entry>
2339 <entry><literal>UTF8</literal></entry>
2340 <entry><literal>WIN1252</literal></entry>
2344 <entry><literal>utf8_to_windows_1253</literal></entry>
2345 <entry><literal>UTF8</literal></entry>
2346 <entry><literal>WIN1253</literal></entry>
2350 <entry><literal>utf8_to_windows_1254</literal></entry>
2351 <entry><literal>UTF8</literal></entry>
2352 <entry><literal>WIN1254</literal></entry>
2356 <entry><literal>utf8_to_windows_1255</literal></entry>
2357 <entry><literal>UTF8</literal></entry>
2358 <entry><literal>WIN1255</literal></entry>
2362 <entry><literal>utf8_to_windows_1256</literal></entry>
2363 <entry><literal>UTF8</literal></entry>
2364 <entry><literal>WIN1256</literal></entry>
2368 <entry><literal>utf8_to_windows_1257</literal></entry>
2369 <entry><literal>UTF8</literal></entry>
2370 <entry><literal>WIN1257</literal></entry>
2374 <entry><literal>utf8_to_windows_866</literal></entry>
2375 <entry><literal>UTF8</literal></entry>
2376 <entry><literal>WIN866</literal></entry>
2380 <entry><literal>utf8_to_windows_874</literal></entry>
2381 <entry><literal>UTF8</literal></entry>
2382 <entry><literal>WIN874</literal></entry>
2386 <entry><literal>windows_1250_to_iso_8859_2</literal></entry>
2387 <entry><literal>WIN1250</literal></entry>
2388 <entry><literal>LATIN2</literal></entry>
2392 <entry><literal>windows_1250_to_mic</literal></entry>
2393 <entry><literal>WIN1250</literal></entry>
2394 <entry><literal>MULE_INTERNAL</literal></entry>
2398 <entry><literal>windows_1250_to_utf8</literal></entry>
2399 <entry><literal>WIN1250</literal></entry>
2400 <entry><literal>UTF8</literal></entry>
2404 <entry><literal>windows_1251_to_iso_8859_5</literal></entry>
2405 <entry><literal>WIN1251</literal></entry>
2406 <entry><literal>ISO_8859_5</literal></entry>
2410 <entry><literal>windows_1251_to_koi8_r</literal></entry>
2411 <entry><literal>WIN1251</literal></entry>
2412 <entry><literal>KOI8</literal></entry>
2416 <entry><literal>windows_1251_to_mic</literal></entry>
2417 <entry><literal>WIN1251</literal></entry>
2418 <entry><literal>MULE_INTERNAL</literal></entry>
2422 <entry><literal>windows_1251_to_utf8</literal></entry>
2423 <entry><literal>WIN1251</literal></entry>
2424 <entry><literal>UTF8</literal></entry>
2428 <entry><literal>windows_1251_to_windows_866</literal></entry>
2429 <entry><literal>WIN1251</literal></entry>
2430 <entry><literal>WIN866</literal></entry>
2434 <entry><literal>windows_1252_to_utf8</literal></entry>
2435 <entry><literal>WIN1252</literal></entry>
2436 <entry><literal>UTF8</literal></entry>
2440 <entry><literal>windows_1256_to_utf8</literal></entry>
2441 <entry><literal>WIN1256</literal></entry>
2442 <entry><literal>UTF8</literal></entry>
2446 <entry><literal>windows_866_to_iso_8859_5</literal></entry>
2447 <entry><literal>WIN866</literal></entry>
2448 <entry><literal>ISO_8859_5</literal></entry>
2452 <entry><literal>windows_866_to_koi8_r</literal></entry>
2453 <entry><literal>WIN866</literal></entry>
2454 <entry><literal>KOI8</literal></entry>
2458 <entry><literal>windows_866_to_mic</literal></entry>
2459 <entry><literal>WIN866</literal></entry>
2460 <entry><literal>MULE_INTERNAL</literal></entry>
2464 <entry><literal>windows_866_to_utf8</literal></entry>
2465 <entry><literal>WIN866</literal></entry>
2466 <entry><literal>UTF8</literal></entry>
2470 <entry><literal>windows_866_to_windows_1251</literal></entry>
2471 <entry><literal>WIN866</literal></entry>
2472 <entry><literal>WIN</literal></entry>
2476 <entry><literal>windows_874_to_utf8</literal></entry>
2477 <entry><literal>WIN874</literal></entry>
2478 <entry><literal>UTF8</literal></entry>
2482 <entry><literal>euc_jis_2004_to_utf8</literal></entry>
2483 <entry><literal>EUC_JIS_2004</literal></entry>
2484 <entry><literal>UTF8</literal></entry>
2488 <entry><literal>ut8_to_euc_jis_2004</literal></entry>
2489 <entry><literal>UTF8</literal></entry>
2490 <entry><literal>EUC_JIS_2004</literal></entry>
2494 <entry><literal>shift_jis_2004_to_utf8</literal></entry>
2495 <entry><literal>SHIFT_JIS_2004</literal></entry>
2496 <entry><literal>UTF8</literal></entry>
2500 <entry><literal>ut8_to_shift_jis_2004</literal></entry>
2501 <entry><literal>UTF8</literal></entry>
2502 <entry><literal>SHIFT_JIS_2004</literal></entry>
2506 <entry><literal>euc_jis_2004_to_shift_jis_2004</literal></entry>
2507 <entry><literal>EUC_JIS_2004</literal></entry>
2508 <entry><literal>SHIFT_JIS_2004</literal></entry>
2512 <entry><literal>shift_jis_2004_to_euc_jis_2004</literal></entry>
2513 <entry><literal>SHIFT_JIS_2004</literal></entry>
2514 <entry><literal>EUC_JIS_2004</literal></entry>
2524 <sect1 id="functions-binarystring">
2525 <title>Binary String Functions and Operators</title>
2527 <indexterm zone="functions-binarystring">
2528 <primary>binary data</primary>
2529 <secondary>functions</secondary>
2533 This section describes functions and operators for examining and
2534 manipulating values of type <type>bytea</type>.
2538 <acronym>SQL</acronym> defines some string functions with a
2539 special syntax where
2540 certain key words rather than commas are used to separate the
2541 arguments. Details are in
2542 <xref linkend="functions-binarystring-sql">.
2543 Some functions are also implemented using the regular syntax for
2544 function invocation.
2545 (See <xref linkend="functions-binarystring-other">.)
2548 <table id="functions-binarystring-sql">
2549 <title><acronym>SQL</acronym> Binary String Functions and Operators</title>
2553 <entry>Function</entry>
2554 <entry>Return Type</entry>
2555 <entry>Description</entry>
2556 <entry>Example</entry>
2557 <entry>Result</entry>
2563 <entry><literal><parameter>string</parameter> <literal>||</literal>
2564 <parameter>string</parameter></literal></entry>
2565 <entry> <type>bytea</type> </entry>
2567 String concatenation
2569 <primary>binary string</primary>
2570 <secondary>concatenation</secondary>
2573 <entry><literal>E'\\\\Post'::bytea || E'\\047gres\\000'::bytea</literal></entry>
2574 <entry><literal>\\Post'gres\000</literal></entry>
2578 <entry><function>get_bit</function>(<parameter>string</parameter>, <parameter>offset</parameter>)</entry>
2579 <entry><type>int</type></entry>
2581 Extract bit from string
2583 <primary>get_bit</primary>
2586 <entry><literal>get_bit(E'Th\\000omas'::bytea, 45)</literal></entry>
2587 <entry><literal>1</literal></entry>
2591 <entry><function>get_byte</function>(<parameter>string</parameter>, <parameter>offset</parameter>)</entry>
2592 <entry><type>int</type></entry>
2594 Extract byte from string
2596 <primary>get_byte</primary>
2599 <entry><literal>get_byte(E'Th\\000omas'::bytea, 4)</literal></entry>
2600 <entry><literal>109</literal></entry>
2604 <entry><literal><function>octet_length</function>(<parameter>string</parameter>)</literal></entry>
2605 <entry><type>int</type></entry>
2606 <entry>Number of bytes in binary string</entry>
2607 <entry><literal>octet_length(E'jo\\000se'::bytea)</literal></entry>
2608 <entry><literal>5</literal></entry>
2612 <entry><literal><function>position</function>(<parameter>substring</parameter> in <parameter>string</parameter>)</literal></entry>
2613 <entry><type>int</type></entry>
2614 <entry>Location of specified substring</entry>
2615 <entry><literal>position(E'\\000om'::bytea in E'Th\\000omas'::bytea)</literal></entry>
2616 <entry><literal>3</literal></entry>
2620 <entry><function>set_bit</function>(<parameter>string</parameter>,
2621 <parameter>offset</parameter>, <parameter>newvalue</>)</entry>
2622 <entry><type>bytea</type></entry>
2626 <primary>set_bit</primary>
2629 <entry><literal>set_bit(E'Th\\000omas'::bytea, 45, 0)</literal></entry>
2630 <entry><literal>Th\000omAs</literal></entry>
2634 <entry><function>set_byte</function>(<parameter>string</parameter>,
2635 <parameter>offset</parameter>, <parameter>newvalue</>)</entry>
2636 <entry><type>bytea</type></entry>
2640 <primary>set_byte</primary>
2643 <entry><literal>set_byte(E'Th\\000omas'::bytea, 4, 64)</literal></entry>
2644 <entry><literal>Th\000o@as</literal></entry>
2648 <entry><literal><function>substring</function>(<parameter>string</parameter> <optional>from <type>int</type></optional> <optional>for <type>int</type></optional>)</literal></entry>
2649 <entry><type>bytea</type></entry>
2653 <primary>substring</primary>
2656 <entry><literal>substring(E'Th\\000omas'::bytea from 2 for 3)</literal></entry>
2657 <entry><literal>h\000o</literal></entry>
2662 <literal><function>trim</function>(<optional>both</optional>
2663 <parameter>bytes</parameter> from
2664 <parameter>string</parameter>)</literal>
2666 <entry><type>bytea</type></entry>
2668 Remove the longest string containing only the bytes in
2669 <parameter>bytes</parameter> from the start
2670 and end of <parameter>string</parameter>
2672 <entry><literal>trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea)</literal></entry>
2673 <entry><literal>Tom</literal></entry>
2680 Additional binary string manipulation functions are available and
2681 are listed in <xref linkend="functions-binarystring-other">. Some
2682 of them are used internally to implement the
2683 <acronym>SQL</acronym>-standard string functions listed in <xref
2684 linkend="functions-binarystring-sql">.
2687 <table id="functions-binarystring-other">
2688 <title>Other Binary String Functions</title>
2692 <entry>Function</entry>
2693 <entry>Return Type</entry>
2694 <entry>Description</entry>
2695 <entry>Example</entry>
2696 <entry>Result</entry>
2702 <entry><literal><function>btrim</function>(<parameter>string</parameter>
2703 <type>bytea</type>, <parameter>bytes</parameter> <type>bytea</type>)</literal></entry>
2704 <entry><type>bytea</type></entry>
2706 Remove the longest string consisting only of bytes
2707 in <parameter>bytes</parameter> from the start and end of
2708 <parameter>string</parameter>
2710 <entry><literal>btrim(E'\\000trim\\000'::bytea, E'\\000'::bytea)</literal></entry>
2711 <entry><literal>trim</literal></entry>
2716 <literal><function>decode</function>(<parameter>string</parameter> <type>text</type>,
2717 <parameter>type</parameter> <type>text</type>)</literal>
2719 <entry><type>bytea</type></entry>
2721 Decode binary string from <parameter>string</parameter> previously
2722 encoded with <function>encode</>. Parameter type is same as in <function>encode</>.
2724 <entry><literal>decode(E'123\\000456', 'escape')</literal></entry>
2725 <entry><literal>123\000456</literal></entry>
2730 <literal><function>encode</function>(<parameter>string</parameter> <type>bytea</type>,
2731 <parameter>type</parameter> <type>text</type>)</literal>
2733 <entry><type>text</type></entry>
2735 Encode binary string to <acronym>ASCII</acronym>-only representation. Supported
2736 types are: <literal>base64</>, <literal>hex</>, <literal>escape</>.
2738 <entry><literal>encode(E'123\\000456'::bytea, 'escape')</literal></entry>
2739 <entry><literal>123\000456</literal></entry>
2743 <entry><literal><function>length</function>(<parameter>string</parameter>)</literal></entry>
2744 <entry><type>int</type></entry>
2746 Length of binary string
2748 <primary>binary string</primary>
2749 <secondary>length</secondary>
2752 <primary>length</primary>
2753 <secondary sortas="binary string">of a binary string</secondary>
2754 <see>binary strings, length</see>
2757 <entry><literal>length(E'jo\\000se'::bytea)</literal></entry>
2758 <entry><literal>5</literal></entry>
2762 <entry><literal><function>md5</function>(<parameter>string</parameter>)</literal></entry>
2763 <entry><type>text</type></entry>
2765 Calculates the MD5 hash of <parameter>string</parameter>,
2766 returning the result in hexadecimal
2768 <entry><literal>md5(E'Th\\000omas'::bytea)</literal></entry>
2769 <entry><literal>8ab2d3c9689aaf18 b4958c334c82d8b1</literal></entry>
2778 <sect1 id="functions-bitstring">
2779 <title>Bit String Functions and Operators</title>
2781 <indexterm zone="functions-bitstring">
2782 <primary>bit strings</primary>
2783 <secondary>functions</secondary>
2787 This section describes functions and operators for examining and
2788 manipulating bit strings, that is values of the types
2789 <type>bit</type> and <type>bit varying</type>. Aside from the
2790 usual comparison operators, the operators
2791 shown in <xref linkend="functions-bit-string-op-table"> can be used.
2792 Bit string operands of <literal>&</literal>, <literal>|</literal>,
2793 and <literal>#</literal> must be of equal length. When bit
2794 shifting, the original length of the string is preserved, as shown
2798 <table id="functions-bit-string-op-table">
2799 <title>Bit String Operators</title>
2804 <entry>Operator</entry>
2805 <entry>Description</entry>
2806 <entry>Example</entry>
2807 <entry>Result</entry>
2813 <entry> <literal>||</literal> </entry>
2814 <entry>concatenation</entry>
2815 <entry><literal>B'10001' || B'011'</literal></entry>
2816 <entry><literal>10001011</literal></entry>
2820 <entry> <literal>&</literal> </entry>
2821 <entry>bitwise AND</entry>
2822 <entry><literal>B'10001' & B'01101'</literal></entry>
2823 <entry><literal>00001</literal></entry>
2827 <entry> <literal>|</literal> </entry>
2828 <entry>bitwise OR</entry>
2829 <entry><literal>B'10001' | B'01101'</literal></entry>
2830 <entry><literal>11101</literal></entry>
2834 <entry> <literal>#</literal> </entry>
2835 <entry>bitwise XOR</entry>
2836 <entry><literal>B'10001' # B'01101'</literal></entry>
2837 <entry><literal>11100</literal></entry>
2841 <entry> <literal>~</literal> </entry>
2842 <entry>bitwise NOT</entry>
2843 <entry><literal>~ B'10001'</literal></entry>
2844 <entry><literal>01110</literal></entry>
2848 <entry> <literal><<</literal> </entry>
2849 <entry>bitwise shift left</entry>
2850 <entry><literal>B'10001' << 3</literal></entry>
2851 <entry><literal>01000</literal></entry>
2855 <entry> <literal>>></literal> </entry>
2856 <entry>bitwise shift right</entry>
2857 <entry><literal>B'10001' >> 2</literal></entry>
2858 <entry><literal>00100</literal></entry>
2865 The following <acronym>SQL</acronym>-standard functions work on bit
2866 strings as well as character strings:
2867 <literal><function>length</function></literal>,
2868 <literal><function>bit_length</function></literal>,
2869 <literal><function>octet_length</function></literal>,
2870 <literal><function>position</function></literal>,
2871 <literal><function>substring</function></literal>.
2875 In addition, it is possible to cast integral values to and from type
2879 44::bit(10) <lineannotation>0000101100</lineannotation>
2880 44::bit(3) <lineannotation>100</lineannotation>
2881 cast(-44 as bit(12)) <lineannotation>111111010100</lineannotation>
2882 '1110'::bit(4)::integer <lineannotation>14</lineannotation>
2884 Note that casting to just <quote>bit</> means casting to
2885 <literal>bit(1)</>, and so it will deliver only the least significant
2891 Prior to <productname>PostgreSQL</productname> 8.0, casting an
2892 integer to <type>bit(n)</> would copy the leftmost <literal>n</>
2893 bits of the integer, whereas now it copies the rightmost <literal>n</>
2894 bits. Also, casting an integer to a bit string width wider than
2895 the integer itself will sign-extend on the left.
2902 <sect1 id="functions-matching">
2903 <title>Pattern Matching</title>
2905 <indexterm zone="functions-matching">
2906 <primary>pattern matching</primary>
2910 There are three separate approaches to pattern matching provided
2911 by <productname>PostgreSQL</productname>: the traditional
2912 <acronym>SQL</acronym> <function>LIKE</function> operator, the
2913 more recent <function>SIMILAR TO</function> operator (added in
2914 SQL:1999), and <acronym>POSIX</acronym>-style regular
2915 expressions. Aside from the basic <quote>does this string match
2916 this pattern?</> operators, functions are available to extract
2917 or replace matching substrings and to split a string at the matches.
2922 If you have pattern matching needs that go beyond this,
2923 consider writing a user-defined function in Perl or Tcl.
2927 <sect2 id="functions-like">
2928 <title><function>LIKE</function></title>
2931 <primary>LIKE</primary>
2935 <replaceable>string</replaceable> LIKE <replaceable>pattern</replaceable> <optional>ESCAPE <replaceable>escape-character</replaceable></optional>
2936 <replaceable>string</replaceable> NOT LIKE <replaceable>pattern</replaceable> <optional>ESCAPE <replaceable>escape-character</replaceable></optional>
2940 Every <replaceable>pattern</replaceable> defines a set of strings.
2941 The <function>LIKE</function> expression returns true if the
2942 <replaceable>string</replaceable> is contained in the set of
2943 strings represented by <replaceable>pattern</replaceable>. (As
2944 expected, the <function>NOT LIKE</function> expression returns
2945 false if <function>LIKE</function> returns true, and vice versa.
2946 An equivalent expression is
2947 <literal>NOT (<replaceable>string</replaceable> LIKE
2948 <replaceable>pattern</replaceable>)</literal>.)
2952 If <replaceable>pattern</replaceable> does not contain percent
2953 signs or underscore, then the pattern only represents the string
2954 itself; in that case <function>LIKE</function> acts like the
2955 equals operator. An underscore (<literal>_</literal>) in
2956 <replaceable>pattern</replaceable> stands for (matches) any single
2957 character; a percent sign (<literal>%</literal>) matches any string
2958 of zero or more characters.
2964 'abc' LIKE 'abc' <lineannotation>true</lineannotation>
2965 'abc' LIKE 'a%' <lineannotation>true</lineannotation>
2966 'abc' LIKE '_b_' <lineannotation>true</lineannotation>
2967 'abc' LIKE 'c' <lineannotation>false</lineannotation>
2972 <function>LIKE</function> pattern matches always cover the entire
2973 string. To match a sequence anywhere within a string, the
2974 pattern must therefore start and end with a percent sign.
2978 To match a literal underscore or percent sign without matching
2979 other characters, the respective character in
2980 <replaceable>pattern</replaceable> must be
2981 preceded by the escape character. The default escape
2982 character is the backslash but a different one can be selected by
2983 using the <literal>ESCAPE</literal> clause. To match the escape
2984 character itself, write two escape characters.
2988 Note that the backslash already has a special meaning in string literals,
2989 so to write a pattern constant that contains a backslash you must write two
2990 backslashes in an SQL statement (assuming escape string syntax is used, see
2991 <xref linkend="sql-syntax-strings">). Thus, writing a pattern that
2992 actually matches a literal backslash means writing four backslashes in the
2993 statement. You can avoid this by selecting a different escape character
2994 with <literal>ESCAPE</literal>; then a backslash is not special to
2995 <function>LIKE</function> anymore. (But it is still special to the string
2996 literal parser, so you still need two of them.)
3000 It's also possible to select no escape character by writing
3001 <literal>ESCAPE ''</literal>. This effectively disables the
3002 escape mechanism, which makes it impossible to turn off the
3003 special meaning of underscore and percent signs in the pattern.
3007 The key word <token>ILIKE</token> can be used instead of
3008 <token>LIKE</token> to make the match case-insensitive according
3009 to the active locale. This is not in the <acronym>SQL</acronym> standard but is a
3010 <productname>PostgreSQL</productname> extension.
3014 The operator <literal>~~</literal> is equivalent to
3015 <function>LIKE</function>, and <literal>~~*</literal> corresponds to
3016 <function>ILIKE</function>. There are also
3017 <literal>!~~</literal> and <literal>!~~*</literal> operators that
3018 represent <function>NOT LIKE</function> and <function>NOT
3019 ILIKE</function>, respectively. All of these operators are
3020 <productname>PostgreSQL</productname>-specific.
3025 <sect2 id="functions-similarto-regexp">
3026 <title><function>SIMILAR TO</function> Regular Expressions</title>
3029 <primary>regular expression</primary>
3030 <!-- <seealso>pattern matching</seealso> breaks index build -->
3034 <primary>SIMILAR TO</primary>
3037 <primary>substring</primary>
3041 <replaceable>string</replaceable> SIMILAR TO <replaceable>pattern</replaceable> <optional>ESCAPE <replaceable>escape-character</replaceable></optional>
3042 <replaceable>string</replaceable> NOT SIMILAR TO <replaceable>pattern</replaceable> <optional>ESCAPE <replaceable>escape-character</replaceable></optional>
3046 The <function>SIMILAR TO</function> operator returns true or
3047 false depending on whether its pattern matches the given string.
3048 It is much like <function>LIKE</function>, except that it
3049 interprets the pattern using the SQL standard's definition of a
3050 regular expression. SQL regular expressions are a curious cross
3051 between <function>LIKE</function> notation and common regular
3052 expression notation.
3056 Like <function>LIKE</function>, the <function>SIMILAR TO</function>
3057 operator succeeds only if its pattern matches the entire string;
3058 this is unlike common regular expression practice, wherein the pattern
3059 can match any part of the string.
3061 <function>LIKE</function>, <function>SIMILAR TO</function> uses
3062 <literal>_</> and <literal>%</> as wildcard characters denoting
3063 any single character and any string, respectively (these are
3064 comparable to <literal>.</> and <literal>.*</> in POSIX regular
3069 In addition to these facilities borrowed from <function>LIKE</function>,
3070 <function>SIMILAR TO</function> supports these pattern-matching
3071 metacharacters borrowed from POSIX regular expressions:
3076 <literal>|</literal> denotes alternation (either of two alternatives).
3081 <literal>*</literal> denotes repetition of the previous item zero
3087 <literal>+</literal> denotes repetition of the previous item one
3093 Parentheses <literal>()</literal> can be used to group items into
3094 a single logical item.
3099 A bracket expression <literal>[...]</literal> specifies a character
3100 class, just as in POSIX regular expressions.
3105 Notice that bounded repetition (<literal>?</> and <literal>{...}</>)
3106 are not provided, though they exist in POSIX. Also, the dot (<literal>.</>)
3107 is not a metacharacter.
3111 As with <function>LIKE</>, a backslash disables the special meaning
3112 of any of these metacharacters; or a different escape character can
3113 be specified with <literal>ESCAPE</>.
3119 'abc' SIMILAR TO 'abc' <lineannotation>true</lineannotation>
3120 'abc' SIMILAR TO 'a' <lineannotation>false</lineannotation>
3121 'abc' SIMILAR TO '%(b|d)%' <lineannotation>true</lineannotation>
3122 'abc' SIMILAR TO '(b|c)%' <lineannotation>false</lineannotation>
3127 The <function>substring</> function with three parameters,
3128 <function>substring(<replaceable>string</replaceable> from
3129 <replaceable>pattern</replaceable> for
3130 <replaceable>escape-character</replaceable>)</function>, provides
3131 extraction of a substring that matches an SQL
3132 regular expression pattern. As with <literal>SIMILAR TO</>, the
3133 specified pattern must match to the entire data string, else the
3134 function fails and returns null. To indicate the part of the
3135 pattern that should be returned on success, the pattern must contain
3136 two occurrences of the escape character followed by a double quote
3137 (<literal>"</>). The text matching the portion of the pattern
3138 between these markers is returned.
3144 substring('foobar' from '%#"o_b#"%' for '#') <lineannotation>oob</lineannotation>
3145 substring('foobar' from '#"o_b#"%' for '#') <lineannotation>NULL</lineannotation>
3150 <sect2 id="functions-posix-regexp">
3151 <title><acronym>POSIX</acronym> Regular Expressions</title>
3153 <indexterm zone="functions-posix-regexp">
3154 <primary>regular expression</primary>
3155 <seealso>pattern matching</seealso>
3158 <primary>substring</primary>
3161 <primary>regexp_replace</primary>
3164 <primary>regexp_matches</primary>
3167 <primary>regexp_split_to_table</primary>
3170 <primary>regexp_split_to_array</primary>
3174 <xref linkend="functions-posix-table"> lists the available
3175 operators for pattern matching using POSIX regular expressions.
3178 <table id="functions-posix-table">
3179 <title>Regular Expression Match Operators</title>
3184 <entry>Operator</entry>
3185 <entry>Description</entry>
3186 <entry>Example</entry>
3192 <entry> <literal>~</literal> </entry>
3193 <entry>Matches regular expression, case sensitive</entry>
3194 <entry><literal>'thomas' ~ '.*thomas.*'</literal></entry>
3198 <entry> <literal>~*</literal> </entry>
3199 <entry>Matches regular expression, case insensitive</entry>
3200 <entry><literal>'thomas' ~* '.*Thomas.*'</literal></entry>
3204 <entry> <literal>!~</literal> </entry>
3205 <entry>Does not match regular expression, case sensitive</entry>
3206 <entry><literal>'thomas' !~ '.*Thomas.*'</literal></entry>
3210 <entry> <literal>!~*</literal> </entry>
3211 <entry>Does not match regular expression, case insensitive</entry>
3212 <entry><literal>'thomas' !~* '.*vadim.*'</literal></entry>
3219 <acronym>POSIX</acronym> regular expressions provide a more
3221 pattern matching than the <function>LIKE</function> and
3222 <function>SIMILAR TO</> operators.
3223 Many Unix tools such as <command>egrep</command>,
3224 <command>sed</command>, or <command>awk</command> use a pattern
3225 matching language that is similar to the one described here.
3229 A regular expression is a character sequence that is an
3230 abbreviated definition of a set of strings (a <firstterm>regular
3231 set</firstterm>). A string is said to match a regular expression
3232 if it is a member of the regular set described by the regular
3233 expression. As with <function>LIKE</function>, pattern characters
3234 match string characters exactly unless they are special characters
3235 in the regular expression language — but regular expressions use
3236 different special characters than <function>LIKE</function> does.
3237 Unlike <function>LIKE</function> patterns, a
3238 regular expression is allowed to match anywhere within a string, unless
3239 the regular expression is explicitly anchored to the beginning or
3246 'abc' ~ 'abc' <lineannotation>true</lineannotation>
3247 'abc' ~ '^a' <lineannotation>true</lineannotation>
3248 'abc' ~ '(b|d)' <lineannotation>true</lineannotation>
3249 'abc' ~ '^(b|c)' <lineannotation>false</lineannotation>
3254 The <acronym>POSIX</acronym> pattern language is described in much
3255 greater detail below.
3259 The <function>substring</> function with two parameters,
3260 <function>substring(<replaceable>string</replaceable> from
3261 <replaceable>pattern</replaceable>)</function>, provides extraction of a
3263 that matches a POSIX regular expression pattern. It returns null if
3264 there is no match, otherwise the portion of the text that matched the
3265 pattern. But if the pattern contains any parentheses, the portion
3266 of the text that matched the first parenthesized subexpression (the
3267 one whose left parenthesis comes first) is
3268 returned. You can put parentheses around the whole expression
3269 if you want to use parentheses within it without triggering this
3270 exception. If you need parentheses in the pattern before the
3271 subexpression you want to extract, see the non-capturing parentheses
3278 substring('foobar' from 'o.b') <lineannotation>oob</lineannotation>
3279 substring('foobar' from 'o(.)b') <lineannotation>o</lineannotation>
3284 The <function>regexp_replace</> function provides substitution of
3285 new text for substrings that match POSIX regular expression patterns.
3287 <function>regexp_replace</function>(<replaceable>source</>,
3288 <replaceable>pattern</>, <replaceable>replacement</>
3289 <optional>, <replaceable>flags</> </optional>).
3290 The <replaceable>source</> string is returned unchanged if
3291 there is no match to the <replaceable>pattern</>. If there is a
3292 match, the <replaceable>source</> string is returned with the
3293 <replaceable>replacement</> string substituted for the matching
3294 substring. The <replaceable>replacement</> string can contain
3295 <literal>\</><replaceable>n</>, where <replaceable>n</> is <literal>1</>
3296 through <literal>9</>, to indicate that the source substring matching the
3297 <replaceable>n</>'th parenthesized subexpression of the pattern should be
3298 inserted, and it can contain <literal>\&</> to indicate that the
3299 substring matching the entire pattern should be inserted. Write
3300 <literal>\\</> if you need to put a literal backslash in the replacement
3301 text. (As always, remember to double backslashes written in literal
3302 constant strings, assuming escape string syntax is used.)
3303 The <replaceable>flags</> parameter is an optional text
3304 string containing zero or more single-letter flags that change the
3305 function's behavior. Flag <literal>i</> specifies case-insensitive
3306 matching, while flag <literal>g</> specifies replacement of each matching
3307 substring rather than only the first one. Other supported flags are
3308 described in <xref linkend="posix-embedded-options-table">.
3314 regexp_replace('foobarbaz', 'b..', 'X')
3315 <lineannotation>fooXbaz</lineannotation>
3316 regexp_replace('foobarbaz', 'b..', 'X', 'g')
3317 <lineannotation>fooXX</lineannotation>
3318 regexp_replace('foobarbaz', 'b(..)', E'X\\1Y', 'g')
3319 <lineannotation>fooXarYXazY</lineannotation>
3324 The <function>regexp_matches</> function returns all of the captured
3325 substrings resulting from matching a POSIX regular expression pattern.
3327 <function>regexp_matches</function>(<replaceable>string</>, <replaceable>pattern</>
3328 <optional>, <replaceable>flags</> </optional>).
3329 If there is no match to the <replaceable>pattern</>, the function returns
3330 no rows. If there is a match, the function returns a text array whose
3331 <replaceable>n</>'th element is the substring matching the
3332 <replaceable>n</>'th parenthesized subexpression of the pattern
3333 (not counting <quote>non-capturing</> parentheses; see below for
3334 details). If the pattern does not contain any parenthesized
3335 subexpressions, then the result is a single-element text array containing
3336 the substring matching the whole pattern.
3337 The <replaceable>flags</> parameter is an optional text
3338 string containing zero or more single-letter flags that change the
3339 function's behavior. Flag <literal>g</> causes the function to find
3340 each match in the string, not only the first one, and return a row for
3341 each such match. Other supported
3342 flags are described in <xref linkend="posix-embedded-options-table">.
3348 SELECT regexp_matches('foobarbequebaz', '(bar)(beque)');
3354 SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g');
3361 SELECT regexp_matches('foobarbequebaz', 'barbeque');
3370 The <function>regexp_split_to_table</> function splits a string using a POSIX
3371 regular expression pattern as a delimiter. It has the syntax
3372 <function>regexp_split_to_table</function>(<replaceable>string</>, <replaceable>pattern</>
3373 <optional>, <replaceable>flags</> </optional>).
3374 If there is no match to the <replaceable>pattern</>, the function returns the
3375 <replaceable>string</>. If there is at least one match, for each match it returns
3376 the text from the end of the last match (or the beginning of the string)
3377 to the beginning of the match. When there are no more matches, it
3378 returns the text from the end of the last match to the end of the string.
3379 The <replaceable>flags</> parameter is an optional text string containing
3380 zero or more single-letter flags that change the function's behavior.
3381 <function>regexp_split_to_table</function> supports the flags described in
3382 <xref linkend="posix-embedded-options-table">.
3386 The <function>regexp_split_to_array</> function behaves the same as
3387 <function>regexp_split_to_table</>, except that <function>regexp_split_to_array</>
3388 returns its result as an array of <type>text</>. It has the syntax
3389 <function>regexp_split_to_array</function>(<replaceable>string</>, <replaceable>pattern</>
3390 <optional>, <replaceable>flags</> </optional>).
3391 The parameters are the same as for <function>regexp_split_to_table</>.
3398 SELECT foo FROM regexp_split_to_table('the quick brown fox jumped over the lazy dog', E'\\\s+') AS foo;
3412 SELECT regexp_split_to_array('the quick brown fox jumped over the lazy dog', E'\\s+');
3413 regexp_split_to_array
3414 ------------------------------------------------
3415 {the,quick,brown,fox,jumped,over,the,lazy,dog}
3418 SELECT foo FROM regexp_split_to_table('the quick brown fox', E'\\s*') AS foo;
3442 As the last example demonstrates, the regexp split functions ignore
3443 zero-length matches that occur at the start or end of the string
3444 or immediately after a previous match. This is contrary to the strict
3445 definition of regexp matching that is implemented by
3446 <function>regexp_matches</>, but is usually the most convenient behavior
3447 in practice. Other software systems such as Perl use similar definitions.
3450 <!-- derived from the re_syntax.n man page -->
3452 <sect3 id="posix-syntax-details">
3453 <title>Regular Expression Details</title>
3456 <productname>PostgreSQL</productname>'s regular expressions are implemented
3457 using a package written by Henry Spencer. Much of
3458 the description of regular expressions below is copied verbatim from his
3463 Regular expressions (<acronym>RE</acronym>s), as defined in
3464 <acronym>POSIX</acronym> 1003.2, come in two forms:
3465 <firstterm>extended</> <acronym>RE</acronym>s or <acronym>ERE</>s
3466 (roughly those of <command>egrep</command>), and
3467 <firstterm>basic</> <acronym>RE</acronym>s or <acronym>BRE</>s
3468 (roughly those of <command>ed</command>).
3469 <productname>PostgreSQL</productname> supports both forms, and
3470 also implements some extensions
3471 that are not in the POSIX standard, but have become widely used anyway
3472 due to their availability in programming languages such as Perl and Tcl.
3473 <acronym>RE</acronym>s using these non-POSIX extensions are called
3474 <firstterm>advanced</> <acronym>RE</acronym>s or <acronym>ARE</>s
3475 in this documentation. AREs are almost an exact superset of EREs,
3476 but BREs have several notational incompatibilities (as well as being
3478 We first describe the ARE and ERE forms, noting features that apply
3479 only to AREs, and then describe how BREs differ.
3484 The form of regular expressions accepted by
3485 <productname>PostgreSQL</> can be chosen by setting the <xref
3486 linkend="guc-regex-flavor"> run-time parameter. The usual
3487 setting is <literal>advanced</>, but one might choose
3488 <literal>extended</> for maximum backwards compatibility with
3489 pre-7.4 releases of <productname>PostgreSQL</>.
3494 A regular expression is defined as one or more
3495 <firstterm>branches</firstterm>, separated by
3496 <literal>|</literal>. It matches anything that matches one of the
3501 A branch is zero or more <firstterm>quantified atoms</> or
3502 <firstterm>constraints</>, concatenated.
3503 It matches a match for the first, followed by a match for the second, etc;
3504 an empty branch matches the empty string.
3508 A quantified atom is an <firstterm>atom</> possibly followed
3509 by a single <firstterm>quantifier</>.
3510 Without a quantifier, it matches a match for the atom.
3511 With a quantifier, it can match some number of matches of the atom.
3512 An <firstterm>atom</firstterm> can be any of the possibilities
3513 shown in <xref linkend="posix-atoms-table">.
3514 The possible quantifiers and their meanings are shown in
3515 <xref linkend="posix-quantifiers-table">.
3519 A <firstterm>constraint</> matches an empty string, but matches only when
3520 specific conditions are met. A constraint can be used where an atom
3521 could be used, except it cannot be followed by a quantifier.
3522 The simple constraints are shown in
3523 <xref linkend="posix-constraints-table">;
3524 some more constraints are described later.
3528 <table id="posix-atoms-table">
3529 <title>Regular Expression Atoms</title>
3535 <entry>Description</entry>
3541 <entry> <literal>(</><replaceable>re</><literal>)</> </entry>
3542 <entry> (where <replaceable>re</> is any regular expression)
3544 <replaceable>re</>, with the match noted for possible reporting </entry>
3548 <entry> <literal>(?:</><replaceable>re</><literal>)</> </entry>
3549 <entry> as above, but the match is not noted for reporting
3550 (a <quote>non-capturing</> set of parentheses)
3551 (AREs only) </entry>
3555 <entry> <literal>.</> </entry>
3556 <entry> matches any single character </entry>
3560 <entry> <literal>[</><replaceable>chars</><literal>]</> </entry>
3561 <entry> a <firstterm>bracket expression</>,
3562 matching any one of the <replaceable>chars</> (see
3563 <xref linkend="posix-bracket-expressions"> for more detail) </entry>
3567 <entry> <literal>\</><replaceable>k</> </entry>
3568 <entry> (where <replaceable>k</> is a non-alphanumeric character)
3569 matches that character taken as an ordinary character,
3570 e.g. <literal>\\</> matches a backslash character </entry>
3574 <entry> <literal>\</><replaceable>c</> </entry>
3575 <entry> where <replaceable>c</> is alphanumeric
3576 (possibly followed by other characters)
3577 is an <firstterm>escape</>, see <xref linkend="posix-escape-sequences">
3578 (AREs only; in EREs and BREs, this matches <replaceable>c</>) </entry>
3582 <entry> <literal>{</> </entry>
3583 <entry> when followed by a character other than a digit,
3584 matches the left-brace character <literal>{</>;
3585 when followed by a digit, it is the beginning of a
3586 <replaceable>bound</> (see below) </entry>
3590 <entry> <replaceable>x</> </entry>
3591 <entry> where <replaceable>x</> is a single character with no other
3592 significance, matches that character </entry>
3599 An RE cannot end with <literal>\</>.
3604 Remember that the backslash (<literal>\</literal>) already has a special
3605 meaning in <productname>PostgreSQL</> string literals.
3606 To write a pattern constant that contains a backslash,
3607 you must write two backslashes in the statement, assuming escape
3608 string syntax is used (see <xref linkend="sql-syntax-strings">).
3612 <table id="posix-quantifiers-table">
3613 <title>Regular Expression Quantifiers</title>
3618 <entry>Quantifier</entry>
3619 <entry>Matches</entry>
3625 <entry> <literal>*</> </entry>
3626 <entry> a sequence of 0 or more matches of the atom </entry>
3630 <entry> <literal>+</> </entry>
3631 <entry> a sequence of 1 or more matches of the atom </entry>
3635 <entry> <literal>?</> </entry>
3636 <entry> a sequence of 0 or 1 matches of the atom </entry>
3640 <entry> <literal>{</><replaceable>m</><literal>}</> </entry>
3641 <entry> a sequence of exactly <replaceable>m</> matches of the atom </entry>
3645 <entry> <literal>{</><replaceable>m</><literal>,}</> </entry>
3646 <entry> a sequence of <replaceable>m</> or more matches of the atom </entry>
3651 <literal>{</><replaceable>m</><literal>,</><replaceable>n</><literal>}</> </entry>
3652 <entry> a sequence of <replaceable>m</> through <replaceable>n</>
3653 (inclusive) matches of the atom; <replaceable>m</> cannot exceed
3654 <replaceable>n</> </entry>
3658 <entry> <literal>*?</> </entry>
3659 <entry> non-greedy version of <literal>*</> </entry>
3663 <entry> <literal>+?</> </entry>
3664 <entry> non-greedy version of <literal>+</> </entry>
3668 <entry> <literal>??</> </entry>
3669 <entry> non-greedy version of <literal>?</> </entry>
3673 <entry> <literal>{</><replaceable>m</><literal>}?</> </entry>
3674 <entry> non-greedy version of <literal>{</><replaceable>m</><literal>}</> </entry>
3678 <entry> <literal>{</><replaceable>m</><literal>,}?</> </entry>
3679 <entry> non-greedy version of <literal>{</><replaceable>m</><literal>,}</> </entry>
3684 <literal>{</><replaceable>m</><literal>,</><replaceable>n</><literal>}?</> </entry>
3685 <entry> non-greedy version of <literal>{</><replaceable>m</><literal>,</><replaceable>n</><literal>}</> </entry>
3692 The forms using <literal>{</><replaceable>...</><literal>}</>
3693 are known as <firstterm>bounds</>.
3694 The numbers <replaceable>m</> and <replaceable>n</> within a bound are
3695 unsigned decimal integers with permissible values from 0 to 255 inclusive.
3699 <firstterm>Non-greedy</> quantifiers (available in AREs only) match the
3700 same possibilities as their corresponding normal (<firstterm>greedy</>)
3701 counterparts, but prefer the smallest number rather than the largest
3703 See <xref linkend="posix-matching-rules"> for more detail.
3708 A quantifier cannot immediately follow another quantifier.
3710 begin an expression or subexpression or follow
3711 <literal>^</literal> or <literal>|</literal>.
3715 <table id="posix-constraints-table">
3716 <title>Regular Expression Constraints</title>
3721 <entry>Constraint</entry>
3722 <entry>Description</entry>
3728 <entry> <literal>^</> </entry>
3729 <entry> matches at the beginning of the string </entry>
3733 <entry> <literal>$</> </entry>
3734 <entry> matches at the end of the string </entry>
3738 <entry> <literal>(?=</><replaceable>re</><literal>)</> </entry>
3739 <entry> <firstterm>positive lookahead</> matches at any point
3740 where a substring matching <replaceable>re</> begins
3741 (AREs only) </entry>
3745 <entry> <literal>(?!</><replaceable>re</><literal>)</> </entry>
3746 <entry> <firstterm>negative lookahead</> matches at any point
3747 where no substring matching <replaceable>re</> begins
3748 (AREs only) </entry>
3755 Lookahead constraints cannot contain <firstterm>back references</>
3756 (see <xref linkend="posix-escape-sequences">),
3757 and all parentheses within them are considered non-capturing.
3761 <sect3 id="posix-bracket-expressions">
3762 <title>Bracket Expressions</title>
3765 A <firstterm>bracket expression</firstterm> is a list of
3766 characters enclosed in <literal>[]</literal>. It normally matches
3767 any single character from the list (but see below). If the list
3768 begins with <literal>^</literal>, it matches any single character
3769 <emphasis>not</> from the rest of the list.
3771 in the list are separated by <literal>-</literal>, this is
3772 shorthand for the full range of characters between those two
3773 (inclusive) in the collating sequence,
3774 e.g. <literal>[0-9]</literal> in <acronym>ASCII</acronym> matches
3775 any decimal digit. It is illegal for two ranges to share an
3776 endpoint, e.g. <literal>a-c-e</literal>. Ranges are very
3777 collating-sequence-dependent, so portable programs should avoid
3782 To include a literal <literal>]</literal> in the list, make it the
3783 first character (following a possible <literal>^</literal>). To
3784 include a literal <literal>-</literal>, make it the first or last
3785 character, or the second endpoint of a range. To use a literal
3786 <literal>-</literal> as the first endpoint of a range, enclose it
3787 in <literal>[.</literal> and <literal>.]</literal> to make it a
3788 collating element (see below). With the exception of these characters,
3789 some combinations using <literal>[</literal>
3790 (see next paragraphs), and escapes (AREs only), all other special
3791 characters lose their special significance within a bracket expression.
3792 In particular, <literal>\</literal> is not special when following
3793 ERE or BRE rules, though it is special (as introducing an escape)
3798 Within a bracket expression, a collating element (a character, a
3799 multiple-character sequence that collates as if it were a single
3800 character, or a collating-sequence name for either) enclosed in
3801 <literal>[.</literal> and <literal>.]</literal> stands for the
3802 sequence of characters of that collating element. The sequence is
3803 a single element of the bracket expression's list. A bracket
3804 expression containing a multiple-character collating element can thus
3805 match more than one character, e.g. if the collating sequence
3806 includes a <literal>ch</literal> collating element, then the RE
3807 <literal>[[.ch.]]*c</literal> matches the first five characters of
3808 <literal>chchcc</literal>.
3813 <productname>PostgreSQL</> currently has no multicharacter collating
3814 elements. This information describes possible future behavior.
3819 Within a bracket expression, a collating element enclosed in
3820 <literal>[=</literal> and <literal>=]</literal> is an equivalence
3821 class, standing for the sequences of characters of all collating
3822 elements equivalent to that one, including itself. (If there are
3823 no other equivalent collating elements, the treatment is as if the
3824 enclosing delimiters were <literal>[.</literal> and
3825 <literal>.]</literal>.) For example, if <literal>o</literal> and
3826 <literal>^</literal> are the members of an equivalence class, then
3827 <literal>[[=o=]]</literal>, <literal>[[=^=]]</literal>, and
3828 <literal>[o^]</literal> are all synonymous. An equivalence class
3829 cannot be an endpoint of a range.
3833 Within a bracket expression, the name of a character class
3834 enclosed in <literal>[:</literal> and <literal>:]</literal> stands
3835 for the list of all characters belonging to that class. Standard
3836 character class names are: <literal>alnum</literal>,
3837 <literal>alpha</literal>, <literal>blank</literal>,
3838 <literal>cntrl</literal>, <literal>digit</literal>,
3839 <literal>graph</literal>, <literal>lower</literal>,
3840 <literal>print</literal>, <literal>punct</literal>,
3841 <literal>space</literal>, <literal>upper</literal>,
3842 <literal>xdigit</literal>. These stand for the character classes
3844 <citerefentry><refentrytitle>ctype</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
3845 A locale can provide others. A character class cannot be used as
3846 an endpoint of a range.
3850 There are two special cases of bracket expressions: the bracket
3851 expressions <literal>[[:<:]]</literal> and
3852 <literal>[[:>:]]</literal> are constraints,
3853 matching empty strings at the beginning
3854 and end of a word respectively. A word is defined as a sequence
3855 of word characters that is neither preceded nor followed by word
3856 characters. A word character is an <literal>alnum</> character (as
3858 <citerefentry><refentrytitle>ctype</refentrytitle><manvolnum>3</manvolnum></citerefentry>)
3859 or an underscore. This is an extension, compatible with but not
3860 specified by <acronym>POSIX</acronym> 1003.2, and should be used with
3861 caution in software intended to be portable to other systems.
3862 The constraint escapes described below are usually preferable (they
3863 are no more standard, but are certainly easier to type).
3867 <sect3 id="posix-escape-sequences">
3868 <title>Regular Expression Escapes</title>
3871 <firstterm>Escapes</> are special sequences beginning with <literal>\</>
3872 followed by an alphanumeric character. Escapes come in several varieties:
3873 character entry, class shorthands, constraint escapes, and back references.
3874 A <literal>\</> followed by an alphanumeric character but not constituting
3875 a valid escape is illegal in AREs.
3876 In EREs, there are no escapes: outside a bracket expression,
3877 a <literal>\</> followed by an alphanumeric character merely stands for
3878 that character as an ordinary character, and inside a bracket expression,
3879 <literal>\</> is an ordinary character.
3880 (The latter is the one actual incompatibility between EREs and AREs.)
3884 <firstterm>Character-entry escapes</> exist to make it easier to specify
3885 non-printing and otherwise inconvenient characters in REs. They are
3886 shown in <xref linkend="posix-character-entry-escapes-table">.
3890 <firstterm>Class-shorthand escapes</> provide shorthands for certain
3891 commonly-used character classes. They are
3892 shown in <xref linkend="posix-class-shorthand-escapes-table">.
3896 A <firstterm>constraint escape</> is a constraint,
3897 matching the empty string if specific conditions are met,
3898 written as an escape. They are
3899 shown in <xref linkend="posix-constraint-escapes-table">.
3903 A <firstterm>back reference</> (<literal>\</><replaceable>n</>) matches the
3904 same string matched by the previous parenthesized subexpression specified
3905 by the number <replaceable>n</>
3906 (see <xref linkend="posix-constraint-backref-table">). For example,
3907 <literal>([bc])\1</> matches <literal>bb</> or <literal>cc</>
3908 but not <literal>bc</> or <literal>cb</>.
3909 The subexpression must entirely precede the back reference in the RE.
3910 Subexpressions are numbered in the order of their leading parentheses.
3911 Non-capturing parentheses do not define subexpressions.
3916 Keep in mind that an escape's leading <literal>\</> will need to be
3917 doubled when entering the pattern as an SQL string constant. For example:
3919 '123' ~ E'^\\d{3}' <lineannotation>true</lineannotation>
3924 <table id="posix-character-entry-escapes-table">
3925 <title>Regular Expression Character-Entry Escapes</title>
3930 <entry>Escape</entry>
3931 <entry>Description</entry>
3937 <entry> <literal>\a</> </entry>
3938 <entry> alert (bell) character, as in C </entry>
3942 <entry> <literal>\b</> </entry>
3943 <entry> backspace, as in C </entry>
3947 <entry> <literal>\B</> </entry>
3948 <entry> synonym for <literal>\</> to help reduce the need for backslash
3953 <entry> <literal>\c</><replaceable>X</> </entry>
3954 <entry> (where <replaceable>X</> is any character) the character whose
3955 low-order 5 bits are the same as those of
3956 <replaceable>X</>, and whose other bits are all zero </entry>
3960 <entry> <literal>\e</> </entry>
3961 <entry> the character whose collating-sequence name
3963 or failing that, the character with octal value 033 </entry>
3967 <entry> <literal>\f</> </entry>
3968 <entry> form feed, as in C </entry>
3972 <entry> <literal>\n</> </entry>
3973 <entry> newline, as in C </entry>
3977 <entry> <literal>\r</> </entry>
3978 <entry> carriage return, as in C </entry>
3982 <entry> <literal>\t</> </entry>
3983 <entry> horizontal tab, as in C </entry>
3987 <entry> <literal>\u</><replaceable>wxyz</> </entry>
3988 <entry> (where <replaceable>wxyz</> is exactly four hexadecimal digits)
3989 the UTF16 (Unicode, 16-bit) character <literal>U+</><replaceable>wxyz</>
3990 in the local byte ordering </entry>
3994 <entry> <literal>\U</><replaceable>stuvwxyz</> </entry>
3995 <entry> (where <replaceable>stuvwxyz</> is exactly eight hexadecimal
3997 reserved for a somewhat-hypothetical Unicode extension to 32 bits
4002 <entry> <literal>\v</> </entry>
4003 <entry> vertical tab, as in C </entry>
4007 <entry> <literal>\x</><replaceable>hhh</> </entry>
4008 <entry> (where <replaceable>hhh</> is any sequence of hexadecimal
4010 the character whose hexadecimal value is
4011 <literal>0x</><replaceable>hhh</>
4012 (a single character no matter how many hexadecimal digits are used)
4017 <entry> <literal>\0</> </entry>
4018 <entry> the character whose value is <literal>0</> </entry>
4022 <entry> <literal>\</><replaceable>xy</> </entry>
4023 <entry> (where <replaceable>xy</> is exactly two octal digits,
4024 and is not a <firstterm>back reference</>)
4025 the character whose octal value is
4026 <literal>0</><replaceable>xy</> </entry>
4030 <entry> <literal>\</><replaceable>xyz</> </entry>
4031 <entry> (where <replaceable>xyz</> is exactly three octal digits,
4032 and is not a <firstterm>back reference</>)
4033 the character whose octal value is
4034 <literal>0</><replaceable>xyz</> </entry>
4041 Hexadecimal digits are <literal>0</>-<literal>9</>,
4042 <literal>a</>-<literal>f</>, and <literal>A</>-<literal>F</>.
4043 Octal digits are <literal>0</>-<literal>7</>.
4047 The character-entry escapes are always taken as ordinary characters.
4048 For example, <literal>\135</> is <literal>]</> in ASCII, but
4049 <literal>\135</> does not terminate a bracket expression.
4052 <table id="posix-class-shorthand-escapes-table">
4053 <title>Regular Expression Class-Shorthand Escapes</title>
4058 <entry>Escape</entry>
4059 <entry>Description</entry>
4065 <entry> <literal>\d</> </entry>
4066 <entry> <literal>[[:digit:]]</> </entry>
4070 <entry> <literal>\s</> </entry>
4071 <entry> <literal>[[:space:]]</> </entry>
4075 <entry> <literal>\w</> </entry>
4076 <entry> <literal>[[:alnum:]_]</>
4077 (note underscore is included) </entry>
4081 <entry> <literal>\D</> </entry>
4082 <entry> <literal>[^[:digit:]]</> </entry>
4086 <entry> <literal>\S</> </entry>
4087 <entry> <literal>[^[:space:]]</> </entry>
4091 <entry> <literal>\W</> </entry>
4092 <entry> <literal>[^[:alnum:]_]</>
4093 (note underscore is included) </entry>
4100 Within bracket expressions, <literal>\d</>, <literal>\s</>,
4101 and <literal>\w</> lose their outer brackets,
4102 and <literal>\D</>, <literal>\S</>, and <literal>\W</> are illegal.
4103 (So, for example, <literal>[a-c\d]</> is equivalent to
4104 <literal>[a-c[:digit:]]</>.
4105 Also, <literal>[a-c\D]</>, which is equivalent to
4106 <literal>[a-c^[:digit:]]</>, is illegal.)
4109 <table id="posix-constraint-escapes-table">
4110 <title>Regular Expression Constraint Escapes</title>
4115 <entry>Escape</entry>
4116 <entry>Description</entry>
4122 <entry> <literal>\A</> </entry>
4123 <entry> matches only at the beginning of the string
4124 (see <xref linkend="posix-matching-rules"> for how this differs from
4125 <literal>^</>) </entry>
4129 <entry> <literal>\m</> </entry>
4130 <entry> matches only at the beginning of a word </entry>
4134 <entry> <literal>\M</> </entry>
4135 <entry> matches only at the end of a word </entry>
4139 <entry> <literal>\y</> </entry>
4140 <entry> matches only at the beginning or end of a word </entry>
4144 <entry> <literal>\Y</> </entry>
4145 <entry> matches only at a point that is not the beginning or end of a
4150 <entry> <literal>\Z</> </entry>
4151 <entry> matches only at the end of the string
4152 (see <xref linkend="posix-matching-rules"> for how this differs from
4153 <literal>$</>) </entry>
4160 A word is defined as in the specification of
4161 <literal>[[:<:]]</> and <literal>[[:>:]]</> above.
4162 Constraint escapes are illegal within bracket expressions.
4165 <table id="posix-constraint-backref-table">
4166 <title>Regular Expression Back References</title>
4171 <entry>Escape</entry>
4172 <entry>Description</entry>
4178 <entry> <literal>\</><replaceable>m</> </entry>
4179 <entry> (where <replaceable>m</> is a nonzero digit)
4180 a back reference to the <replaceable>m</>'th subexpression </entry>
4184 <entry> <literal>\</><replaceable>mnn</> </entry>
4185 <entry> (where <replaceable>m</> is a nonzero digit, and
4186 <replaceable>nn</> is some more digits, and the decimal value
4187 <replaceable>mnn</> is not greater than the number of closing capturing
4188 parentheses seen so far)
4189 a back reference to the <replaceable>mnn</>'th subexpression </entry>
4197 There is an inherent historical ambiguity between octal character-entry
4198 escapes and back references, which is resolved by heuristics,
4200 A leading zero always indicates an octal escape.
4201 A single non-zero digit, not followed by another digit,
4202 is always taken as a back reference.
4203 A multidigit sequence not starting with a zero is taken as a back
4204 reference if it comes after a suitable subexpression
4205 (i.e. the number is in the legal range for a back reference),
4206 and otherwise is taken as octal.
4211 <sect3 id="posix-metasyntax">
4212 <title>Regular Expression Metasyntax</title>
4215 In addition to the main syntax described above, there are some special
4216 forms and miscellaneous syntactic facilities available.
4220 Normally the flavor of RE being used is determined by
4221 <varname>regex_flavor</>.
4222 However, this can be overridden by a <firstterm>director</> prefix.
4223 If an RE begins with <literal>***:</>,
4224 the rest of the RE is taken as an ARE regardless of
4225 <varname>regex_flavor</>.
4226 If an RE begins with <literal>***=</>,
4227 the rest of the RE is taken to be a literal string,
4228 with all characters considered ordinary characters.
4232 An ARE can begin with <firstterm>embedded options</>:
4233 a sequence <literal>(?</><replaceable>xyz</><literal>)</>
4234 (where <replaceable>xyz</> is one or more alphabetic characters)
4235 specifies options affecting the rest of the RE.
4236 These options override any previously determined options (including
4237 both the RE flavor and case sensitivity).
4238 The available option letters are
4239 shown in <xref linkend="posix-embedded-options-table">.
4242 <table id="posix-embedded-options-table">
4243 <title>ARE Embedded-Option Letters</title>
4248 <entry>Option</entry>
4249 <entry>Description</entry>
4255 <entry> <literal>b</> </entry>
4256 <entry> rest of RE is a BRE </entry>
4260 <entry> <literal>c</> </entry>
4261 <entry> case-sensitive matching (overrides operator type) </entry>
4265 <entry> <literal>e</> </entry>
4266 <entry> rest of RE is an ERE </entry>
4270 <entry> <literal>i</> </entry>
4271 <entry> case-insensitive matching (see
4272 <xref linkend="posix-matching-rules">) (overrides operator type) </entry>
4276 <entry> <literal>m</> </entry>
4277 <entry> historical synonym for <literal>n</> </entry>
4281 <entry> <literal>n</> </entry>
4282 <entry> newline-sensitive matching (see
4283 <xref linkend="posix-matching-rules">) </entry>
4287 <entry> <literal>p</> </entry>
4288 <entry> partial newline-sensitive matching (see
4289 <xref linkend="posix-matching-rules">) </entry>
4293 <entry> <literal>q</> </entry>
4294 <entry> rest of RE is a literal (<quote>quoted</>) string, all ordinary
4299 <entry> <literal>s</> </entry>
4300 <entry> non-newline-sensitive matching (default) </entry>
4304 <entry> <literal>t</> </entry>
4305 <entry> tight syntax (default; see below) </entry>
4309 <entry> <literal>w</> </entry>
4310 <entry> inverse partial newline-sensitive (<quote>weird</>) matching
4311 (see <xref linkend="posix-matching-rules">) </entry>
4315 <entry> <literal>x</> </entry>
4316 <entry> expanded syntax (see below) </entry>
4323 Embedded options take effect at the <literal>)</> terminating the sequence.
4324 They can appear only at the start of an ARE (after the
4325 <literal>***:</> director if any).
4329 In addition to the usual (<firstterm>tight</>) RE syntax, in which all
4330 characters are significant, there is an <firstterm>expanded</> syntax,
4331 available by specifying the embedded <literal>x</> option.
4332 In the expanded syntax,
4333 white-space characters in the RE are ignored, as are
4334 all characters between a <literal>#</>
4335 and the following newline (or the end of the RE). This
4336 permits paragraphing and commenting a complex RE.
4337 There are three exceptions to that basic rule:
4342 a white-space character or <literal>#</> preceded by <literal>\</> is
4348 white space or <literal>#</> within a bracket expression is retained
4353 white space and comments cannot appear within multicharacter symbols,
4354 such as <literal>(?:</>
4359 For this purpose, white-space characters are blank, tab, newline, and
4360 any character that belongs to the <replaceable>space</> character class.
4364 Finally, in an ARE, outside bracket expressions, the sequence
4365 <literal>(?#</><replaceable>ttt</><literal>)</>
4366 (where <replaceable>ttt</> is any text not containing a <literal>)</>)
4367 is a comment, completely ignored.
4368 Again, this is not allowed between the characters of
4369 multicharacter symbols, like <literal>(?:</>.
4370 Such comments are more a historical artifact than a useful facility,
4371 and their use is deprecated; use the expanded syntax instead.
4375 <emphasis>None</> of these metasyntax extensions is available if
4376 an initial <literal>***=</> director
4377 has specified that the user's input be treated as a literal string
4378 rather than as an RE.
4382 <sect3 id="posix-matching-rules">
4383 <title>Regular Expression Matching Rules</title>
4386 In the event that an RE could match more than one substring of a given
4387 string, the RE matches the one starting earliest in the string.
4388 If the RE could match more than one substring starting at that point,
4389 either the longest possible match or the shortest possible match will
4390 be taken, depending on whether the RE is <firstterm>greedy</> or
4391 <firstterm>non-greedy</>.
4395 Whether an RE is greedy or not is determined by the following rules:
4399 Most atoms, and all constraints, have no greediness attribute (because
4400 they cannot match variable amounts of text anyway).
4405 Adding parentheses around an RE does not change its greediness.
4410 A quantified atom with a fixed-repetition quantifier
4411 (<literal>{</><replaceable>m</><literal>}</>
4413 <literal>{</><replaceable>m</><literal>}?</>)
4414 has the same greediness (possibly none) as the atom itself.
4419 A quantified atom with other normal quantifiers (including
4420 <literal>{</><replaceable>m</><literal>,</><replaceable>n</><literal>}</>
4421 with <replaceable>m</> equal to <replaceable>n</>)
4422 is greedy (prefers longest match).
4427 A quantified atom with a non-greedy quantifier (including
4428 <literal>{</><replaceable>m</><literal>,</><replaceable>n</><literal>}?</>
4429 with <replaceable>m</> equal to <replaceable>n</>)
4430 is non-greedy (prefers shortest match).
4435 A branch — that is, an RE that has no top-level
4436 <literal>|</> operator — has the same greediness as the first
4437 quantified atom in it that has a greediness attribute.
4442 An RE consisting of two or more branches connected by the
4443 <literal>|</> operator is always greedy.
4450 The above rules associate greediness attributes not only with individual
4451 quantified atoms, but with branches and entire REs that contain quantified
4452 atoms. What that means is that the matching is done in such a way that
4453 the branch, or whole RE, matches the longest or shortest possible
4454 substring <emphasis>as a whole</>. Once the length of the entire match
4455 is determined, the part of it that matches any particular subexpression
4456 is determined on the basis of the greediness attribute of that
4457 subexpression, with subexpressions starting earlier in the RE taking
4458 priority over ones starting later.
4462 An example of what this means:
4464 SELECT SUBSTRING('XY1234Z', 'Y*([0-9]{1,3})');
4465 <lineannotation>Result: </lineannotation><computeroutput>123</computeroutput>
4466 SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})');
4467 <lineannotation>Result: </lineannotation><computeroutput>1</computeroutput>
4469 In the first case, the RE as a whole is greedy because <literal>Y*</>
4470 is greedy. It can match beginning at the <literal>Y</>, and it matches
4471 the longest possible string starting there, i.e., <literal>Y123</>.
4472 The output is the parenthesized part of that, or <literal>123</>.
4473 In the second case, the RE as a whole is non-greedy because <literal>Y*?</>
4474 is non-greedy. It can match beginning at the <literal>Y</>, and it matches
4475 the shortest possible string starting there, i.e., <literal>Y1</>.
4476 The subexpression <literal>[0-9]{1,3}</> is greedy but it cannot change
4477 the decision as to the overall match length; so it is forced to match
4482 In short, when an RE contains both greedy and non-greedy subexpressions,
4483 the total match length is either as long as possible or as short as
4484 possible, according to the attribute assigned to the whole RE. The
4485 attributes assigned to the subexpressions only affect how much of that
4486 match they are allowed to <quote>eat</> relative to each other.
4490 The quantifiers <literal>{1,1}</> and <literal>{1,1}?</>
4491 can be used to force greediness or non-greediness, respectively,
4492 on a subexpression or a whole RE.
4496 Match lengths are measured in characters, not collating elements.
4497 An empty string is considered longer than no match at all.
4500 matches the three middle characters of <literal>abbbc</>;
4501 <literal>(week|wee)(night|knights)</>
4502 matches all ten characters of <literal>weeknights</>;
4503 when <literal>(.*).*</>
4504 is matched against <literal>abc</> the parenthesized subexpression
4505 matches all three characters; and when
4506 <literal>(a*)*</> is matched against <literal>bc</>
4507 both the whole RE and the parenthesized
4508 subexpression match an empty string.
4512 If case-independent matching is specified,
4513 the effect is much as if all case distinctions had vanished from the
4515 When an alphabetic that exists in multiple cases appears as an
4516 ordinary character outside a bracket expression, it is effectively
4517 transformed into a bracket expression containing both cases,
4518 e.g. <literal>x</> becomes <literal>[xX]</>.
4519 When it appears inside a bracket expression, all case counterparts
4520 of it are added to the bracket expression, e.g.
4521 <literal>[x]</> becomes <literal>[xX]</>
4522 and <literal>[^x]</> becomes <literal>[^xX]</>.
4526 If newline-sensitive matching is specified, <literal>.</>
4527 and bracket expressions using <literal>^</>
4528 will never match the newline character
4529 (so that matches will never cross newlines unless the RE
4530 explicitly arranges it)
4531 and <literal>^</>and <literal>$</>
4532 will match the empty string after and before a newline
4533 respectively, in addition to matching at beginning and end of string
4535 But the ARE escapes <literal>\A</> and <literal>\Z</>
4536 continue to match beginning or end of string <emphasis>only</>.
4540 If partial newline-sensitive matching is specified,
4541 this affects <literal>.</> and bracket expressions
4542 as with newline-sensitive matching, but not <literal>^</>
4547 If inverse partial newline-sensitive matching is specified,
4548 this affects <literal>^</> and <literal>$</>
4549 as with newline-sensitive matching, but not <literal>.</>
4550 and bracket expressions.
4551 This isn't very useful but is provided for symmetry.
4555 <sect3 id="posix-limits-compatibility">
4556 <title>Limits and Compatibility</title>
4559 No particular limit is imposed on the length of REs in this
4560 implementation. However,
4561 programs intended to be highly portable should not employ REs longer
4563 as a POSIX-compliant implementation can refuse to accept such REs.
4567 The only feature of AREs that is actually incompatible with
4568 POSIX EREs is that <literal>\</> does not lose its special
4569 significance inside bracket expressions.
4570 All other ARE features use syntax which is illegal or has
4571 undefined or unspecified effects in POSIX EREs;
4572 the <literal>***</> syntax of directors likewise is outside the POSIX
4573 syntax for both BREs and EREs.
4577 Many of the ARE extensions are borrowed from Perl, but some have
4578 been changed to clean them up, and a few Perl extensions are not present.
4579 Incompatibilities of note include <literal>\b</>, <literal>\B</>,
4580 the lack of special treatment for a trailing newline,
4581 the addition of complemented bracket expressions to the things
4582 affected by newline-sensitive matching,
4583 the restrictions on parentheses and back references in lookahead
4584 constraints, and the longest/shortest-match (rather than first-match)
4589 Two significant incompatibilities exist between AREs and the ERE syntax
4590 recognized by pre-7.4 releases of <productname>PostgreSQL</>:
4595 In AREs, <literal>\</> followed by an alphanumeric character is either
4596 an escape or an error, while in previous releases, it was just another
4597 way of writing the alphanumeric.
4598 This should not be much of a problem because there was no reason to
4599 write such a sequence in earlier releases.
4604 In AREs, <literal>\</> remains a special character within
4605 <literal>[]</>, so a literal <literal>\</> within a bracket
4606 expression must be written <literal>\\</>.
4611 While these differences are unlikely to create a problem for most
4612 applications, you can avoid them if necessary by
4613 setting <varname>regex_flavor</> to <literal>extended</>.
4617 <sect3 id="posix-basic-regexes">
4618 <title>Basic Regular Expressions</title>
4621 BREs differ from EREs in several respects.
4622 <literal>|</>, <literal>+</>, and <literal>?</>
4623 are ordinary characters and there is no equivalent
4624 for their functionality.
4625 The delimiters for bounds are
4626 <literal>\{</> and <literal>\}</>,
4627 with <literal>{</> and <literal>}</>
4628 by themselves ordinary characters.
4629 The parentheses for nested subexpressions are
4630 <literal>\(</> and <literal>\)</>,
4631 with <literal>(</> and <literal>)</> by themselves ordinary characters.
4632 <literal>^</> is an ordinary character except at the beginning of the
4633 RE or the beginning of a parenthesized subexpression,
4634 <literal>$</> is an ordinary character except at the end of the
4635 RE or the end of a parenthesized subexpression,
4636 and <literal>*</> is an ordinary character if it appears at the beginning
4637 of the RE or the beginning of a parenthesized subexpression
4638 (after a possible leading <literal>^</>).
4639 Finally, single-digit back references are available, and
4640 <literal>\<</> and <literal>\></>
4642 <literal>[[:<:]]</> and <literal>[[:>:]]</>
4643 respectively; no other escapes are available.
4647 <!-- end re_syntax.n man page -->
4653 <sect1 id="functions-formatting">
4654 <title>Data Type Formatting Functions</title>
4657 <primary>formatting</primary>
4661 <primary>to_char</primary>
4664 <primary>to_date</primary>
4667 <primary>to_number</primary>
4670 <primary>to_timestamp</primary>
4674 The <productname>PostgreSQL</productname> formatting functions
4675 provide a powerful set of tools for converting various data types
4676 (date/time, integer, floating point, numeric) to formatted strings
4677 and for converting from formatted strings to specific data types.
4678 <xref linkend="functions-formatting-table"> lists them.
4679 These functions all follow a common calling convention: the first
4680 argument is the value to be formatted and the second argument is a
4681 template that defines the output or input format.
4684 The <function>to_timestamp</function> function can also take a single
4685 <type>double precision</type> argument to convert from Unix epoch to
4686 <type>timestamp with time zone</type>.
4687 (<type>Integer</type> Unix epochs are implicitly cast to
4688 <type>double precision</type>.)
4691 <table id="functions-formatting-table">
4692 <title>Formatting Functions</title>
4696 <entry>Function</entry>
4697 <entry>Return Type</entry>
4698 <entry>Description</entry>
4699 <entry>Example</entry>
4704 <entry><literal><function>to_char</function>(<type>timestamp</type>, <type>text</type>)</literal></entry>
4705 <entry><type>text</type></entry>
4706 <entry>convert time stamp to string</entry>
4707 <entry><literal>to_char(current_timestamp, 'HH12:MI:SS')</literal></entry>
4710 <entry><literal><function>to_char</function>(<type>interval</type>, <type>text</type>)</literal></entry>
4711 <entry><type>text</type></entry>
4712 <entry>convert interval to string</entry>
4713 <entry><literal>to_char(interval '15h 2m 12s', 'HH24:MI:SS')</literal></entry>
4716 <entry><literal><function>to_char</function>(<type>int</type>, <type>text</type>)</literal></entry>
4717 <entry><type>text</type></entry>
4718 <entry>convert integer to string</entry>
4719 <entry><literal>to_char(125, '999')</literal></entry>
4722 <entry><literal><function>to_char</function>(<type>double precision</type>,
4723 <type>text</type>)</literal></entry>
4724 <entry><type>text</type></entry>
4725 <entry>convert real/double precision to string</entry>
4726 <entry><literal>to_char(125.8::real, '999D9')</literal></entry>
4729 <entry><literal><function>to_char</function>(<type>numeric</type>, <type>text</type>)</literal></entry>
4730 <entry><type>text</type></entry>
4731 <entry>convert numeric to string</entry>
4732 <entry><literal>to_char(-125.8, '999D99S')</literal></entry>
4735 <entry><literal><function>to_date</function>(<type>text</type>, <type>text</type>)</literal></entry>
4736 <entry><type>date</type></entry>
4737 <entry>convert string to date</entry>
4738 <entry><literal>to_date('05 Dec 2000', 'DD Mon YYYY')</literal></entry>
4741 <entry><literal><function>to_number</function>(<type>text</type>, <type>text</type>)</literal></entry>
4742 <entry><type>numeric</type></entry>
4743 <entry>convert string to numeric</entry>
4744 <entry><literal>to_number('12,454.8-', '99G999D9S')</literal></entry>
4747 <entry><literal><function>to_timestamp</function>(<type>text</type>, <type>text</type>)</literal></entry>
4748 <entry><type>timestamp with time zone</type></entry>
4749 <entry>convert string to time stamp</entry>
4750 <entry><literal>to_timestamp('05 Dec 2000', 'DD Mon YYYY')</literal></entry>
4753 <entry><literal><function>to_timestamp</function>(<type>double precision</type>)</literal></entry>
4754 <entry><type>timestamp with time zone</type></entry>
4755 <entry>convert UNIX epoch to time stamp</entry>
4756 <entry><literal>to_timestamp(200120400)</literal></entry>
4763 In an output template string (for <function>to_char</>), there are certain patterns that are
4764 recognized and replaced with appropriately-formatted data from the value
4765 to be formatted. Any text that is not a template pattern is simply
4766 copied verbatim. Similarly, in an input template string (for anything but <function>to_char</>), template patterns
4767 identify the parts of the input data string to be looked at and the
4768 values to be found there.
4772 <xref linkend="functions-formatting-datetime-table"> shows the
4773 template patterns available for formatting date and time values.
4776 <table id="functions-formatting-datetime-table">
4777 <title>Template Patterns for Date/Time Formatting</title>
4781 <entry>Pattern</entry>
4782 <entry>Description</entry>
4787 <entry><literal>HH</literal></entry>
4788 <entry>hour of day (01-12)</entry>
4791 <entry><literal>HH12</literal></entry>
4792 <entry>hour of day (01-12)</entry>
4795 <entry><literal>HH24</literal></entry>
4796 <entry>hour of day (00-23)</entry>
4799 <entry><literal>MI</literal></entry>
4800 <entry>minute (00-59)</entry>
4803 <entry><literal>SS</literal></entry>
4804 <entry>second (00-59)</entry>
4807 <entry><literal>MS</literal></entry>
4808 <entry>millisecond (000-999)</entry>
4811 <entry><literal>US</literal></entry>
4812 <entry>microsecond (000000-999999)</entry>
4815 <entry><literal>SSSS</literal></entry>
4816 <entry>seconds past midnight (0-86399)</entry>
4819 <entry><literal>AM</literal> or <literal>A.M.</literal> or
4820 <literal>PM</literal> or <literal>P.M.</literal></entry>
4821 <entry>meridian indicator (uppercase)</entry>
4824 <entry><literal>am</literal> or <literal>a.m.</literal> or
4825 <literal>pm</literal> or <literal>p.m.</literal></entry>
4826 <entry>meridian indicator (lowercase)</entry>
4829 <entry><literal>Y,YYY</literal></entry>
4830 <entry>year (4 and more digits) with comma</entry>
4833 <entry><literal>YYYY</literal></entry>
4834 <entry>year (4 and more digits)</entry>
4837 <entry><literal>YYY</literal></entry>
4838 <entry>last 3 digits of year</entry>
4841 <entry><literal>YY</literal></entry>
4842 <entry>last 2 digits of year</entry>
4845 <entry><literal>Y</literal></entry>
4846 <entry>last digit of year</entry>
4849 <entry><literal>IYYY</literal></entry>
4850 <entry>ISO year (4 and more digits)</entry>
4853 <entry><literal>IYY</literal></entry>
4854 <entry>last 3 digits of ISO year</entry>
4857 <entry><literal>IY</literal></entry>
4858 <entry>last 2 digits of ISO year</entry>
4861 <entry><literal>I</literal></entry>
4862 <entry>last digit of ISO year</entry>
4865 <entry><literal>BC</literal> or <literal>B.C.</literal> or
4866 <literal>AD</literal> or <literal>A.D.</literal></entry>
4867 <entry>era indicator (uppercase)</entry>
4870 <entry><literal>bc</literal> or <literal>b.c.</literal> or
4871 <literal>ad</literal> or <literal>a.d.</literal></entry>
4872 <entry>era indicator (lowercase)</entry>
4875 <entry><literal>MONTH</literal></entry>
4876 <entry>full uppercase month name (blank-padded to 9 chars)</entry>
4879 <entry><literal>Month</literal></entry>
4880 <entry>full mixed-case month name (blank-padded to 9 chars)</entry>
4883 <entry><literal>month</literal></entry>
4884 <entry>full lowercase month name (blank-padded to 9 chars)</entry>
4887 <entry><literal>MON</literal></entry>
4888 <entry>abbreviated uppercase month name (3 chars in English, localized lengths vary)</entry>
4891 <entry><literal>Mon</literal></entry>
4892 <entry>abbreviated mixed-case month name (3 chars in English, localized lengths vary)</entry>
4895 <entry><literal>mon</literal></entry>
4896 <entry>abbreviated lowercase month name (3 chars in English, localized lengths vary)</entry>
4899 <entry><literal>MM</literal></entry>
4900 <entry>month number (01-12)</entry>
4903 <entry><literal>DAY</literal></entry>
4904 <entry>full uppercase day name (blank-padded to 9 chars)</entry>
4907 <entry><literal>Day</literal></entry>
4908 <entry>full mixed-case day name (blank-padded to 9 chars)</entry>
4911 <entry><literal>day</literal></entry>
4912 <entry>full lowercase day name (blank-padded to 9 chars)</entry>
4915 <entry><literal>DY</literal></entry>
4916 <entry>abbreviated uppercase day name (3 chars in English, localized lengths vary)</entry>
4919 <entry><literal>Dy</literal></entry>
4920 <entry>abbreviated mixed-case day name (3 chars in English, localized lengths vary)</entry>
4923 <entry><literal>dy</literal></entry>
4924 <entry>abbreviated lowercase day name (3 chars in English, localized lengths vary)</entry>
4927 <entry><literal>DDD</literal></entry>
4928 <entry>day of year (001-366)</entry>
4931 <entry><literal>IDDD</literal></entry>
4932 <entry>ISO day of year (001-371; day 1 of the year is Monday of the first ISO week.)</entry>
4935 <entry><literal>DD</literal></entry>
4936 <entry>day of month (01-31)</entry>
4939 <entry><literal>D</literal></entry>
4940 <entry>day of the week, Sunday(<literal>1</>) to Saturday(<literal>7</>)</entry>
4943 <entry><literal>ID</literal></entry>
4944 <entry>ISO day of the week, Monday(<literal>1</>) to Sunday(<literal>7</>)</entry>
4947 <entry><literal>W</literal></entry>
4948 <entry>week of month (1-5) (The first week starts on the first day of the month.)</entry>
4951 <entry><literal>WW</literal></entry>
4952 <entry>week number of year (1-53) (The first week starts on the first day of the year.)</entry>
4955 <entry><literal>IW</literal></entry>
4956 <entry>ISO week number of year (1 - 53; the first Thursday of the new year is in week 1.)</entry>
4959 <entry><literal>CC</literal></entry>
4960 <entry>century (2 digits) (The twenty-first century starts on 2001-01-01.)</entry>
4963 <entry><literal>J</literal></entry>
4964 <entry>Julian Day (days since November 24, 4714 BC at midnight)</entry>
4967 <entry><literal>Q</literal></entry>
4968 <entry>quarter</entry>
4971 <entry><literal>RM</literal></entry>
4972 <entry>month in Roman numerals (I-XII; I=January) (uppercase)</entry>
4975 <entry><literal>rm</literal></entry>
4976 <entry>month in Roman numerals (i-xii; i=January) (lowercase)</entry>
4979 <entry><literal>TZ</literal></entry>
4980 <entry>time-zone name (uppercase)</entry>
4983 <entry><literal>tz</literal></entry>
4984 <entry>time-zone name (lowercase)</entry>
4991 Certain modifiers can be applied to any template pattern to alter its
4992 behavior. For example, <literal>FMMonth</literal>
4993 is the <literal>Month</literal> pattern with the
4994 <literal>FM</literal> modifier.
4995 <xref linkend="functions-formatting-datetimemod-table"> shows the
4996 modifier patterns for date/time formatting.
4999 <table id="functions-formatting-datetimemod-table">
5000 <title>Template Pattern Modifiers for Date/Time Formatting</title>
5004 <entry>Modifier</entry>
5005 <entry>Description</entry>
5006 <entry>Example</entry>
5011 <entry><literal>FM</literal> prefix</entry>
5012 <entry>fill mode (suppress padding blanks and zeroes)</entry>
5013 <entry><literal>FMMonth</literal></entry>
5016 <entry><literal>TH</literal> suffix</entry>
5017 <entry>uppercase ordinal number suffix</entry>
5018 <entry><literal>DDTH</literal></entry>
5021 <entry><literal>th</literal> suffix</entry>
5022 <entry>lowercase ordinal number suffix</entry>
5023 <entry><literal>DDth</literal></entry>
5026 <entry><literal>FX</literal> prefix</entry>
5027 <entry>fixed format global option (see usage notes)</entry>
5028 <entry><literal>FX Month DD Day</literal></entry>
5031 <entry><literal>TM</literal> prefix</entry>
5032 <entry>translation mode (print localized day and month names based on <varname>lc_messages</>)</entry>
5033 <entry><literal>TMMonth</literal></entry>
5036 <entry><literal>SP</literal> suffix</entry>
5037 <entry>spell mode (not yet implemented)</entry>
5038 <entry><literal>DDSP</literal></entry>
5045 Usage notes for date/time formatting:
5050 <literal>FM</literal> suppresses leading zeroes and trailing blanks
5051 that would otherwise be added to make the output of a pattern be
5058 <literal>TM</literal> does not include trailing blanks.
5064 <function>to_timestamp</function> and <function>to_date</function>
5065 skip multiple blank spaces in the input string if the <literal>FX</literal> option
5066 is not used. <literal>FX</literal> must be specified as the first item
5067 in the template. For example
5068 <literal>to_timestamp('2000 JUN', 'YYYY MON')</literal> is correct, but
5069 <literal>to_timestamp('2000 JUN', 'FXYYYY MON')</literal> returns an error,
5070 because <function>to_timestamp</function> expects one space only.
5076 Ordinary text is allowed in <function>to_char</function>
5077 templates and will be output literally. You can put a substring
5078 in double quotes to force it to be interpreted as literal text
5079 even if it contains pattern key words. For example, in
5080 <literal>'"Hello Year "YYYY'</literal>, the <literal>YYYY</literal>
5081 will be replaced by the year data, but the single <literal>Y</literal> in <literal>Year</literal>
5088 If you want to have a double quote in the output you must
5089 precede it with a backslash, for example <literal>E'\\"YYYY
5090 Month\\"'</literal>. <!-- "" font-lock sanity :-) -->
5091 (Two backslashes are necessary because the backslash already
5092 has a special meaning when using the escape string syntax.)
5098 The <literal>YYYY</literal> conversion from string to <type>timestamp</type> or
5099 <type>date</type> has a restriction if you use a year with more than 4 digits. You must
5100 use some non-digit character or template after <literal>YYYY</literal>,
5101 otherwise the year is always interpreted as 4 digits. For example
5102 (with the year 20000):
5103 <literal>to_date('200001131', 'YYYYMMDD')</literal> will be
5104 interpreted as a 4-digit year; instead use a non-digit
5105 separator after the year, like
5106 <literal>to_date('20000-1131', 'YYYY-MMDD')</literal> or
5107 <literal>to_date('20000Nov31', 'YYYYMonDD')</literal>.
5113 In conversions from string to <type>timestamp</type> or
5114 <type>date</type>, the <literal>CC</literal> field is ignored if there
5115 is a <literal>YYY</literal>, <literal>YYYY</literal> or
5116 <literal>Y,YYY</literal> field. If <literal>CC</literal> is used with
5117 <literal>YY</literal> or <literal>Y</literal> then the year is computed
5118 as <literal>(CC-1)*100+YY</literal>.
5124 An ISO week date (as distinct from a Gregorian date) can be specified to <function>to_timestamp</function> and <function>to_date</function> in one of two ways:
5128 Year, week and weekday, for example <literal>to_date('2006-42-4', 'IYYY-IW-ID')</literal> returns the date <literal>2006-10-19</literal>. If you omit the weekday it is assumed to be 1 (Monday).
5133 Year and day of year, for example <literal>to_date('2006-291', 'IYYY-IDDD')</literal> also returns <literal>2006-10-19</literal>.
5139 Attempting to construct a date using a mixture of ISO week and Gregorian date fields is nonsensical, and could yield unexpected results. In the context of an ISO year, the concept of a 'month' or 'day of month' has no meaning. In the context of a Gregorian year, the ISO week has no meaning. Users should take care to keep Gregorian and ISO date specifications separate.
5145 Millisecond (<literal>MS</literal>) and microsecond (<literal>US</literal>)
5146 values in a conversion from string to <type>timestamp</type> are used as part of the
5147 seconds after the decimal point. For example
5148 <literal>to_timestamp('12:3', 'SS:MS')</literal> is not 3 milliseconds,
5149 but 300, because the conversion counts it as 12 + 0.3 seconds.
5150 This means for the format <literal>SS:MS</literal>, the input values
5151 <literal>12:3</literal>, <literal>12:30</literal>, and <literal>12:300</literal> specify the
5152 same number of milliseconds. To get three milliseconds, one must use
5153 <literal>12:003</literal>, which the conversion counts as
5154 12 + 0.003 = 12.003 seconds.
5160 <literal>to_timestamp('15:12:02.020.001230', 'HH:MI:SS.MS.US')</literal>
5161 is 15 hours, 12 minutes, and 2 seconds + 20 milliseconds +
5162 1230 microseconds = 2.021230 seconds.
5168 <function>to_char(..., 'ID')</function>'s day of the week numbering
5169 matches the <function>extract('isodow', ...)</function> function, but
5170 <function>to_char(..., 'D')</function>'s does not match
5171 <function>extract('dow', ...)</function>'s day numbering.
5176 <para><function>to_char(interval)</function> formats <literal>HH</> and
5177 <literal>HH12</> as hours in a single day, while <literal>HH24</>
5178 can output hours exceeding a single day, e.g. >24.
5186 <xref linkend="functions-formatting-numeric-table"> shows the
5187 template patterns available for formatting numeric values.
5190 <table id="functions-formatting-numeric-table">
5191 <title>Template Patterns for Numeric Formatting</title>
5195 <entry>Pattern</entry>
5196 <entry>Description</entry>
5201 <entry><literal>9</literal></entry>
5202 <entry>value with the specified number of digits</entry>
5205 <entry><literal>0</literal></entry>
5206 <entry>value with leading zeros</entry>
5209 <entry><literal>.</literal> (period)</entry>
5210 <entry>decimal point</entry>
5213 <entry><literal>,</literal> (comma)</entry>
5214 <entry>group (thousand) separator</entry>
5217 <entry><literal>PR</literal></entry>
5218 <entry>negative value in angle brackets</entry>
5221 <entry><literal>S</literal></entry>
5222 <entry>sign anchored to number (uses locale)</entry>
5225 <entry><literal>L</literal></entry>
5226 <entry>currency symbol (uses locale)</entry>
5229 <entry><literal>D</literal></entry>
5230 <entry>decimal point (uses locale)</entry>
5233 <entry><literal>G</literal></entry>
5234 <entry>group separator (uses locale)</entry>
5237 <entry><literal>MI</literal></entry>
5238 <entry>minus sign in specified position (if number < 0)</entry>
5241 <entry><literal>PL</literal></entry>
5242 <entry>plus sign in specified position (if number > 0)</entry>
5245 <entry><literal>SG</literal></entry>
5246 <entry>plus/minus sign in specified position</entry>
5249 <entry><literal>RN</literal></entry>
5250 <entry>roman numeral (input between 1 and 3999)</entry>
5253 <entry><literal>TH</literal> or <literal>th</literal></entry>
5254 <entry>ordinal number suffix</entry>
5257 <entry><literal>V</literal></entry>
5258 <entry>shift specified number of digits (see notes)</entry>
5261 <entry><literal>EEEE</literal></entry>
5262 <entry>scientific notation (not implemented yet)</entry>
5269 Usage notes for numeric formatting:
5274 A sign formatted using <literal>SG</literal>, <literal>PL</literal>, or
5275 <literal>MI</literal> is not anchored to
5276 the number; for example,
5277 <literal>to_char(-12, 'S9999')</literal> produces <literal>' -12'</literal>,
5278 but <literal>to_char(-12, 'MI9999')</literal> produces <literal>'- 12'</literal>.
5279 The Oracle implementation does not allow the use of
5280 <literal>MI</literal> ahead of <literal>9</literal>, but rather
5281 requires that <literal>9</literal> precede
5282 <literal>MI</literal>.
5288 <literal>9</literal> results in a value with the same number of
5289 digits as there are <literal>9</literal>s. If a digit is
5290 not available it outputs a space.
5296 <literal>TH</literal> does not convert values less than zero
5297 and does not convert fractional numbers.
5303 <literal>PL</literal>, <literal>SG</literal>, and
5304 <literal>TH</literal> are <productname>PostgreSQL</productname>
5311 <literal>V</literal> effectively
5312 multiplies the input values by
5313 <literal>10^<replaceable>n</replaceable></literal>, where
5314 <replaceable>n</replaceable> is the number of digits following
5315 <literal>V</literal>.
5316 <function>to_char</function> does not support the use of
5317 <literal>V</literal> combined with a decimal point.
5318 (E.g., <literal>99.9V99</literal> is not allowed.)
5325 Certain modifiers can be applied to any template pattern to alter its
5326 behavior. For example, <literal>FM9999</literal>
5327 is the <literal>9999</literal> pattern with the
5328 <literal>FM</literal> modifier.
5329 <xref linkend="functions-formatting-numericmod-table"> shows the
5330 modifier patterns for numeric formatting.
5333 <table id="functions-formatting-numericmod-table">
5334 <title>Template Pattern Modifiers for Numeric Formatting</title>
5338 <entry>Modifier</entry>
5339 <entry>Description</entry>
5340 <entry>Example</entry>
5345 <entry><literal>FM</literal> prefix</entry>
5346 <entry>fill mode (suppress padding blanks and zeroes)</entry>
5347 <entry><literal>FM9999</literal></entry>
5350 <entry><literal>TH</literal> suffix</entry>
5351 <entry>uppercase ordinal number suffix</entry>
5352 <entry><literal>999TH</literal></entry>
5355 <entry><literal>th</literal> suffix</entry>
5356 <entry>lowercase ordinal number suffix</entry>
5357 <entry><literal>999th</literal></entry>
5364 <xref linkend="functions-formatting-examples-table"> shows some
5365 examples of the use of the <function>to_char</function> function.
5368 <table id="functions-formatting-examples-table">
5369 <title><function>to_char</function> Examples</title>
5373 <entry>Expression</entry>
5374 <entry>Result</entry>
5379 <entry><literal>to_char(current_timestamp, 'Day, DD HH12:MI:SS')</literal></entry>
5380 <entry><literal>'Tuesday , 06 05:39:18'</literal></entry>
5383 <entry><literal>to_char(current_timestamp, 'FMDay, FMDD HH12:MI:SS')</literal></entry>
5384 <entry><literal>'Tuesday, 6 05:39:18'</literal></entry>
5387 <entry><literal>to_char(-0.1, '99.99')</literal></entry>
5388 <entry><literal>' -.10'</literal></entry>
5391 <entry><literal>to_char(-0.1, 'FM9.99')</literal></entry>
5392 <entry><literal>'-.1'</literal></entry>
5395 <entry><literal>to_char(0.1, '0.9')</literal></entry>
5396 <entry><literal>' 0.1'</literal></entry>
5399 <entry><literal>to_char(12, '9990999.9')</literal></entry>
5400 <entry><literal>' 0012.0'</literal></entry>
5403 <entry><literal>to_char(12, 'FM9990999.9')</literal></entry>
5404 <entry><literal>'0012.'</literal></entry>
5407 <entry><literal>to_char(485, '999')</literal></entry>
5408 <entry><literal>' 485'</literal></entry>
5411 <entry><literal>to_char(-485, '999')</literal></entry>
5412 <entry><literal>'-485'</literal></entry>
5415 <entry><literal>to_char(485, '9 9 9')</literal></entry>
5416 <entry><literal>' 4 8 5'</literal></entry>
5419 <entry><literal>to_char(1485, '9,999')</literal></entry>
5420 <entry><literal>' 1,485'</literal></entry>
5423 <entry><literal>to_char(1485, '9G999')</literal></entry>
5424 <entry><literal>' 1 485'</literal></entry>
5427 <entry><literal>to_char(148.5, '999.999')</literal></entry>
5428 <entry><literal>' 148.500'</literal></entry>
5431 <entry><literal>to_char(148.5, 'FM999.999')</literal></entry>
5432 <entry><literal>'148.5'</literal></entry>
5435 <entry><literal>to_char(148.5, 'FM999.990')</literal></entry>
5436 <entry><literal>'148.500'</literal></entry>
5439 <entry><literal>to_char(148.5, '999D999')</literal></entry>
5440 <entry><literal>' 148,500'</literal></entry>
5443 <entry><literal>to_char(3148.5, '9G999D999')</literal></entry>
5444 <entry><literal>' 3 148,500'</literal></entry>
5447 <entry><literal>to_char(-485, '999S')</literal></entry>
5448 <entry><literal>'485-'</literal></entry>
5451 <entry><literal>to_char(-485, '999MI')</literal></entry>
5452 <entry><literal>'485-'</literal></entry>
5455 <entry><literal>to_char(485, '999MI')</literal></entry>
5456 <entry><literal>'485 '</literal></entry>
5459 <entry><literal>to_char(485, 'FM999MI')</literal></entry>
5460 <entry><literal>'485'</literal></entry>
5463 <entry><literal>to_char(485, 'PL999')</literal></entry>
5464 <entry><literal>'+485'</literal></entry>
5467 <entry><literal>to_char(485, 'SG999')</literal></entry>
5468 <entry><literal>'+485'</literal></entry>
5471 <entry><literal>to_char(-485, 'SG999')</literal></entry>
5472 <entry><literal>'-485'</literal></entry>
5475 <entry><literal>to_char(-485, '9SG99')</literal></entry>
5476 <entry><literal>'4-85'</literal></entry>
5479 <entry><literal>to_char(-485, '999PR')</literal></entry>
5480 <entry><literal>'<485>'</literal></entry>
5483 <entry><literal>to_char(485, 'L999')</literal></entry>
5484 <entry><literal>'DM 485</literal></entry>
5487 <entry><literal>to_char(485, 'RN')</literal></entry>
5488 <entry><literal>' CDLXXXV'</literal></entry>
5491 <entry><literal>to_char(485, 'FMRN')</literal></entry>
5492 <entry><literal>'CDLXXXV'</literal></entry>
5495 <entry><literal>to_char(5.2, 'FMRN')</literal></entry>
5496 <entry><literal>'V'</literal></entry>
5499 <entry><literal>to_char(482, '999th')</literal></entry>
5500 <entry><literal>' 482nd'</literal></entry>
5503 <entry><literal>to_char(485, '"Good number:"999')</literal></entry>
5504 <entry><literal>'Good number: 485'</literal></entry>
5507 <entry><literal>to_char(485.8, '"Pre:"999" Post:" .999')</literal></entry>
5508 <entry><literal>'Pre: 485 Post: .800'</literal></entry>
5511 <entry><literal>to_char(12, '99V999')</literal></entry>
5512 <entry><literal>' 12000'</literal></entry>
5515 <entry><literal>to_char(12.4, '99V999')</literal></entry>
5516 <entry><literal>' 12400'</literal></entry>
5519 <entry><literal>to_char(12.45, '99V9')</literal></entry>
5520 <entry><literal>' 125'</literal></entry>
5529 <sect1 id="functions-datetime">
5530 <title>Date/Time Functions and Operators</title>
5533 <xref linkend="functions-datetime-table"> shows the available
5534 functions for date/time value processing, with details appearing in
5535 the following subsections. <xref
5536 linkend="operators-datetime-table"> illustrates the behaviors of
5537 the basic arithmetic operators (<literal>+</literal>,
5538 <literal>*</literal>, etc.). For formatting functions, refer to
5539 <xref linkend="functions-formatting">. You should be familiar with
5540 the background information on date/time data types from <xref
5541 linkend="datatype-datetime">.
5545 All the functions and operators described below that take <type>time</type> or <type>timestamp</type>
5546 inputs actually come in two variants: one that takes <type>time with time zone</type> or <type>timestamp
5547 with time zone</type>, and one that takes <type>time without time zone</type> or <type>timestamp without time zone</type>.
5548 For brevity, these variants are not shown separately. Also, the
5549 <literal>+</> and <literal>*</> operators come in commutative pairs (for
5550 example both date + integer and integer + date); we show only one of each
5554 <table id="operators-datetime-table">
5555 <title>Date/Time Operators</title>
5560 <entry>Operator</entry>
5561 <entry>Example</entry>
5562 <entry>Result</entry>
5568 <entry> <literal>+</literal> </entry>
5569 <entry><literal>date '2001-09-28' + integer '7'</literal></entry>
5570 <entry><literal>date '2001-10-05'</literal></entry>
5574 <entry> <literal>+</literal> </entry>
5575 <entry><literal>date '2001-09-28' + interval '1 hour'</literal></entry>
5576 <entry><literal>timestamp '2001-09-28 01:00:00'</literal></entry>
5580 <entry> <literal>+</literal> </entry>
5581 <entry><literal>date '2001-09-28' + time '03:00'</literal></entry>
5582 <entry><literal>timestamp '2001-09-28 03:00:00'</literal></entry>
5586 <entry> <literal>+</literal> </entry>
5587 <entry><literal>interval '1 day' + interval '1 hour'</literal></entry>
5588 <entry><literal>interval '1 day 01:00:00'</literal></entry>
5592 <entry> <literal>+</literal> </entry>
5593 <entry><literal>timestamp '2001-09-28 01:00' + interval '23 hours'</literal></entry>
5594 <entry><literal>timestamp '2001-09-29 00:00:00'</literal></entry>
5598 <entry> <literal>+</literal> </entry>
5599 <entry><literal>time '01:00' + interval '3 hours'</literal></entry>
5600 <entry><literal>time '04:00:00'</literal></entry>
5604 <entry> <literal>-</literal> </entry>
5605 <entry><literal>- interval '23 hours'</literal></entry>
5606 <entry><literal>interval '-23:00:00'</literal></entry>
5610 <entry> <literal>-</literal> </entry>
5611 <entry><literal>date '2001-10-01' - date '2001-09-28'</literal></entry>
5612 <entry><literal>integer '3'</literal></entry>
5616 <entry> <literal>-</literal> </entry>
5617 <entry><literal>date '2001-10-01' - integer '7'</literal></entry>
5618 <entry><literal>date '2001-09-24'</literal></entry>
5622 <entry> <literal>-</literal> </entry>
5623 <entry><literal>date '2001-09-28' - interval '1 hour'</literal></entry>
5624 <entry><literal>timestamp '2001-09-27 23:00:00'</literal></entry>
5628 <entry> <literal>-</literal> </entry>
5629 <entry><literal>time '05:00' - time '03:00'</literal></entry>
5630 <entry><literal>interval '02:00:00'</literal></entry>
5634 <entry> <literal>-</literal> </entry>
5635 <entry><literal>time '05:00' - interval '2 hours'</literal></entry>
5636 <entry><literal>time '03:00:00'</literal></entry>
5640 <entry> <literal>-</literal> </entry>
5641 <entry><literal>timestamp '2001-09-28 23:00' - interval '23 hours'</literal></entry>
5642 <entry><literal>timestamp '2001-09-28 00:00:00'</literal></entry>
5646 <entry> <literal>-</literal> </entry>
5647 <entry><literal>interval '1 day' - interval '1 hour'</literal></entry>
5648 <entry><literal>interval '1 day -01:00:00'</literal></entry>
5652 <entry> <literal>-</literal> </entry>
5653 <entry><literal>timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00'</literal></entry>
5654 <entry><literal>interval '1 day 15:00:00'</literal></entry>
5658 <entry> <literal>*</literal> </entry>
5659 <entry><literal>900 * interval '1 second'</literal></entry>
5660 <entry><literal>interval '00:15:00'</literal></entry>
5664 <entry> <literal>*</literal> </entry>
5665 <entry><literal>21 * interval '1 day'</literal></entry>
5666 <entry><literal>interval '21 days'</literal></entry>
5670 <entry> <literal>*</literal> </entry>
5671 <entry><literal>double precision '3.5' * interval '1 hour'</literal></entry>
5672 <entry><literal>interval '03:30:00'</literal></entry>
5676 <entry> <literal>/</literal> </entry>
5677 <entry><literal>interval '1 hour' / double precision '1.5'</literal></entry>
5678 <entry><literal>interval '00:40:00'</literal></entry>
5685 <primary>age</primary>
5688 <primary>clock_timestamp</primary>
5691 <primary>current_date</primary>
5694 <primary>current_time</primary>
5697 <primary>current_timestamp</primary>
5700 <primary>date_part</primary>
5703 <primary>date_trunc</primary>
5706 <primary>extract</primary>
5709 <primary>isfinite</primary>
5712 <primary>justify_days</primary>
5715 <primary>justify_hours</primary>
5718 <primary>justify_interval</primary>
5721 <primary>localtime</primary>
5724 <primary>localtimestamp</primary>
5727 <primary>now</primary>
5730 <primary>statement_timestamp</primary>
5733 <primary>timeofday</primary>
5736 <primary>transaction_timestamp</primary>
5739 <table id="functions-datetime-table">
5740 <title>Date/Time Functions</title>
5744 <entry>Function</entry>
5745 <entry>Return Type</entry>
5746 <entry>Description</entry>
5747 <entry>Example</entry>
5748 <entry>Result</entry>
5754 <entry><literal><function>age</function>(<type>timestamp</type>, <type>timestamp</type>)</literal></entry>
5755 <entry><type>interval</type></entry>
5756 <entry>Subtract arguments, producing a <quote>symbolic</> result that
5757 uses years and months</entry>
5758 <entry><literal>age(timestamp '2001-04-10', timestamp '1957-06-13')</literal></entry>
5759 <entry><literal>43 years 9 mons 27 days</literal></entry>
5763 <entry><literal><function>age</function>(<type>timestamp</type>)</literal></entry>
5764 <entry><type>interval</type></entry>
5765 <entry>Subtract from <function>current_date</function></entry>
5766 <entry><literal>age(timestamp '1957-06-13')</literal></entry>
5767 <entry><literal>43 years 8 mons 3 days</literal></entry>
5771 <entry><literal><function>clock_timestamp</function>()</literal></entry>
5772 <entry><type>timestamp with time zone</type></entry>
5773 <entry>Current date and time (changes during statement execution);
5774 see <xref linkend="functions-datetime-current">
5781 <entry><literal><function>current_date</function></literal></entry>
5782 <entry><type>date</type></entry>
5783 <entry>Current date;
5784 see <xref linkend="functions-datetime-current">
5791 <entry><literal><function>current_time</function></literal></entry>
5792 <entry><type>time with time zone</type></entry>
5793 <entry>Current time of day;
5794 see <xref linkend="functions-datetime-current">
5801 <entry><literal><function>current_timestamp</function></literal></entry>
5802 <entry><type>timestamp with time zone</type></entry>
5803 <entry>Current date and time (start of current transaction);
5804 see <xref linkend="functions-datetime-current">
5811 <entry><literal><function>date_part</function>(<type>text</type>, <type>timestamp</type>)</literal></entry>
5812 <entry><type>double precision</type></entry>
5813 <entry>Get subfield (equivalent to <function>extract</function>);
5814 see <xref linkend="functions-datetime-extract">
5816 <entry><literal>date_part('hour', timestamp '2001-02-16 20:38:40')</literal></entry>
5817 <entry><literal>20</literal></entry>
5821 <entry><literal><function>date_part</function>(<type>text</type>, <type>interval</type>)</literal></entry>
5822 <entry><type>double precision</type></entry>
5823 <entry>Get subfield (equivalent to
5824 <function>extract</function>); see <xref linkend="functions-datetime-extract">
5826 <entry><literal>date_part('month', interval '2 years 3 months')</literal></entry>
5827 <entry><literal>3</literal></entry>
5831 <entry><literal><function>date_trunc</function>(<type>text</type>, <type>timestamp</type>)</literal></entry>
5832 <entry><type>timestamp</type></entry>
5833 <entry>Truncate to specified precision; see also <xref linkend="functions-datetime-trunc">
5835 <entry><literal>date_trunc('hour', timestamp '2001-02-16 20:38:40')</literal></entry>
5836 <entry><literal>2001-02-16 20:00:00</literal></entry>
5840 <entry><literal><function>extract</function>(<parameter>field</parameter> from
5841 <type>timestamp</type>)</literal></entry>
5842 <entry><type>double precision</type></entry>
5843 <entry>Get subfield; see <xref linkend="functions-datetime-extract">
5845 <entry><literal>extract(hour from timestamp '2001-02-16 20:38:40')</literal></entry>
5846 <entry><literal>20</literal></entry>
5850 <entry><literal><function>extract</function>(<parameter>field</parameter> from
5851 <type>interval</type>)</literal></entry>
5852 <entry><type>double precision</type></entry>
5853 <entry>Get subfield; see <xref linkend="functions-datetime-extract">
5855 <entry><literal>extract(month from interval '2 years 3 months')</literal></entry>
5856 <entry><literal>3</literal></entry>
5860 <entry><literal><function>isfinite</function>(<type>timestamp</type>)</literal></entry>
5861 <entry><type>boolean</type></entry>
5862 <entry>Test for finite time stamp (not equal to infinity)</entry>
5863 <entry><literal>isfinite(timestamp '2001-02-16 21:28:30')</literal></entry>
5864 <entry><literal>true</literal></entry>
5868 <entry><literal><function>isfinite</function>(<type>interval</type>)</literal></entry>
5869 <entry><type>boolean</type></entry>
5870 <entry>Test for finite interval</entry>
5871 <entry><literal>isfinite(interval '4 hours')</literal></entry>
5872 <entry><literal>true</literal></entry>
5876 <entry><literal><function>justify_days</function>(<type>interval</type>)</literal></entry>
5877 <entry><type>interval</type></entry>
5878 <entry>Adjust interval so 30-day time periods are represented as months</entry>
5879 <entry><literal>justify_days(interval '30 days')</literal></entry>
5880 <entry><literal>1 month</literal></entry>
5884 <entry><literal><function>justify_hours</function>(<type>interval</type>)</literal></entry>
5885 <entry><type>interval</type></entry>
5886 <entry>Adjust interval so 24-hour time periods are represented as days</entry>
5887 <entry><literal>justify_hours(interval '24 hours')</literal></entry>
5888 <entry><literal>1 day</literal></entry>
5892 <entry><literal><function>justify_interval</function>(<type>interval</type>)</literal></entry>
5893 <entry><type>interval</type></entry>
5894 <entry>Adjust interval using <function>justify_days</> and <function>justify_hours</>, with additional sign adjustments</entry>
5895 <entry><literal>justify_interval(interval '1 mon -1 hour')</literal></entry>
5896 <entry><literal>29 days 23:00:00</literal></entry>
5900 <entry><literal><function>localtime</function></literal></entry>
5901 <entry><type>time</type></entry>
5902 <entry>Current time of day;
5903 see <xref linkend="functions-datetime-current">
5910 <entry><literal><function>localtimestamp</function></literal></entry>
5911 <entry><type>timestamp</type></entry>
5912 <entry>Current date and time (start of current transaction);
5913 see <xref linkend="functions-datetime-current">
5920 <entry><literal><function>now</function>()</literal></entry>
5921 <entry><type>timestamp with time zone</type></entry>
5922 <entry>Current date and time (start of current transaction);
5923 see <xref linkend="functions-datetime-current">
5930 <entry><literal><function>statement_timestamp</function>()</literal></entry>
5931 <entry><type>timestamp with time zone</type></entry>
5932 <entry>Current date and time (start of current statement);
5933 see <xref linkend="functions-datetime-current">
5940 <entry><literal><function>timeofday</function>()</literal></entry>
5941 <entry><type>text</type></entry>
5942 <entry>Current date and time
5943 (like <function>clock_timestamp</>, but as a <type>text</> string);
5944 see <xref linkend="functions-datetime-current">
5951 <entry><literal><function>transaction_timestamp</function>()</literal></entry>
5952 <entry><type>timestamp with time zone</type></entry>
5953 <entry>Current date and time (start of current transaction);
5954 see <xref linkend="functions-datetime-current">
5964 In addition to these functions, the SQL <literal>OVERLAPS</> operator is
5967 (<replaceable>start1</replaceable>, <replaceable>end1</replaceable>) OVERLAPS (<replaceable>start2</replaceable>, <replaceable>end2</replaceable>)
5968 (<replaceable>start1</replaceable>, <replaceable>length1</replaceable>) OVERLAPS (<replaceable>start2</replaceable>, <replaceable>length2</replaceable>)
5970 This expression yields true when two time periods (defined by their
5971 endpoints) overlap, false when they do not overlap. The endpoints
5972 can be specified as pairs of dates, times, or time stamps; or as
5973 a date, time, or time stamp followed by an interval.
5977 SELECT (DATE '2001-02-16', DATE '2001-12-21') OVERLAPS
5978 (DATE '2001-10-30', DATE '2002-10-30');
5979 <lineannotation>Result: </lineannotation><computeroutput>true</computeroutput>
5980 SELECT (DATE '2001-02-16', INTERVAL '100 days') OVERLAPS
5981 (DATE '2001-10-30', DATE '2002-10-30');
5982 <lineannotation>Result: </lineannotation><computeroutput>false</computeroutput>
5986 When adding an <type>interval</type> value to (or subtracting an
5987 <type>interval</type> value from) a <type>timestamp with time zone</type>
5988 value, the days component advances (or decrements) the date of the
5989 <type>timestamp with time zone</type> by the indicated number of days.
5990 Across daylight saving time changes (with the session time zone set to a
5991 time zone that recognizes DST), this means <literal>interval '1 day'</literal>
5992 does not necessarily equal <literal>interval '24 hours'</literal>.
5993 For example, with the session time zone set to <literal>CST7CDT</literal>,
5994 <literal>timestamp with time zone '2005-04-02 12:00-07' + interval '1 day' </literal>
5995 will produce <literal>timestamp with time zone '2005-04-03 12:00-06'</literal>,
5996 while adding <literal>interval '24 hours'</literal> to the same initial
5997 <type>timestamp with time zone</type> produces
5998 <literal>timestamp with time zone '2005-04-03 13:00-06'</literal>, as there is
5999 a change in daylight saving time at <literal>2005-04-03 02:00</literal> in time zone
6000 <literal>CST7CDT</literal>.
6004 Note there can be ambiguity in the <literal>months</> returned by
6005 <function>age</> because different months have a different number of
6006 days. <productname>PostgreSQL</>'s approach uses the month from the
6007 earlier of the two dates when calculating partial months. For example,
6008 <literal>age('2004-06-01', '2004-04-30')</> uses April to yield
6009 <literal>1 mon 1 day</>, while using May would yield <literal>1 mon 2
6010 days</> because May has 31 days, while April has only 30.
6013 <sect2 id="functions-datetime-extract">
6014 <title><function>EXTRACT</function>, <function>date_part</function></title>
6017 <primary>date_part</primary>
6020 <primary>extract</primary>
6024 EXTRACT(<replaceable>field</replaceable> FROM <replaceable>source</replaceable>)
6028 The <function>extract</function> function retrieves subfields
6029 such as year or hour from date/time values.
6030 <replaceable>source</replaceable> must be a value expression of
6031 type <type>timestamp</type>, <type>time</type>, or <type>interval</type>.
6032 (Expressions of type <type>date</type> will
6033 be cast to <type>timestamp</type> and can therefore be used as
6034 well.) <replaceable>field</replaceable> is an identifier or
6035 string that selects what field to extract from the source value.
6036 The <function>extract</function> function returns values of type
6037 <type>double precision</type>.
6038 The following are valid field names:
6040 <!-- alphabetical -->
6043 <term><literal>century</literal></term>
6050 SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
6051 <lineannotation>Result: </lineannotation><computeroutput>20</computeroutput>
6052 SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40');
6053 <lineannotation>Result: </lineannotation><computeroutput>21</computeroutput>
6057 The first century starts at 0001-01-01 00:00:00 AD, although
6058 they did not know it at the time. This definition applies to all
6059 Gregorian calendar countries. There is no century number 0,
6060 you go from -1 to 1.
6062 If you disagree with this, please write your complaint to:
6063 Pope, Cathedral Saint-Peter of Roma, Vatican.
6067 <productname>PostgreSQL</productname> releases before 8.0 did not
6068 follow the conventional numbering of centuries, but just returned
6069 the year field divided by 100.
6075 <term><literal>day</literal></term>
6078 The day (of the month) field (1 - 31)
6082 SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
6083 <lineannotation>Result: </lineannotation><computeroutput>16</computeroutput>
6089 <term><literal>decade</literal></term>
6092 The year field divided by 10
6096 SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40');
6097 <lineannotation>Result: </lineannotation><computeroutput>200</computeroutput>
6103 <term><literal>dow</literal></term>
6106 The day of the week as Sunday(<literal>0</>) to
6107 Saturday(<literal>6</>)
6111 SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');
6112 <lineannotation>Result: </lineannotation><computeroutput>5</computeroutput>
6115 Note that <function>extract</function>'s day of the week numbering
6116 is different from that of the <function>to_char(...,
6117 'D')</function> function.
6124 <term><literal>doy</literal></term>
6127 The day of the year (1 - 365/366)
6131 SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40');
6132 <lineannotation>Result: </lineannotation><computeroutput>47</computeroutput>
6138 <term><literal>epoch</literal></term>
6141 For <type>date</type> and <type>timestamp</type> values, the
6142 number of seconds since 1970-01-01 00:00:00-00 (can be negative);
6143 for <type>interval</type> values, the total number
6144 of seconds in the interval
6148 SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-08');
6149 <lineannotation>Result: </lineannotation><computeroutput>982384720</computeroutput>
6151 SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
6152 <lineannotation>Result: </lineannotation><computeroutput>442800</computeroutput>
6156 Here is how you can convert an epoch value back to a time
6161 SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720 * INTERVAL '1 second';
6167 <term><literal>hour</literal></term>
6170 The hour field (0 - 23)
6174 SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
6175 <lineannotation>Result: </lineannotation><computeroutput>20</computeroutput>
6181 <term><literal>isodow</literal></term>
6184 The day of the week as Monday(<literal>1</>) to
6185 Sunday(<literal>7</>)
6189 SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40');
6190 <lineannotation>Result: </lineannotation><computeroutput>7</computeroutput>
6193 This is identical to <literal>dow</> except for Sunday. This
6194 matches the <acronym>ISO</> 8601 day of the week numbering.
6201 <term><literal>isoyear</literal></term>
6204 The <acronym>ISO</acronym> 8601 year that the date falls in (not applicable to intervals).
6208 SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01');
6209 <lineannotation>Result: </lineannotation><computeroutput>2005</computeroutput>
6210 SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02');
6211 <lineannotation>Result: </lineannotation><computeroutput>2006</computeroutput>
6215 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.
6218 This field is not available in PostgreSQL releases prior to 8.3.
6224 <term><literal>microseconds</literal></term>
6227 The seconds field, including fractional parts, multiplied by 1
6228 000 000. Note that this includes full seconds.
6232 SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5');
6233 <lineannotation>Result: </lineannotation><computeroutput>28500000</computeroutput>
6239 <term><literal>millennium</literal></term>
6246 SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40');
6247 <lineannotation>Result: </lineannotation><computeroutput>3</computeroutput>
6251 Years in the 1900s are in the second millennium.
6252 The third millennium starts January 1, 2001.
6256 <productname>PostgreSQL</productname> releases before 8.0 did not
6257 follow the conventional numbering of millennia, but just returned
6258 the year field divided by 1000.
6264 <term><literal>milliseconds</literal></term>
6267 The seconds field, including fractional parts, multiplied by
6268 1000. Note that this includes full seconds.
6272 SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5');
6273 <lineannotation>Result: </lineannotation><computeroutput>28500</computeroutput>
6279 <term><literal>minute</literal></term>
6282 The minutes field (0 - 59)
6286 SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40');
6287 <lineannotation>Result: </lineannotation><computeroutput>38</computeroutput>
6293 <term><literal>month</literal></term>
6296 For <type>timestamp</type> values, the number of the month
6297 within the year (1 - 12) ; for <type>interval</type> values
6298 the number of months, modulo 12 (0 - 11)
6302 SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40');
6303 <lineannotation>Result: </lineannotation><computeroutput>2</computeroutput>
6305 SELECT EXTRACT(MONTH FROM INTERVAL '2 years 3 months');
6306 <lineannotation>Result: </lineannotation><computeroutput>3</computeroutput>
6308 SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months');
6309 <lineannotation>Result: </lineannotation><computeroutput>1</computeroutput>
6315 <term><literal>quarter</literal></term>
6318 The quarter of the year (1 - 4) that the day is in
6322 SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40');
6323 <lineannotation>Result: </lineannotation><computeroutput>1</computeroutput>
6329 <term><literal>second</literal></term>
6332 The seconds field, including fractional parts (0 -
6333 59<footnote><simpara>60 if leap seconds are
6334 implemented by the operating system</simpara></footnote>)
6338 SELECT EXTRACT(SECOND FROM TIMESTAMP '2001-02-16 20:38:40');
6339 <lineannotation>Result: </lineannotation><computeroutput>40</computeroutput>
6341 SELECT EXTRACT(SECOND FROM TIME '17:12:28.5');
6342 <lineannotation>Result: </lineannotation><computeroutput>28.5</computeroutput>
6347 <term><literal>timezone</literal></term>
6350 The time zone offset from UTC, measured in seconds. Positive values
6351 correspond to time zones east of UTC, negative values to
6358 <term><literal>timezone_hour</literal></term>
6361 The hour component of the time zone offset
6367 <term><literal>timezone_minute</literal></term>
6370 The minute component of the time zone offset
6376 <term><literal>week</literal></term>
6379 The number of the week of the year that the day is in. By definition
6380 (<acronym>ISO</acronym> 8601), the first week of a year
6381 contains January 4 of that year. (The <acronym>ISO</acronym>-8601
6382 week starts on Monday.) In other words, the first Thursday of
6383 a year is in week 1 of that year.
6386 Because of this, it is possible for early January dates to be part of the
6387 52nd or 53rd week of the previous year. For example, <literal>2005-01-01</>
6388 is part of the 53rd week of year 2004, and <literal>2006-01-01</> is part of
6389 the 52nd week of year 2005.
6393 SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40');
6394 <lineannotation>Result: </lineannotation><computeroutput>7</computeroutput>
6400 <term><literal>year</literal></term>
6403 The year field. Keep in mind there is no <literal>0 AD</>, so subtracting
6404 <literal>BC</> years from <literal>AD</> years should be done with care.
6408 SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40');
6409 <lineannotation>Result: </lineannotation><computeroutput>2001</computeroutput>
6418 The <function>extract</function> function is primarily intended
6419 for computational processing. For formatting date/time values for
6420 display, see <xref linkend="functions-formatting">.
6424 The <function>date_part</function> function is modeled on the traditional
6425 <productname>Ingres</productname> equivalent to the
6426 <acronym>SQL</acronym>-standard function <function>extract</function>:
6428 date_part('<replaceable>field</replaceable>', <replaceable>source</replaceable>)
6430 Note that here the <replaceable>field</replaceable> parameter needs to
6431 be a string value, not a name. The valid field names for
6432 <function>date_part</function> are the same as for
6433 <function>extract</function>.
6437 SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
6438 <lineannotation>Result: </lineannotation><computeroutput>16</computeroutput>
6440 SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
6441 <lineannotation>Result: </lineannotation><computeroutput>4</computeroutput>
6446 <sect2 id="functions-datetime-trunc">
6447 <title><function>date_trunc</function></title>
6450 <primary>date_trunc</primary>
6454 The function <function>date_trunc</function> is conceptually
6455 similar to the <function>trunc</function> function for numbers.
6460 date_trunc('<replaceable>field</replaceable>', <replaceable>source</replaceable>)
6462 <replaceable>source</replaceable> is a value expression of type
6463 <type>timestamp</type> or <type>interval</>.
6464 (Values of type <type>date</type> and
6465 <type>time</type> are cast automatically, to <type>timestamp</type> or
6466 <type>interval</> respectively.)
6467 <replaceable>field</replaceable> selects to which precision to
6468 truncate the input value. The return value is of type
6469 <type>timestamp</type> or <type>interval</>
6470 with all fields that are less significant than the
6471 selected one set to zero (or one, for day and month).
6475 Valid values for <replaceable>field</replaceable> are:
6477 <member><literal>microseconds</literal></member>
6478 <member><literal>milliseconds</literal></member>
6479 <member><literal>second</literal></member>
6480 <member><literal>minute</literal></member>
6481 <member><literal>hour</literal></member>
6482 <member><literal>day</literal></member>
6483 <member><literal>week</literal></member>
6484 <member><literal>month</literal></member>
6485 <member><literal>quarter</literal></member>
6486 <member><literal>year</literal></member>
6487 <member><literal>decade</literal></member>
6488 <member><literal>century</literal></member>
6489 <member><literal>millennium</literal></member>
6496 SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
6497 <lineannotation>Result: </lineannotation><computeroutput>2001-02-16 20:00:00</computeroutput>
6499 SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
6500 <lineannotation>Result: </lineannotation><computeroutput>2001-01-01 00:00:00</computeroutput>
6505 <sect2 id="functions-datetime-zoneconvert">
6506 <title><literal>AT TIME ZONE</literal></title>
6509 <primary>time zone</primary>
6510 <secondary>conversion</secondary>
6514 <primary>AT TIME ZONE</primary>
6518 The <literal>AT TIME ZONE</literal> construct allows conversions
6519 of time stamps to different time zones. <xref
6520 linkend="functions-datetime-zoneconvert-table"> shows its
6524 <table id="functions-datetime-zoneconvert-table">
6525 <title><literal>AT TIME ZONE</literal> Variants</title>
6529 <entry>Expression</entry>
6530 <entry>Return Type</entry>
6531 <entry>Description</entry>
6538 <literal><type>timestamp without time zone</type> AT TIME ZONE <replaceable>zone</></literal>
6540 <entry><type>timestamp with time zone</type></entry>
6541 <entry>Treat given time stamp <emphasis>without time zone</> as located in the specified time zone</entry>
6546 <literal><type>timestamp with time zone</type> AT TIME ZONE <replaceable>zone</></literal>
6548 <entry><type>timestamp without time zone</type></entry>
6549 <entry>Convert given time stamp <emphasis>with time zone</> to the new time zone</entry>
6554 <literal><type>time with time zone</type> AT TIME ZONE <replaceable>zone</></literal>
6556 <entry><type>time with time zone</type></entry>
6557 <entry>Convert given time <emphasis>with time zone</> to the new time zone</entry>
6564 In these expressions, the desired time zone <replaceable>zone</> can be
6565 specified either as a text string (e.g., <literal>'PST'</literal>)
6566 or as an interval (e.g., <literal>INTERVAL '-08:00'</literal>).
6567 In the text case, a time zone name can be specified in any of the ways
6568 described in <xref linkend="datatype-timezones">.
6572 Examples (supposing that the local time zone is <literal>PST8PDT</>):
6574 SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'MST';
6575 <lineannotation>Result: </lineannotation><computeroutput>2001-02-16 19:38:40-08</computeroutput>
6577 SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'MST';
6578 <lineannotation>Result: </lineannotation><computeroutput>2001-02-16 18:38:40</computeroutput>
6580 The first example takes a time stamp without time zone and interprets it as MST time
6581 (UTC-7), which is then converted to PST (UTC-8) for display. The second example takes
6582 a time stamp specified in EST (UTC-5) and converts it to local time in MST (UTC-7).
6586 The function <literal><function>timezone</function>(<replaceable>zone</>,
6587 <replaceable>timestamp</>)</literal> is equivalent to the SQL-conforming construct
6588 <literal><replaceable>timestamp</> AT TIME ZONE
6589 <replaceable>zone</></literal>.
6593 <sect2 id="functions-datetime-current">
6594 <title>Current Date/Time</title>
6597 <primary>date</primary>
6598 <secondary>current</secondary>
6602 <primary>time</primary>
6603 <secondary>current</secondary>
6607 <productname>PostgreSQL</productname> provides a number of functions
6608 that return values related to the current date and time. These
6609 SQL-standard functions all return values based on the start time of
6610 the current transaction:
6615 CURRENT_TIME(<replaceable>precision</replaceable>)
6616 CURRENT_TIMESTAMP(<replaceable>precision</replaceable>)
6619 LOCALTIME(<replaceable>precision</replaceable>)
6620 LOCALTIMESTAMP(<replaceable>precision</replaceable>)
6625 <function>CURRENT_TIME</function> and
6626 <function>CURRENT_TIMESTAMP</function> deliver values with time zone;
6627 <function>LOCALTIME</function> and
6628 <function>LOCALTIMESTAMP</function> deliver values without time zone.
6632 <function>CURRENT_TIME</function>,
6633 <function>CURRENT_TIMESTAMP</function>,
6634 <function>LOCALTIME</function>, and
6635 <function>LOCALTIMESTAMP</function>
6636 can optionally be given
6637 a precision parameter, which causes the result to be rounded
6638 to that many fractional digits in the seconds field. Without a precision parameter,
6639 the result is given to the full available precision.
6645 SELECT CURRENT_TIME;
6646 <lineannotation>Result: </lineannotation><computeroutput>14:39:53.662522-05</computeroutput>
6648 SELECT CURRENT_DATE;
6649 <lineannotation>Result: </lineannotation><computeroutput>2001-12-23</computeroutput>
6651 SELECT CURRENT_TIMESTAMP;
6652 <lineannotation>Result: </lineannotation><computeroutput>2001-12-23 14:39:53.662522-05</computeroutput>
6654 SELECT CURRENT_TIMESTAMP(2);
6655 <lineannotation>Result: </lineannotation><computeroutput>2001-12-23 14:39:53.66-05</computeroutput>
6657 SELECT LOCALTIMESTAMP;
6658 <lineannotation>Result: </lineannotation><computeroutput>2001-12-23 14:39:53.662522</computeroutput>
6663 Since these functions return
6664 the start time of the current transaction, their values do not
6665 change during the transaction. This is considered a feature:
6666 the intent is to allow a single transaction to have a consistent
6667 notion of the <quote>current</quote> time, so that multiple
6668 modifications within the same transaction bear the same
6674 Other database systems might advance these values more
6680 <productname>PostgreSQL</productname> also provides functions that
6681 return the start time of the current statement, as well as the actual
6682 current time at the instant the function is called. The complete list
6683 of non-SQL-standard time functions is:
6686 transaction_timestamp()
6687 statement_timestamp()
6694 <function>now()</> is a traditional <productname>PostgreSQL</productname>
6695 equivalent to <function>CURRENT_TIMESTAMP</function>.
6696 <function>transaction_timestamp()</> is likewise equivalent to
6697 <function>CURRENT_TIMESTAMP</function>, but is named to clearly reflect
6699 <function>statement_timestamp()</> returns the start time of the current
6700 statement (more specifically, the time of receipt of the latest command
6701 message from the client).
6702 <function>statement_timestamp()</> and <function>transaction_timestamp()</>
6703 return the same value during the first command of a transaction, but might
6704 differ during subsequent commands.
6705 <function>clock_timestamp()</> returns the actual current time, and
6706 therefore its value changes even within a single SQL command.
6707 <function>timeofday()</> is a historical
6708 <productname>PostgreSQL</productname> function. Like
6709 <function>clock_timestamp()</>, it returns the actual current time,
6710 but as a formatted <type>text</> string rather than a <type>timestamp
6711 with time zone</> value.
6715 All the date/time data types also accept the special literal value
6716 <literal>now</literal> to specify the current date and time (again,
6717 interpreted as the transaction start time). Thus,
6718 the following three all return the same result:
6720 SELECT CURRENT_TIMESTAMP;
6722 SELECT TIMESTAMP 'now'; -- incorrect for use with DEFAULT
6728 You do not want to use the third form when specifying a <literal>DEFAULT</>
6729 clause while creating a table. The system will convert <literal>now</literal>
6730 to a <type>timestamp</type> as soon as the constant is parsed, so that when
6731 the default value is needed,
6732 the time of the table creation would be used! The first two
6733 forms will not be evaluated until the default value is used,
6734 because they are function calls. Thus they will give the desired
6735 behavior of defaulting to the time of row insertion.
6740 <sect2 id="functions-datetime-delay">
6741 <title>Delaying Execution</title>
6744 <primary>pg_sleep</primary>
6747 <primary>sleep</primary>
6750 <primary>delay</primary>
6754 The following function is available to delay execution of the server
6757 pg_sleep(<replaceable>seconds</replaceable>)
6760 <function>pg_sleep</function> makes the current session's process
6761 sleep until <replaceable>seconds</replaceable> seconds have
6762 elapsed. <replaceable>seconds</replaceable> is a value of type
6763 <type>double precision</>, so fractional-second delays can be specified.
6767 SELECT pg_sleep(1.5);
6773 The effective resolution of the sleep interval is platform-specific;
6774 0.01 seconds is a common value. The sleep delay will be at least as long
6775 as specified. It might be longer depending on factors such as server load.
6781 Make sure that your session does not hold more locks than necessary
6782 when calling <function>pg_sleep</function>. Otherwise other sessions
6783 might have to wait for your sleeping process, slowing down the entire
6792 <sect1 id="functions-enum">
6793 <title>Enum Support Functions</title>
6796 For enum types (described in <xref linkend="datatype-enum">),
6797 there are several functions that allow cleaner programming without
6798 hard-coding particular values of an enum type.
6799 These are listed in <xref linkend="functions-enum-table">. The examples
6800 assume an enum type created as:
6803 CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple');
6808 <table id="functions-enum-table">
6809 <title>Enum Support Functions</title>
6813 <entry>Function</entry>
6814 <entry>Description</entry>
6815 <entry>Example</entry>
6816 <entry>Example Result</entry>
6821 <entry><literal>enum_first(anyenum)</literal></entry>
6822 <entry>Returns the first value of the input enum type</entry>
6823 <entry><literal>enum_first(null::rainbow)</literal></entry>
6824 <entry><literal>red</literal></entry>
6827 <entry><literal>enum_last(anyenum)</literal></entry>
6828 <entry>Returns the last value of the input enum type</entry>
6829 <entry><literal>enum_last(null::rainbow)</literal></entry>
6830 <entry><literal>purple</literal></entry>
6833 <entry><literal>enum_range(anyenum)</literal></entry>
6834 <entry>Returns all values of the input enum type in an ordered array</entry>
6835 <entry><literal>enum_range(null::rainbow)</literal></entry>
6836 <entry><literal>{red,orange,yellow,green,blue,purple}</literal></entry>
6839 <entry morerows="2"><literal>enum_range(anyenum, anyenum)</literal></entry>
6840 <entry morerows="2">
6841 Returns the range between the two given enum values, as an ordered
6842 array. The values must be from the same enum type. If the first
6843 parameter is null, the result will start with the first value of
6845 If the second parameter is null, the result will end with the last
6846 value of the enum type.
6848 <entry><literal>enum_range('orange'::rainbow, 'green'::rainbow)</literal></entry>
6849 <entry><literal>{orange,yellow,green}</literal></entry>
6852 <entry><literal>enum_range(NULL, 'green'::rainbow)</literal></entry>
6853 <entry><literal>{red,orange,yellow,green}</literal></entry>
6856 <entry><literal>enum_range('orange'::rainbow, NULL)</literal></entry>
6857 <entry><literal>{orange,yellow,green,blue,purple}</literal></entry>
6864 Notice that except for the two-argument form of <function>enum_range</>,
6865 these functions disregard the specific value passed to them; they care
6866 only about its declared data type. Either null or a specific value of
6867 the type can be passed, with the same result. It is more common to
6868 apply these functions to a table column or function argument than to
6869 a hardwired type name as suggested by the examples.
6873 <sect1 id="functions-geometry">
6874 <title>Geometric Functions and Operators</title>
6877 The geometric types <type>point</type>, <type>box</type>,
6878 <type>lseg</type>, <type>line</type>, <type>path</type>,
6879 <type>polygon</type>, and <type>circle</type> have a large set of
6880 native support functions and operators, shown in <xref
6881 linkend="functions-geometry-op-table">, <xref
6882 linkend="functions-geometry-func-table">, and <xref
6883 linkend="functions-geometry-conv-table">.
6888 Note that the <quote>same as</> operator, <literal>~=</>, represents
6889 the usual notion of equality for the <type>point</type>,
6890 <type>box</type>, <type>polygon</type>, and <type>circle</type> types.
6891 Some of these types also have an <literal>=</> operator, but
6892 <literal>=</> compares
6893 for equal <emphasis>areas</> only. The other scalar comparison operators
6894 (<literal><=</> and so on) likewise compare areas for these types.
6898 <table id="functions-geometry-op-table">
6899 <title>Geometric Operators</title>
6903 <entry>Operator</entry>
6904 <entry>Description</entry>
6905 <entry>Example</entry>
6910 <entry> <literal>+</literal> </entry>
6911 <entry>Translation</entry>
6912 <entry><literal>box '((0,0),(1,1))' + point '(2.0,0)'</literal></entry>
6915 <entry> <literal>-</literal> </entry>
6916 <entry>Translation</entry>
6917 <entry><literal>box '((0,0),(1,1))' - point '(2.0,0)'</literal></entry>
6920 <entry> <literal>*</literal> </entry>
6921 <entry>Scaling/rotation</entry>
6922 <entry><literal>box '((0,0),(1,1))' * point '(2.0,0)'</literal></entry>
6925 <entry> <literal>/</literal> </entry>
6926 <entry>Scaling/rotation</entry>
6927 <entry><literal>box '((0,0),(2,2))' / point '(2.0,0)'</literal></entry>
6930 <entry> <literal>#</literal> </entry>
6931 <entry>Point or box of intersection</entry>
6932 <entry><literal>'((1,-1),(-1,1))' # '((1,1),(-1,-1))'</literal></entry>
6935 <entry> <literal>#</literal> </entry>
6936 <entry>Number of points in path or polygon</entry>
6937 <entry><literal># '((1,0),(0,1),(-1,0))'</literal></entry>
6940 <entry> <literal>@-@</literal> </entry>
6941 <entry>Length or circumference</entry>
6942 <entry><literal>@-@ path '((0,0),(1,0))'</literal></entry>
6945 <entry> <literal>@@</literal> </entry>
6946 <entry>Center</entry>
6947 <entry><literal>@@ circle '((0,0),10)'</literal></entry>
6950 <entry> <literal>##</literal> </entry>
6951 <entry>Closest point to first operand on second operand</entry>
6952 <entry><literal>point '(0,0)' ## lseg '((2,0),(0,2))'</literal></entry>
6955 <entry> <literal><-></literal> </entry>
6956 <entry>Distance between</entry>
6957 <entry><literal>circle '((0,0),1)' <-> circle '((5,0),1)'</literal></entry>
6960 <entry> <literal>&&</literal> </entry>
6961 <entry>Overlaps?</entry>
6962 <entry><literal>box '((0,0),(1,1))' && box '((0,0),(2,2))'</literal></entry>
6965 <entry> <literal><<</literal> </entry>
6966 <entry>Is strictly left of?</entry>
6967 <entry><literal>circle '((0,0),1)' << circle '((5,0),1)'</literal></entry>
6970 <entry> <literal>>></literal> </entry>
6971 <entry>Is strictly right of?</entry>
6972 <entry><literal>circle '((5,0),1)' >> circle '((0,0),1)'</literal></entry>
6975 <entry> <literal>&<</literal> </entry>
6976 <entry>Does not extend to the right of?</entry>
6977 <entry><literal>box '((0,0),(1,1))' &< box '((0,0),(2,2))'</literal></entry>
6980 <entry> <literal>&></literal> </entry>
6981 <entry>Does not extend to the left of?</entry>
6982 <entry><literal>box '((0,0),(3,3))' &> box '((0,0),(2,2))'</literal></entry>
6985 <entry> <literal><<|</literal> </entry>
6986 <entry>Is strictly below?</entry>
6987 <entry><literal>box '((0,0),(3,3))' <<| box '((3,4),(5,5))'</literal></entry>
6990 <entry> <literal>|>></literal> </entry>
6991 <entry>Is strictly above?</entry>
6992 <entry><literal>box '((3,4),(5,5))' |>> box '((0,0),(3,3))'</literal></entry>
6995 <entry> <literal>&<|</literal> </entry>
6996 <entry>Does not extend above?</entry>
6997 <entry><literal>box '((0,0),(1,1))' &<| box '((0,0),(2,2))'</literal></entry>
7000 <entry> <literal>|&></literal> </entry>
7001 <entry>Does not extend below?</entry>
7002 <entry><literal>box '((0,0),(3,3))' |&> box '((0,0),(2,2))'</literal></entry>
7005 <entry> <literal><^</literal> </entry>
7006 <entry>Is below (allows touching)?</entry>
7007 <entry><literal>circle '((0,0),1)' <^ circle '((0,5),1)'</literal></entry>
7010 <entry> <literal>>^</literal> </entry>
7011 <entry>Is above (allows touching)?</entry>
7012 <entry><literal>circle '((0,5),1)' >^ circle '((0,0),1)'</literal></entry>
7015 <entry> <literal>?#</literal> </entry>
7016 <entry>Intersects?</entry>
7017 <entry><literal>lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))'</literal></entry>
7020 <entry> <literal>?-</literal> </entry>
7021 <entry>Is horizontal?</entry>
7022 <entry><literal>?- lseg '((-1,0),(1,0))'</literal></entry>
7025 <entry> <literal>?-</literal> </entry>
7026 <entry>Are horizontally aligned?</entry>
7027 <entry><literal>point '(1,0)' ?- point '(0,0)'</literal></entry>
7030 <entry> <literal>?|</literal> </entry>
7031 <entry>Is vertical?</entry>
7032 <entry><literal>?| lseg '((-1,0),(1,0))'</literal></entry>
7035 <entry> <literal>?|</literal> </entry>
7036 <entry>Are vertically aligned?</entry>
7037 <entry><literal>point '(0,1)' ?| point '(0,0)'</literal></entry>
7040 <entry> <literal>?-|</literal> </entry>
7041 <entry>Is perpendicular?</entry>
7042 <entry><literal>lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))'</literal></entry>
7045 <entry> <literal>?||</literal> </entry>
7046 <entry>Are parallel?</entry>
7047 <entry><literal>lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))'</literal></entry>
7050 <entry> <literal>@></literal> </entry>
7051 <entry>Contains?</entry>
7052 <entry><literal>circle '((0,0),2)' @> point '(1,1)'</literal></entry>
7055 <entry> <literal><@</literal> </entry>
7056 <entry>Contained in or on?</entry>
7057 <entry><literal>point '(1,1)' <@ circle '((0,0),2)'</literal></entry>
7060 <entry> <literal>~=</literal> </entry>
7061 <entry>Same as?</entry>
7062 <entry><literal>polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'</literal></entry>
7070 Before <productname>PostgreSQL</productname> 8.2, the containment
7071 operators <literal>@></> and <literal><@</> were respectively
7072 called <literal>~</> and <literal>@</>. These names are still
7073 available, but are deprecated and will eventually be retired.
7078 <primary>area</primary>
7081 <primary>center</primary>
7084 <primary>diameter</primary>
7087 <primary>height</primary>
7090 <primary>isclosed</primary>
7093 <primary>isopen</primary>
7096 <primary>length</primary>
7099 <primary>npoints</primary>
7102 <primary>pclose</primary>
7105 <primary>popen</primary>
7108 <primary>radius</primary>
7111 <primary>width</primary>
7114 <table id="functions-geometry-func-table">
7115 <title>Geometric Functions</title>
7119 <entry>Function</entry>
7120 <entry>Return Type</entry>
7121 <entry>Description</entry>
7122 <entry>Example</entry>
7127 <entry><literal><function>area</function>(<replaceable>object</>)</literal></entry>
7128 <entry><type>double precision</type></entry>
7130 <entry><literal>area(box '((0,0),(1,1))')</literal></entry>
7133 <entry><literal><function>center</function>(<replaceable>object</>)</literal></entry>
7134 <entry><type>point</type></entry>
7135 <entry>center</entry>
7136 <entry><literal>center(box '((0,0),(1,2))')</literal></entry>
7139 <entry><literal><function>diameter</function>(<type>circle</>)</literal></entry>
7140 <entry><type>double precision</type></entry>
7141 <entry>diameter of circle</entry>
7142 <entry><literal>diameter(circle '((0,0),2.0)')</literal></entry>
7145 <entry><literal><function>height</function>(<type>box</>)</literal></entry>
7146 <entry><type>double precision</type></entry>
7147 <entry>vertical size of box</entry>
7148 <entry><literal>height(box '((0,0),(1,1))')</literal></entry>
7151 <entry><literal><function>isclosed</function>(<type>path</>)</literal></entry>
7152 <entry><type>boolean</type></entry>
7153 <entry>a closed path?</entry>
7154 <entry><literal>isclosed(path '((0,0),(1,1),(2,0))')</literal></entry>
7157 <entry><literal><function>isopen</function>(<type>path</>)</literal></entry>
7158 <entry><type>boolean</type></entry>
7159 <entry>an open path?</entry>
7160 <entry><literal>isopen(path '[(0,0),(1,1),(2,0)]')</literal></entry>
7163 <entry><literal><function>length</function>(<replaceable>object</>)</literal></entry>
7164 <entry><type>double precision</type></entry>
7165 <entry>length</entry>
7166 <entry><literal>length(path '((-1,0),(1,0))')</literal></entry>
7169 <entry><literal><function>npoints</function>(<type>path</>)</literal></entry>
7170 <entry><type>int</type></entry>
7171 <entry>number of points</entry>
7172 <entry><literal>npoints(path '[(0,0),(1,1),(2,0)]')</literal></entry>
7175 <entry><literal><function>npoints</function>(<type>polygon</>)</literal></entry>
7176 <entry><type>int</type></entry>
7177 <entry>number of points</entry>
7178 <entry><literal>npoints(polygon '((1,1),(0,0))')</literal></entry>
7181 <entry><literal><function>pclose</function>(<type>path</>)</literal></entry>
7182 <entry><type>path</type></entry>
7183 <entry>convert path to closed</entry>
7184 <entry><literal>pclose(path '[(0,0),(1,1),(2,0)]')</literal></entry>
7187 <!-- Not defined by this name. Implements the intersection operator '#' -->
7189 <entry><literal><function>point</function>(<type>lseg</>, <type>lseg</>)</literal></entry>
7190 <entry><type>point</type></entry>
7191 <entry>intersection</entry>
7192 <entry><literal>point(lseg '((-1,0),(1,0))',lseg '((-2,-2),(2,2))')</literal></entry>
7196 <entry><literal><function>popen</function>(<type>path</>)</literal></entry>
7197 <entry><type>path</type></entry>
7198 <entry>convert path to open</entry>
7199 <entry><literal>popen(path '((0,0),(1,1),(2,0))')</literal></entry>
7202 <entry><literal><function>radius</function>(<type>circle</type>)</literal></entry>
7203 <entry><type>double precision</type></entry>
7204 <entry>radius of circle</entry>
7205 <entry><literal>radius(circle '((0,0),2.0)')</literal></entry>
7208 <entry><literal><function>width</function>(<type>box</>)</literal></entry>
7209 <entry><type>double precision</type></entry>
7210 <entry>horizontal size of box</entry>
7211 <entry><literal>width(box '((0,0),(1,1))')</literal></entry>
7217 <table id="functions-geometry-conv-table">
7218 <title>Geometric Type Conversion Functions</title>
7222 <entry>Function</entry>
7223 <entry>Return Type</entry>
7224 <entry>Description</entry>
7225 <entry>Example</entry>
7230 <entry><literal><function>box</function>(<type>circle</type>)</literal></entry>
7231 <entry><type>box</type></entry>
7232 <entry>circle to box</entry>
7233 <entry><literal>box(circle '((0,0),2.0)')</literal></entry>
7236 <entry><literal><function>box</function>(<type>point</type>, <type>point</type>)</literal></entry>
7237 <entry><type>box</type></entry>
7238 <entry>points to box</entry>
7239 <entry><literal>box(point '(0,0)', point '(1,1)')</literal></entry>
7242 <entry><literal><function>box</function>(<type>polygon</type>)</literal></entry>
7243 <entry><type>box</type></entry>
7244 <entry>polygon to box</entry>
7245 <entry><literal>box(polygon '((0,0),(1,1),(2,0))')</literal></entry>
7248 <entry><literal><function>circle</function>(<type>box</type>)</literal></entry>
7249 <entry><type>circle</type></entry>
7250 <entry>box to circle</entry>
7251 <entry><literal>circle(box '((0,0),(1,1))')</literal></entry>
7254 <entry><literal><function>circle</function>(<type>point</type>, <type>double precision</type>)</literal></entry>
7255 <entry><type>circle</type></entry>
7256 <entry>center and radius to circle</entry>
7257 <entry><literal>circle(point '(0,0)', 2.0)</literal></entry>
7260 <entry><literal><function>circle</function>(<type>polygon</type>)</literal></entry>
7261 <entry><type>circle</type></entry>
7262 <entry>polygon to circle</entry>
7263 <entry><literal>circle(polygon '((0,0),(1,1),(2,0))')</literal></entry>
7266 <entry><literal><function>lseg</function>(<type>box</type>)</literal></entry>
7267 <entry><type>lseg</type></entry>
7268 <entry>box diagonal to line segment</entry>
7269 <entry><literal>lseg(box '((-1,0),(1,0))')</literal></entry>
7272 <entry><literal><function>lseg</function>(<type>point</type>, <type>point</type>)</literal></entry>
7273 <entry><type>lseg</type></entry>
7274 <entry>points to line segment</entry>
7275 <entry><literal>lseg(point '(-1,0)', point '(1,0)')</literal></entry>
7278 <entry><literal><function>path</function>(<type>polygon</type>)</literal></entry>
7279 <entry><type>point</type></entry>
7280 <entry>polygon to path</entry>
7281 <entry><literal>path(polygon '((0,0),(1,1),(2,0))')</literal></entry>
7284 <entry><literal><function>point</function>(<type>double
7285 precision</type>, <type>double precision</type>)</literal></entry>
7286 <entry><type>point</type></entry>
7287 <entry>construct point</entry>
7288 <entry><literal>point(23.4, -44.5)</literal></entry>
7291 <entry><literal><function>point</function>(<type>box</type>)</literal></entry>
7292 <entry><type>point</type></entry>
7293 <entry>center of box</entry>
7294 <entry><literal>point(box '((-1,0),(1,0))')</literal></entry>
7297 <entry><literal><function>point</function>(<type>circle</type>)</literal></entry>
7298 <entry><type>point</type></entry>
7299 <entry>center of circle</entry>
7300 <entry><literal>point(circle '((0,0),2.0)')</literal></entry>
7303 <entry><literal><function>point</function>(<type>lseg</type>)</literal></entry>
7304 <entry><type>point</type></entry>
7305 <entry>center of line segment</entry>
7306 <entry><literal>point(lseg '((-1,0),(1,0))')</literal></entry>
7309 <entry><literal><function>point</function>(<type>polygon</type>)</literal></entry>
7310 <entry><type>point</type></entry>
7311 <entry>center of polygon</entry>
7312 <entry><literal>point(polygon '((0,0),(1,1),(2,0))')</literal></entry>
7315 <entry><literal><function>polygon</function>(<type>box</type>)</literal></entry>
7316 <entry><type>polygon</type></entry>
7317 <entry>box to 4-point polygon</entry>
7318 <entry><literal>polygon(box '((0,0),(1,1))')</literal></entry>
7321 <entry><literal><function>polygon</function>(<type>circle</type>)</literal></entry>
7322 <entry><type>polygon</type></entry>
7323 <entry>circle to 12-point polygon</entry>
7324 <entry><literal>polygon(circle '((0,0),2.0)')</literal></entry>
7327 <entry><literal><function>polygon</function>(<replaceable class="parameter">npts</replaceable>, <type>circle</type>)</literal></entry>
7328 <entry><type>polygon</type></entry>
7329 <entry>circle to <replaceable class="parameter">npts</replaceable>-point polygon</entry>
7330 <entry><literal>polygon(12, circle '((0,0),2.0)')</literal></entry>
7333 <entry><literal><function>polygon</function>(<type>path</type>)</literal></entry>
7334 <entry><type>polygon</type></entry>
7335 <entry>path to polygon</entry>
7336 <entry><literal>polygon(path '((0,0),(1,1),(2,0))')</literal></entry>
7343 It is possible to access the two component numbers of a <type>point</>
7344 as though it were an array with indices 0 and 1. For example, if
7345 <literal>t.p</> is a <type>point</> column then
7346 <literal>SELECT p[0] FROM t</> retrieves the X coordinate and
7347 <literal>UPDATE t SET p[1] = ...</> changes the Y coordinate.
7348 In the same way, a value of type <type>box</> or <type>lseg</> can be treated
7349 as an array of two <type>point</> values.
7353 The <function>area</function> function works for the types
7354 <type>box</type>, <type>circle</type>, and <type>path</type>.
7355 The <function>area</function> function only works on the
7356 <type>path</type> data type if the points in the
7357 <type>path</type> are non-intersecting. For example, the
7359 <literal>'((0,0),(0,1),(2,1),(2,2),(1,2),(1,0),(0,0))'::PATH</literal>
7360 won't work, however, the following visually identical
7362 <literal>'((0,0),(0,1),(1,1),(1,2),(2,2),(2,1),(1,1),(1,0),(0,0))'::PATH</literal>
7363 will work. If the concept of an intersecting versus
7364 non-intersecting <type>path</type> is confusing, draw both of the
7365 above <type>path</type>s side by side on a piece of graph paper.
7371 <sect1 id="functions-net">
7372 <title>Network Address Functions and Operators</title>
7375 <xref linkend="cidr-inet-operators-table"> shows the operators
7376 available for the <type>cidr</type> and <type>inet</type> types.
7377 The operators <literal><<</literal>,
7378 <literal><<=</literal>, <literal>>></literal>, and
7379 <literal>>>=</literal> test for subnet inclusion. They
7380 consider only the network parts of the two addresses, ignoring any
7381 host part, and determine whether one network part is identical to
7382 or a subnet of the other.
7385 <table id="cidr-inet-operators-table">
7386 <title><type>cidr</type> and <type>inet</type> Operators</title>
7390 <entry>Operator</entry>
7391 <entry>Description</entry>
7392 <entry>Example</entry>
7397 <entry> <literal><</literal> </entry>
7398 <entry>is less than</entry>
7399 <entry><literal>inet '192.168.1.5' < inet '192.168.1.6'</literal></entry>
7402 <entry> <literal><=</literal> </entry>
7403 <entry>is less than or equal</entry>
7404 <entry><literal>inet '192.168.1.5' <= inet '192.168.1.5'</literal></entry>
7407 <entry> <literal>=</literal> </entry>
7408 <entry>equals</entry>
7409 <entry><literal>inet '192.168.1.5' = inet '192.168.1.5'</literal></entry>
7412 <entry> <literal>>=</literal> </entry>
7413 <entry>is greater or equal</entry>
7414 <entry><literal>inet '192.168.1.5' >= inet '192.168.1.5'</literal></entry>
7417 <entry> <literal>></literal> </entry>
7418 <entry>is greater than</entry>
7419 <entry><literal>inet '192.168.1.5' > inet '192.168.1.4'</literal></entry>
7422 <entry> <literal><></literal> </entry>
7423 <entry>is not equal</entry>
7424 <entry><literal>inet '192.168.1.5' <> inet '192.168.1.4'</literal></entry>
7427 <entry> <literal><<</literal> </entry>
7428 <entry>is contained within</entry>
7429 <entry><literal>inet '192.168.1.5' << inet '192.168.1/24'</literal></entry>
7432 <entry> <literal><<=</literal> </entry>
7433 <entry>is contained within or equals</entry>
7434 <entry><literal>inet '192.168.1/24' <<= inet '192.168.1/24'</literal></entry>
7437 <entry> <literal>>></literal> </entry>
7438 <entry>contains</entry>
7439 <entry><literal>inet '192.168.1/24' >> inet '192.168.1.5'</literal></entry>
7442 <entry> <literal>>>=</literal> </entry>
7443 <entry>contains or equals</entry>
7444 <entry><literal>inet '192.168.1/24' >>= inet '192.168.1/24'</literal></entry>
7447 <entry> <literal>~</literal> </entry>
7448 <entry>bitwise NOT</entry>
7449 <entry><literal>~ inet '192.168.1.6'</literal></entry>
7452 <entry> <literal>&</literal> </entry>
7453 <entry>bitwise AND</entry>
7454 <entry><literal>inet '192.168.1.6' & inet '0.0.0.255'</literal></entry>
7457 <entry> <literal>|</literal> </entry>
7458 <entry>bitwise OR</entry>
7459 <entry><literal>inet '192.168.1.6' | inet '0.0.0.255'</literal></entry>
7462 <entry> <literal>+</literal> </entry>
7463 <entry>addition</entry>
7464 <entry><literal>inet '192.168.1.6' + 25</literal></entry>
7467 <entry> <literal>-</literal> </entry>
7468 <entry>subtraction</entry>
7469 <entry><literal>inet '192.168.1.43' - 36</literal></entry>
7472 <entry> <literal>-</literal> </entry>
7473 <entry>subtraction</entry>
7474 <entry><literal>inet '192.168.1.43' - inet '192.168.1.19'</literal></entry>
7481 <xref linkend="cidr-inet-functions-table"> shows the functions
7482 available for use with the <type>cidr</type> and <type>inet</type>
7483 types. The <function>host</function>,
7484 <function>text</function>, and <function>abbrev</function>
7485 functions are primarily intended to offer alternative display
7489 <table id="cidr-inet-functions-table">
7490 <title><type>cidr</type> and <type>inet</type> Functions</title>
7494 <entry>Function</entry>
7495 <entry>Return Type</entry>
7496 <entry>Description</entry>
7497 <entry>Example</entry>
7498 <entry>Result</entry>
7503 <entry><literal><function>abbrev</function>(<type>inet</type>)</literal></entry>
7504 <entry><type>text</type></entry>
7505 <entry>abbreviated display format as text</entry>
7506 <entry><literal>abbrev(inet '10.1.0.0/16')</literal></entry>
7507 <entry><literal>10.1.0.0/16</literal></entry>
7510 <entry><literal><function>abbrev</function>(<type>cidr</type>)</literal></entry>
7511 <entry><type>text</type></entry>
7512 <entry>abbreviated display format as text</entry>
7513 <entry><literal>abbrev(cidr '10.1.0.0/16')</literal></entry>
7514 <entry><literal>10.1/16</literal></entry>
7517 <entry><literal><function>broadcast</function>(<type>inet</type>)</literal></entry>
7518 <entry><type>inet</type></entry>
7519 <entry>broadcast address for network</entry>
7520 <entry><literal>broadcast('192.168.1.5/24')</literal></entry>
7521 <entry><literal>192.168.1.255/24</literal></entry>
7524 <entry><literal><function>family</function>(<type>inet</type>)</literal></entry>
7525 <entry><type>int</type></entry>
7526 <entry>extract family of address; <literal>4</literal> for IPv4,
7527 <literal>6</literal> for IPv6</entry>
7528 <entry><literal>family('::1')</literal></entry>
7529 <entry><literal>6</literal></entry>
7532 <entry><literal><function>host</function>(<type>inet</type>)</literal></entry>
7533 <entry><type>text</type></entry>
7534 <entry>extract IP address as text</entry>
7535 <entry><literal>host('192.168.1.5/24')</literal></entry>
7536 <entry><literal>192.168.1.5</literal></entry>
7539 <entry><literal><function>hostmask</function>(<type>inet</type>)</literal></entry>
7540 <entry><type>inet</type></entry>
7541 <entry>construct host mask for network</entry>
7542 <entry><literal>hostmask('192.168.23.20/30')</literal></entry>
7543 <entry><literal>0.0.0.3</literal></entry>
7546 <entry><literal><function>masklen</function>(<type>inet</type>)</literal></entry>
7547 <entry><type>int</type></entry>
7548 <entry>extract netmask length</entry>
7549 <entry><literal>masklen('192.168.1.5/24')</literal></entry>
7550 <entry><literal>24</literal></entry>
7553 <entry><literal><function>netmask</function>(<type>inet</type>)</literal></entry>
7554 <entry><type>inet</type></entry>
7555 <entry>construct netmask for network</entry>
7556 <entry><literal>netmask('192.168.1.5/24')</literal></entry>
7557 <entry><literal>255.255.255.0</literal></entry>
7560 <entry><literal><function>network</function>(<type>inet</type>)</literal></entry>
7561 <entry><type>cidr</type></entry>
7562 <entry>extract network part of address</entry>
7563 <entry><literal>network('192.168.1.5/24')</literal></entry>
7564 <entry><literal>192.168.1.0/24</literal></entry>
7567 <entry><literal><function>set_masklen</function>(<type>inet</type>, <type>int</type>)</literal></entry>
7568 <entry><type>inet</type></entry>
7569 <entry>set netmask length for <type>inet</type> value</entry>
7570 <entry><literal>set_masklen('192.168.1.5/24', 16)</literal></entry>
7571 <entry><literal>192.168.1.5/16</literal></entry>
7574 <entry><literal><function>set_masklen</function>(<type>cidr</type>, <type>int</type>)</literal></entry>
7575 <entry><type>cidr</type></entry>
7576 <entry>set netmask length for <type>cidr</type> value</entry>
7577 <entry><literal>set_masklen('192.168.1.0/24'::cidr, 16)</literal></entry>
7578 <entry><literal>192.168.0.0/16</literal></entry>
7581 <entry><literal><function>text</function>(<type>inet</type>)</literal></entry>
7582 <entry><type>text</type></entry>
7583 <entry>extract IP address and netmask length as text</entry>
7584 <entry><literal>text(inet '192.168.1.5')</literal></entry>
7585 <entry><literal>192.168.1.5/32</literal></entry>
7592 Any <type>cidr</> value can be cast to <type>inet</> implicitly
7593 or explicitly; therefore, the functions shown above as operating on
7594 <type>inet</> also work on <type>cidr</> values. (Where there are
7595 separate functions for <type>inet</> and <type>cidr</>, it is because
7596 the behavior should be different for the two cases.)
7597 Also, it is permitted to cast an <type>inet</> value to <type>cidr</>.
7598 When this is done, any bits to the right of the netmask are silently zeroed
7599 to create a valid <type>cidr</> value.
7601 you can cast a text value to <type>inet</> or <type>cidr</>
7602 using normal casting syntax: for example,
7603 <literal>inet(<replaceable>expression</>)</literal> or
7604 <literal><replaceable>colname</>::cidr</literal>.
7608 <xref linkend="macaddr-functions-table"> shows the functions
7609 available for use with the <type>macaddr</type> type. The function
7610 <literal><function>trunc</function>(<type>macaddr</type>)</literal> returns a MAC
7611 address with the last 3 bytes set to zero. This can be used to
7612 associate the remaining prefix with a manufacturer.
7615 <table id="macaddr-functions-table">
7616 <title><type>macaddr</type> Functions</title>
7620 <entry>Function</entry>
7621 <entry>Return Type</entry>
7622 <entry>Description</entry>
7623 <entry>Example</entry>
7624 <entry>Result</entry>
7629 <entry><literal><function>trunc</function>(<type>macaddr</type>)</literal></entry>
7630 <entry><type>macaddr</type></entry>
7631 <entry>set last 3 bytes to zero</entry>
7632 <entry><literal>trunc(macaddr '12:34:56:78:90:ab')</literal></entry>
7633 <entry><literal>12:34:56:00:00:00</literal></entry>
7640 The <type>macaddr</type> type also supports the standard relational
7641 operators (<literal>></literal>, <literal><=</literal>, etc.) for
7642 lexicographical ordering.
7648 <sect1 id="functions-textsearch">
7649 <title>Text Search Functions and Operators</title>
7651 <indexterm zone="datatype-textsearch">
7652 <primary>full text search</primary>
7653 <secondary>functions and operators</secondary>
7656 <indexterm zone="datatype-textsearch">
7657 <primary>text search</primary>
7658 <secondary>functions and operators</secondary>
7662 <xref linkend="textsearch-operators-table">,
7663 <xref linkend="textsearch-functions-table"> and
7664 <xref linkend="textsearch-functions-debug-table">
7665 summarize the functions and operators that are provided
7666 for full text searching. See <xref linkend="textsearch"> for a detailed
7667 explanation of <productname>PostgreSQL</productname>'s text search
7671 <table id="textsearch-operators-table">
7672 <title>Text Search Operators</title>
7676 <entry>Operator</entry>
7677 <entry>Description</entry>
7678 <entry>Example</entry>
7679 <entry>Result</entry>
7684 <entry> <literal>@@</literal> </entry>
7685 <entry><type>tsvector</> matches <type>tsquery</> ?</entry>
7686 <entry><literal>to_tsvector('fat cats ate rats') @@ to_tsquery('cat & rat')</literal></entry>
7687 <entry><literal>t</literal></entry>
7690 <entry> <literal>@@@</literal> </entry>
7691 <entry>same as <literal>@@</>, but see <xref linkend="textsearch-indexes"></entry>
7692 <entry><literal>to_tsvector('fat cats ate rats') @@@ to_tsquery('cat & rat')</literal></entry>
7693 <entry><literal>t</literal></entry>
7696 <entry> <literal>||</literal> </entry>
7697 <entry>concatenate <type>tsvector</>s</entry>
7698 <entry><literal>'a:1 b:2'::tsvector || 'c:1 d:2 b:3'::tsvector</literal></entry>
7699 <entry><literal>'a':1 'b':2,5 'c':3 'd':4</literal></entry>
7702 <entry> <literal>&&</literal> </entry>
7703 <entry>AND <type>tsquery</>s together</entry>
7704 <entry><literal>'fat | rat'::tsquery && 'cat'::tsquery</literal></entry>
7705 <entry><literal>( 'fat' | 'rat' ) & 'cat'</literal></entry>
7708 <entry> <literal>||</literal> </entry>
7709 <entry>OR <type>tsquery</>s together</entry>
7710 <entry><literal>'fat | rat'::tsquery || 'cat'::tsquery</literal></entry>
7711 <entry><literal>( 'fat' | 'rat' ) | 'cat'</literal></entry>
7714 <entry> <literal>!!</literal> </entry>
7715 <entry>negate a <type>tsquery</></entry>
7716 <entry><literal>!! 'cat'::tsquery</literal></entry>
7717 <entry><literal>!'cat'</literal></entry>
7720 <entry> <literal>@></literal> </entry>
7721 <entry><type>tsquery</> contains another ?</entry>
7722 <entry><literal>'cat'::tsquery @> 'cat & rat'::tsquery</literal></entry>
7723 <entry><literal>f</literal></entry>
7726 <entry> <literal><@</literal> </entry>
7727 <entry><type>tsquery</> is contained in ?</entry>
7728 <entry><literal>'cat'::tsquery <@ 'cat & rat'::tsquery</literal></entry>
7729 <entry><literal>t</literal></entry>
7737 The <type>tsquery</> containment operators consider only the lexemes
7738 listed in the two queries, ignoring the combining operators.
7743 In addition to the operators shown in the table, the ordinary B-tree
7744 comparison operators (<literal>=</>, <literal><</>, etc) are defined
7745 for types <type>tsvector</> and <type>tsquery</>. These are not very
7746 useful for text searching but allow, for example, unique indexes to be
7747 built on columns of these types.
7750 <table id="textsearch-functions-table">
7751 <title>Text Search Functions</title>
7755 <entry>Function</entry>
7756 <entry>Return Type</entry>
7757 <entry>Description</entry>
7758 <entry>Example</entry>
7759 <entry>Result</entry>
7764 <entry><literal><function>to_tsvector</function>(<optional> <replaceable class="PARAMETER">config</> <type>regconfig</> , </optional> <replaceable class="PARAMETER">document</> <type>text</type>)</literal></entry>
7765 <entry><type>tsvector</type></entry>
7766 <entry>reduce document text to <type>tsvector</></entry>
7767 <entry><literal>to_tsvector('english', 'The Fat Rats')</literal></entry>
7768 <entry><literal>'fat':2 'rat':3</literal></entry>
7771 <entry><literal><function>length</function>(<type>tsvector</>)</literal></entry>
7772 <entry><type>integer</type></entry>
7773 <entry>number of lexemes in <type>tsvector</></entry>
7774 <entry><literal>length('fat:2,4 cat:3 rat:5A'::tsvector)</literal></entry>
7775 <entry><literal>3</literal></entry>
7778 <entry><literal><function>setweight</function>(<type>tsvector</>, <type>"char"</>)</literal></entry>
7779 <entry><type>tsvector</type></entry>
7780 <entry>assign weight to each element of <type>tsvector</></entry>
7781 <entry><literal>setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A')</literal></entry>
7782 <entry><literal>'cat':3A 'fat':2A,4A 'rat':5A</literal></entry>
7785 <entry><literal><function>strip</function>(<type>tsvector</>)</literal></entry>
7786 <entry><type>tsvector</type></entry>
7787 <entry>remove positions and weights from <type>tsvector</></entry>
7788 <entry><literal>strip('fat:2,4 cat:3 rat:5A'::tsvector)</literal></entry>
7789 <entry><literal>'cat' 'fat' 'rat'</literal></entry>
7792 <entry><literal><function>to_tsquery</function>(<optional> <replaceable class="PARAMETER">config</> <type>regconfig</> , </optional> <replaceable class="PARAMETER">query</> <type>text</type>)</literal></entry>
7793 <entry><type>tsquery</type></entry>
7794 <entry>normalize words and convert to <type>tsquery</></entry>
7795 <entry><literal>to_tsquery('english', 'The & Fat & Rats')</literal></entry>
7796 <entry><literal>'fat' & 'rat'</literal></entry>
7799 <entry><literal><function>plainto_tsquery</function>(<optional> <replaceable class="PARAMETER">config</> <type>regconfig</> , </optional> <replaceable class="PARAMETER">query</> <type>text</type>)</literal></entry>
7800 <entry><type>tsquery</type></entry>
7801 <entry>produce <type>tsquery</> ignoring punctuation</entry>
7802 <entry><literal>plainto_tsquery('english', 'The Fat Rats')</literal></entry>
7803 <entry><literal>'fat' & 'rat'</literal></entry>
7806 <entry><literal><function>numnode</function>(<type>tsquery</>)</literal></entry>
7807 <entry><type>integer</type></entry>
7808 <entry>number of lexemes plus operators in <type>tsquery</></entry>
7809 <entry><literal> numnode('(fat & rat) | cat'::tsquery)</literal></entry>
7810 <entry><literal>5</literal></entry>
7813 <entry><literal><function>querytree</function>(<replaceable class="PARAMETER">query</replaceable> <type>tsquery</>)</literal></entry>
7814 <entry><type>text</type></entry>
7815 <entry>get indexable part of a <type>tsquery</></entry>
7816 <entry><literal>querytree('foo & ! bar'::tsquery)</literal></entry>
7817 <entry><literal>'foo'</literal></entry>
7820 <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>
7821 <entry><type>float4</type></entry>
7822 <entry>rank document for query</entry>
7823 <entry><literal>ts_rank(textsearch, query)</literal></entry>
7824 <entry><literal>0.818</literal></entry>
7827 <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>
7828 <entry><type>float4</type></entry>
7829 <entry>rank document for query using cover density</entry>
7830 <entry><literal>ts_rank_cd('{0.1, 0.2, 0.4, 1.0}', textsearch, query)</literal></entry>
7831 <entry><literal>2.01317</literal></entry>
7834 <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>
7835 <entry><type>text</type></entry>
7836 <entry>display a query match</entry>
7837 <entry><literal>ts_headline('x y z', 'z'::tsquery)</literal></entry>
7838 <entry><literal>x y <b>z</b></literal></entry>
7841 <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>
7842 <entry><type>tsquery</type></entry>
7843 <entry>replace target with substitute within query</entry>
7844 <entry><literal>ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'foo|bar'::tsquery)</literal></entry>
7845 <entry><literal>'b' & ( 'foo' | 'bar' )</literal></entry>
7848 <entry><literal><function>ts_rewrite</function>(<replaceable class="PARAMETER">query</replaceable> <type>tsquery</>, <replaceable class="PARAMETER">select</replaceable> <type>text</>)</literal></entry>
7849 <entry><type>tsquery</type></entry>
7850 <entry>replace using targets and substitutes from a <command>SELECT</> command</entry>
7851 <entry><literal>SELECT ts_rewrite('a & b'::tsquery, 'SELECT t,s FROM aliases')</literal></entry>
7852 <entry><literal>'b' & ( 'foo' | 'bar' )</literal></entry>
7855 <entry><literal><function>get_current_ts_config</function>()</literal></entry>
7856 <entry><type>regconfig</type></entry>
7857 <entry>get default text search configuration</entry>
7858 <entry><literal>get_current_ts_config()</literal></entry>
7859 <entry><literal>english</literal></entry>
7862 <entry><literal><function>tsvector_update_trigger</function>()</literal></entry>
7863 <entry><type>trigger</type></entry>
7864 <entry>trigger function for automatic <type>tsvector</> column update</entry>
7865 <entry><literal>CREATE TRIGGER ... tsvector_update_trigger(tsvcol, 'pg_catalog.swedish', title, body)</literal></entry>
7866 <entry><literal></literal></entry>
7869 <entry><literal><function>tsvector_update_trigger_column</function>()</literal></entry>
7870 <entry><type>trigger</type></entry>
7871 <entry>trigger function for automatic <type>tsvector</> column update</entry>
7872 <entry><literal>CREATE TRIGGER ... tsvector_update_trigger_column(tsvcol, configcol, title, body)</literal></entry>
7873 <entry><literal></literal></entry>
7874 <entry><literal></literal></entry>
7882 All the text search functions that accept an optional <type>regconfig</>
7883 argument will use the configuration specified by
7884 <xref linkend="guc-default-text-search-config">
7885 when that argument is omitted.
7891 <xref linkend="textsearch-functions-debug-table">
7892 are listed separately because they are not usually used in everyday text
7893 searching operations. They are helpful for development and debugging
7894 of new text search configurations.
7897 <table id="textsearch-functions-debug-table">
7898 <title>Text Search Debugging Functions</title>
7902 <entry>Function</entry>
7903 <entry>Return Type</entry>
7904 <entry>Description</entry>
7905 <entry>Example</entry>
7906 <entry>Result</entry>
7911 <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>
7912 <entry><type>setof record</type></entry>
7913 <entry>test a configuration</entry>
7914 <entry><literal>ts_debug('english', 'The Brightest supernovaes')</literal></entry>
7915 <entry><literal>(asciiword,"Word, all ASCII",The,{english_stem},english_stem,{}) ...</literal></entry>
7918 <entry><literal><function>ts_lexize</function>(<replaceable class="PARAMETER">dict</replaceable> <type>regdictionary</>, <replaceable class="PARAMETER">token</replaceable> <type>text</>)</literal></entry>
7919 <entry><type>text[]</type></entry>
7920 <entry>test a dictionary</entry>
7921 <entry><literal>ts_lexize('english_stem', 'stars')</literal></entry>
7922 <entry><literal>{star}</literal></entry>
7925 <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>
7926 <entry><type>setof record</type></entry>
7927 <entry>test a parser</entry>
7928 <entry><literal>ts_parse('default', 'foo - bar')</literal></entry>
7929 <entry><literal>(1,foo) ...</literal></entry>
7932 <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>
7933 <entry><type>setof record</type></entry>
7934 <entry>test a parser</entry>
7935 <entry><literal>ts_parse(3722, 'foo - bar')</literal></entry>
7936 <entry><literal>(1,foo) ...</literal></entry>
7939 <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>
7940 <entry><type>setof record</type></entry>
7941 <entry>get token types defined by parser</entry>
7942 <entry><literal>ts_token_type('default')</literal></entry>
7943 <entry><literal>(1,asciiword,"Word, all ASCII") ...</literal></entry>
7946 <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>
7947 <entry><type>setof record</type></entry>
7948 <entry>get token types defined by parser</entry>
7949 <entry><literal>ts_token_type(3722)</literal></entry>
7950 <entry><literal>(1,asciiword,"Word, all ASCII") ...</literal></entry>
7953 <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>
7954 <entry><type>setof record</type></entry>
7955 <entry>get statistics of a <type>tsvector</> column</entry>
7956 <entry><literal>ts_stat('SELECT vector from apod')</literal></entry>
7957 <entry><literal>(foo,10,15) ...</literal></entry>
7966 <sect1 id="functions-xml">
7967 <title>XML Functions</title>
7970 The functions and function-like expressions described in this
7971 section operate on values of type <type>xml</type>. Check <xref
7972 linkend="datatype-xml"> for information about the <type>xml</type>
7973 type. The function-like expressions <function>xmlparse</function>
7974 and <function>xmlserialize</function> for converting to and from
7975 type <type>xml</type> are not repeated here. Use of many of these
7976 functions requires the installation to have been built
7977 with <command>configure --with-libxml</>.
7981 <title>Producing XML Content</title>
7984 A set of functions and function-like expressions are available for
7985 producing XML content from SQL data. As such, they are
7986 particularly suitable for formatting query results into XML
7987 documents for processing in client applications.
7991 <title><literal>xmlcomment</literal></title>
7994 <primary>xmlcomment</primary>
7998 <function>xmlcomment</function>(<replaceable>text</replaceable>)
8002 The function <function>xmlcomment</function> creates an XML value
8003 containing an XML comment with the specified text as content.
8004 The text cannot contain <literal>--</literal> or end with a
8005 <literal>-</literal> so that the resulting construct is a valid
8006 XML comment. If the argument is null, the result is null.
8012 SELECT xmlcomment('hello');
8022 <title><literal>xmlconcat</literal></title>
8025 <primary>xmlconcat</primary>
8029 <function>xmlconcat</function>(<replaceable>xml</replaceable><optional>, ...</optional>)
8033 The function <function>xmlconcat</function> concatenates a list
8034 of individual XML values to create a single value containing an
8035 XML content fragment. Null values are omitted; the result is
8036 only null if there are no nonnull arguments.
8042 SELECT xmlconcat('<abc/>', '<bar>foo</bar>');
8045 ----------------------
8046 <abc/><bar>foo</bar>
8051 XML declarations, if present, are combined as follows. If all
8052 argument values have the same XML version declaration, that
8053 version is used in the result, else no version is used. If all
8054 argument values have the standalone declaration value
8055 <quote>yes</quote>, then that value is used in the result. If
8056 all argument values have a standalone declaration value and at
8057 least one is <quote>no</quote>, then that is used in the result.
8058 Else the result will have no standalone declaration. If the
8059 result is determined to require a standalone declaration but no
8060 version declaration, a version declaration with version 1.0 will
8061 be used because XML requires an XML declaration to contain a
8062 version declaration. Encoding declarations are ignored and
8063 removed in all cases.
8069 SELECT xmlconcat('<?xml version="1.1"?><foo/>', '<?xml version="1.1" standalone="no"?><bar/>');
8072 -----------------------------------
8073 <?xml version="1.1"?><foo/><bar/>
8079 <title><literal>xmlelement</literal></title>
8082 <primary>xmlelement</primary>
8086 <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>)
8090 The <function>xmlelement</function> expression produces an XML
8091 element with the given name, attributes, and content.
8097 SELECT xmlelement(name foo);
8103 SELECT xmlelement(name foo, xmlattributes('xyz' as bar));
8109 SELECT xmlelement(name foo, xmlattributes(current_date as bar), 'cont', 'ent');
8112 -------------------------------------
8113 <foo bar="2007-01-26">content</foo>
8118 Element and attribute names that are not valid XML names are
8119 escaped by replacing the offending characters by the sequence
8120 <literal>_x<replaceable>HHHH</replaceable>_</literal>, where
8121 <replaceable>HHHH</replaceable> is the character's Unicode
8122 codepoint in hexadecimal notation. For example:
8124 SELECT xmlelement(name "foo$bar", xmlattributes('xyz' as "a&b"));
8127 ----------------------------------
8128 <foo_x0024_bar a_x0026_b="xyz"/>
8133 An explicit attribute name need not be specified if the attribute
8134 value is a column reference, in which case the column's name will
8135 be used as attribute name by default. In any other case, the
8136 attribute must be given an explicit name. So this example is
8139 CREATE TABLE test (a xml, b xml);
8140 SELECT xmlelement(name test, xmlattributes(a, b)) FROM test;
8144 SELECT xmlelement(name test, xmlattributes('constant'), a, b) FROM test;
8145 SELECT xmlelement(name test, xmlattributes(func(a, b))) FROM test;
8150 Element content, if specified, will be formatted according to
8151 data type. If the content is itself of type <type>xml</type>,
8152 complex XML documents can be constructed. For example:
8154 SELECT xmlelement(name foo, xmlattributes('xyz' as bar),
8155 xmlelement(name abc),
8157 xmlelement(name xyz));
8160 ----------------------------------------------
8161 <foo bar="xyz"><abc/><!--test--><xyz/></foo>
8164 Content of other types will be formatted into valid XML character
8165 data. This means in particular that the characters <, >,
8166 and & will be converted to entities. Binary data (data type
8167 <type>bytea</type>) will be represented in base64 or hex
8168 encoding, depending on the setting of the configuration parameter
8169 <xref linkend="guc-xmlbinary">. The particular behavior for
8170 individual data types is expected to evolve in order to align the
8171 SQL and PostgreSQL data types with the XML Schema specification,
8172 at which point a more precise description will appear.
8177 <title><literal>xmlforest</literal></title>
8180 <primary>xmlforest</primary>
8184 <function>xmlforest</function>(<replaceable>content</replaceable> <optional>AS <replaceable>name</replaceable></optional> <optional>, ...</optional>)
8188 The <function>xmlforest</function> expression produces an XML
8189 forest (sequence) of elements using the given names and content.
8195 SELECT xmlforest('abc' AS foo, 123 AS bar);
8198 ------------------------------
8199 <foo>abc</foo><bar>123</bar>
8202 SELECT xmlforest(table_name, column_name) FROM information_schema.columns WHERE table_schema = 'pg_catalog';
8205 -------------------------------------------------------------------------------------------
8206 <table_name>pg_authid</table_name><column_name>rolname</column_name>
8207 <table_name>pg_authid</table_name><column_name>rolsuper</column_name>
8211 As seen in the second example, the element name can be omitted if
8212 the content value is a column reference, in which case the column
8213 name is used by default. Otherwise, a name must be specified.
8217 Element names that are not valid XML names are escaped as shown
8218 for <function>xmlelement</function> above. Similarly, content
8219 data is escaped to make valid XML content, unless it is already
8220 of type <type>xml</type>.
8224 Note that XML forests are not valid XML documents if they consist
8225 of more than one element. So it might be useful to wrap
8226 <function>xmlforest</function> expressions in
8227 <function>xmlelement</function>.
8232 <title><literal>xmlpi</literal></title>
8235 <primary>xmlpi</primary>
8239 <function>xmlpi</function>(name <replaceable>target</replaceable> <optional>, <replaceable>content</replaceable></optional>)
8243 The <function>xmlpi</function> expression creates an XML
8244 processing instruction. The content, if present, must not
8245 contain the character sequence <literal>?></literal>.
8251 SELECT xmlpi(name php, 'echo "hello world";');
8254 -----------------------------
8255 <?php echo "hello world";?>
8261 <title><literal>xmlroot</literal></title>
8264 <primary>xmlroot</primary>
8268 <function>xmlroot</function>(<replaceable>xml</replaceable>, version <replaceable>text</replaceable>|no value <optional>, standalone yes|no|no value</optional>)
8272 The <function>xmlroot</function> expression alters the properties
8273 of the root node of an XML value. If a version is specified,
8274 this replaces the value in the version declaration, if a
8275 standalone value is specified, this replaces the value in the
8276 standalone declaration.
8281 SELECT xmlroot(xmlparse(document '<?xml version="1.1"?><content>abc</content>'), version '1.0', standalone yes);
8284 ----------------------------------------
8285 <?xml version="1.0" standalone="yes"?>
8286 <content>abc</content>
8292 <title>XML Predicates</title>
8295 <primary>IS DOCUMENT</primary>
8299 <replaceable>xml</replaceable> IS DOCUMENT
8303 The expression <literal>IS DOCUMENT</literal> returns true if the
8304 argument XML value is a proper XML document, false if it is not
8305 (that is, it is a content fragment), or null if the argument is
8306 null. See <xref linkend="datatype-xml"> about the difference
8307 between documents and content fragments.
8312 <sect2 id="functions-xml-processing">
8313 <title>Processing XML</title>
8316 <primary>XPath</primary>
8320 To process values of data type <type>xml</type>, PostgreSQL offers
8321 the function <function>xpath</function>, which evaluates XPath 1.0
8326 <function>xpath</function>(<replaceable>xpath</replaceable>, <replaceable>xml</replaceable><optional>, <replaceable>nsarray</replaceable></optional>)
8330 The function <function>xpath</function> evaluates the XPath
8331 expression <replaceable>xpath</replaceable> against the XML value
8332 <replaceable>xml</replaceable>. It returns an array of XML values
8333 corresponding to the node set produced by the XPath expression.
8337 The third argument of the function is an array of namespace
8338 mappings. This array should be a two-dimensional array with the
8339 length of the second axis being equal to 2 (i.e., it should be an
8340 array of arrays, each of which consists of exactly 2 elements).
8341 The first element of each array entry is the namespace name, the
8342 second the namespace URI.
8348 SELECT xpath('/my:a/text()', '<my:a xmlns:my="http://example.com">test</my:a>', ARRAY[ARRAY['my', 'http://example.com']]);
8358 <sect2 id="functions-xml-mapping">
8359 <title>Mapping Tables to XML</title>
8361 <indexterm zone="functions-xml-mapping">
8362 <primary>XML export</primary>
8366 The following functions map the contents of relational tables to
8367 XML values. They can be thought of as XML export functionality.
8369 table_to_xml(tbl regclass, nulls boolean, tableforest boolean, targetns text)
8370 query_to_xml(query text, nulls boolean, tableforest boolean, targetns text)
8371 cursor_to_xml(cursor refcursor, count int, nulls boolean, tableforest boolean, targetns text)
8373 The return type of each function is <type>xml</type>.
8377 <function>table_to_xml</function> maps the content of the named
8378 table, passed as parameter <parameter>tbl</parameter>. The
8379 <type>regclass</type> type accepts strings identifying tables using the
8380 usual notation, including optional schema qualifications and
8381 double quotes. <function>query_to_xml</function> executes the
8382 query whose text is passed as parameter
8383 <parameter>query</parameter> and maps the result set.
8384 <function>cursor_to_xml</function> fetches the indicated number of
8385 rows from the cursor specified by the parameter
8386 <parameter>cursor</parameter>. This variant is recommendable if
8387 large tables have to be mapped, because the result value is built
8388 up in memory by each function.
8392 If <parameter>tableforest</parameter> is false, then the resulting
8393 XML document looks like this:
8397 <columnname1>data</columnname1>
8398 <columnname2>data</columnname2>
8409 If <parameter>tableforest</parameter> is true, the result is an
8410 XML content fragment that looks like this:
8413 <columnname1>data</columnname1>
8414 <columnname2>data</columnname2>
8424 If no table name is available, that is, when mapping a query or a
8425 cursor, the string <literal>table</literal> is used in the first
8426 format, <literal>row</literal> in the second format.
8430 The choice between these formats is up to the user. The first
8431 format is a proper XML document, which will be important in many
8432 applications. The second format tends to be more useful in the
8433 <function>cursor_to_xml</function> function if the result values are to be
8434 reassembled into one document later on. The functions for
8435 producing XML content discussed above, in particular
8436 <function>xmlelement</function>, can be used to alter the results
8441 The data values are mapped in the same way as described for the
8442 function <function>xmlelement</function> above.
8446 The parameter <parameter>nulls</parameter> determines whether null
8447 values should be included in the output. If true, null values in
8448 columns are represented as
8450 <columnname xsi:nil="true"/>
8452 where <literal>xsi</literal> is the XML namespace prefix for XML
8453 Schema Instance. An appropriate namespace declaration will be
8454 added to the result value. If false, columns containing null
8455 values are simply omitted from the output.
8459 The parameter <parameter>targetns</parameter> specifies the
8460 desired XML namespace of the result. If no particular namespace
8461 is wanted, an empty string should be passed.
8465 The following functions return XML Schema documents describing the
8466 mappings made by the data mappings produced by the corresponding
8469 table_to_xmlschema(tbl regclass, nulls boolean, tableforest boolean, targetns text)
8470 query_to_xmlschema(query text, nulls boolean, tableforest boolean, targetns text)
8471 cursor_to_xmlschema(cursor refcursor, nulls boolean, tableforest boolean, targetns text)
8473 It is essential that the same parameters are passed in order to
8474 obtain matching XML data mappings and XML Schema documents.
8478 The following functions produce XML data mappings and the
8479 corresponding XML Schema in one document (or forest), linked
8480 together. They can be useful where self-contained and
8481 self-describing results are wanted.
8483 table_to_xml_and_xmlschema(tbl regclass, nulls boolean, tableforest boolean, targetns text)
8484 query_to_xml_and_xmlschema(query text, nulls boolean, tableforest boolean, targetns text)
8489 In addition, the following functions are available to produce
8490 analogous mappings of entire schemas or the entire current
8493 schema_to_xml(schema name, nulls boolean, tableforest boolean, targetns text)
8494 schema_to_xmlschema(schema name, nulls boolean, tableforest boolean, targetns text)
8495 schema_to_xml_and_xmlschema(schema name, nulls boolean, tableforest boolean, targetns text)
8497 database_to_xml(nulls boolean, tableforest boolean, targetns text)
8498 database_to_xmlschema(nulls boolean, tableforest boolean, targetns text)
8499 database_to_xml_and_xmlschema(nulls boolean, tableforest boolean, targetns text)
8502 Note that these potentially produce a lot of data, which needs to
8503 be built up in memory. When requesting content mappings of large
8504 schemas or databases, it may be worthwhile to consider mapping the
8505 tables separately instead, possibly even through a cursor.
8509 The result of a schema content mapping looks like this:
8520 </schemaname>]]></screen>
8522 where the format of a table mapping depends on the
8523 <parameter>tableforest</parameter> parameter as explained above.
8527 The result of a database content mapping looks like this:
8542 </dbname>]]></screen>
8544 where the schema mapping is as above.
8548 As an example for using the output produced by these functions,
8549 <xref linkend="xslt-xml-html"> shows an XSLT stylesheet that
8550 converts the output of
8551 <function>table_to_xml_and_xmlschema</function> to an HTML
8552 document containing a tabular rendition of the table data. In a
8553 similar manner, the result data of these functions can be
8554 converted into other XML-based formats.
8557 <figure id="xslt-xml-html">
8558 <title>XSLT stylesheet for converting SQL/XML output to HTML</title>
8559 <programlisting><![CDATA[
8560 <?xml version="1.0"?>
8561 <xsl:stylesheet version="1.0"
8562 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
8563 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
8564 xmlns="http://www.w3.org/1999/xhtml"
8567 <xsl:output method="xml"
8568 doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
8569 doctype-public="-//W3C/DTD XHTML 1.0 Strict//EN"
8572 <xsl:template match="/*">
8573 <xsl:variable name="schema" select="//xsd:schema"/>
8574 <xsl:variable name="tabletypename"
8575 select="$schema/xsd:element[@name=name(current())]/@type"/>
8576 <xsl:variable name="rowtypename"
8577 select="$schema/xsd:complexType[@name=$tabletypename]/xsd:sequence/xsd:element[@name='row']/@type"/>
8581 <title><xsl:value-of select="name(current())"/></title>
8586 <xsl:for-each select="$schema/xsd:complexType[@name=$rowtypename]/xsd:sequence/xsd:element/@name">
8587 <th><xsl:value-of select="."/></th>
8591 <xsl:for-each select="row">
8593 <xsl:for-each select="*">
8594 <td><xsl:value-of select="."/></td>
8604 ]]></programlisting>
8610 <sect1 id="functions-sequence">
8611 <title>Sequence Manipulation Functions</title>
8614 <primary>sequence</primary>
8617 <primary>nextval</primary>
8620 <primary>currval</primary>
8623 <primary>lastval</primary>
8626 <primary>setval</primary>
8630 This section describes <productname>PostgreSQL</productname>'s
8631 functions for operating on <firstterm>sequence objects</firstterm>.
8632 Sequence objects (also called sequence generators or just
8633 sequences) are special single-row tables created with <xref
8634 linkend="sql-createsequence" endterm="sql-createsequence-title">.
8635 A sequence object is usually used to generate unique identifiers
8636 for rows of a table. The sequence functions, listed in <xref
8637 linkend="functions-sequence-table">, provide simple, multiuser-safe
8638 methods for obtaining successive sequence values from sequence
8642 <table id="functions-sequence-table">
8643 <title>Sequence Functions</title>
8646 <row><entry>Function</entry> <entry>Return Type</entry> <entry>Description</entry></row>
8651 <entry><literal><function>currval</function>(<type>regclass</type>)</literal></entry>
8652 <entry><type>bigint</type></entry>
8653 <entry>Return value most recently obtained with
8654 <function>nextval</function> for specified sequence</entry>
8657 <entry><literal><function>lastval</function>()</literal></entry>
8658 <entry><type>bigint</type></entry>
8659 <entry>Return value most recently obtained with
8660 <function>nextval</function> for any sequence</entry>
8663 <entry><literal><function>nextval</function>(<type>regclass</type>)</literal></entry>
8664 <entry><type>bigint</type></entry>
8665 <entry>Advance sequence and return new value</entry>
8668 <entry><literal><function>setval</function>(<type>regclass</type>, <type>bigint</type>)</literal></entry>
8669 <entry><type>bigint</type></entry>
8670 <entry>Set sequence's current value</entry>
8673 <entry><literal><function>setval</function>(<type>regclass</type>, <type>bigint</type>, <type>boolean</type>)</literal></entry>
8674 <entry><type>bigint</type></entry>
8675 <entry>Set sequence's current value and <literal>is_called</literal> flag</entry>
8682 The sequence to be operated on by a sequence-function call is specified by
8683 a <type>regclass</> argument, which is just the OID of the sequence in the
8684 <structname>pg_class</> system catalog. You do not have to look up the
8685 OID by hand, however, since the <type>regclass</> data type's input
8686 converter will do the work for you. Just write the sequence name enclosed
8687 in single quotes, so that it looks like a literal constant. To
8688 achieve some compatibility with the handling of ordinary
8689 <acronym>SQL</acronym> names, the string will be converted to lowercase
8690 unless it contains double quotes around the sequence name. Thus:
8692 nextval('foo') <lineannotation>operates on sequence <literal>foo</literal></>
8693 nextval('FOO') <lineannotation>operates on sequence <literal>foo</literal></>
8694 nextval('"Foo"') <lineannotation>operates on sequence <literal>Foo</literal></>
8696 The sequence name can be schema-qualified if necessary:
8698 nextval('myschema.foo') <lineannotation>operates on <literal>myschema.foo</literal></>
8699 nextval('"myschema".foo') <lineannotation>same as above</lineannotation>
8700 nextval('foo') <lineannotation>searches search path for <literal>foo</literal></>
8702 See <xref linkend="datatype-oid"> for more information about
8708 Before <productname>PostgreSQL</productname> 8.1, the arguments of the
8709 sequence functions were of type <type>text</>, not <type>regclass</>, and
8710 the above-described conversion from a text string to an OID value would
8711 happen at run time during each call. For backwards compatibility, this
8712 facility still exists, but internally it is now handled as an implicit
8713 coercion from <type>text</> to <type>regclass</> before the function is
8718 When you write the argument of a sequence function as an unadorned
8719 literal string, it becomes a constant of type <type>regclass</>.
8720 Since this is really just an OID, it will track the originally
8721 identified sequence despite later renaming, schema reassignment,
8722 etc. This <quote>early binding</> behavior is usually desirable for
8723 sequence references in column defaults and views. But sometimes you will
8724 want <quote>late binding</> where the sequence reference is resolved
8725 at run time. To get late-binding behavior, force the constant to be
8726 stored as a <type>text</> constant instead of <type>regclass</>:
8728 nextval('foo'::text) <lineannotation><literal>foo</literal> is looked up at runtime</>
8730 Note that late binding was the only behavior supported in
8731 <productname>PostgreSQL</productname> releases before 8.1, so you
8732 might need to do this to preserve the semantics of old applications.
8736 Of course, the argument of a sequence function can be an expression
8737 as well as a constant. If it is a text expression then the implicit
8738 coercion will result in a run-time lookup.
8743 The available sequence functions are:
8747 <term><function>nextval</function></term>
8750 Advance the sequence object to its next value and return that
8751 value. This is done atomically: even if multiple sessions
8752 execute <function>nextval</function> concurrently, each will safely receive
8753 a distinct sequence value.
8759 <term><function>currval</function></term>
8762 Return the value most recently obtained by <function>nextval</function>
8763 for this sequence in the current session. (An error is
8764 reported if <function>nextval</function> has never been called for this
8765 sequence in this session.) Notice that because this is returning
8766 a session-local value, it gives a predictable answer whether or not
8767 other sessions have executed <function>nextval</function> since the
8768 current session did.
8774 <term><function>lastval</function></term>
8777 Return the value most recently returned by
8778 <function>nextval</> in the current session. This function is
8779 identical to <function>currval</function>, except that instead
8780 of taking the sequence name as an argument it fetches the
8781 value of the last sequence that <function>nextval</function>
8782 was used on in the current session. It is an error to call
8783 <function>lastval</function> if <function>nextval</function>
8784 has not yet been called in the current session.
8790 <term><function>setval</function></term>
8793 Reset the sequence object's counter value. The two-parameter
8794 form sets the sequence's <literal>last_value</literal> field to the
8795 specified value and sets its <literal>is_called</literal> field to
8796 <literal>true</literal>, meaning that the next
8797 <function>nextval</function> will advance the sequence before
8798 returning a value. The value reported by <function>currval</> is
8799 also set to the specified value. In the three-parameter form,
8800 <literal>is_called</literal> can be set either <literal>true</literal>
8801 or <literal>false</literal>. <literal>true</> has the same effect as
8802 the two-parameter form. If it's set to <literal>false</literal>, the
8803 next <function>nextval</function> will return exactly the specified
8804 value, and sequence advancement commences with the following
8805 <function>nextval</function>. Furthermore, the value reported by
8806 <function>currval</> is not changed in this case (this is a change
8807 from pre-8.3 behavior). For example,
8810 SELECT setval('foo', 42); <lineannotation>Next <function>nextval</> will return 43</lineannotation>
8811 SELECT setval('foo', 42, true); <lineannotation>Same as above</lineannotation>
8812 SELECT setval('foo', 42, false); <lineannotation>Next <function>nextval</> will return 42</lineannotation>
8815 The result returned by <function>setval</function> is just the value of its
8824 If a sequence object has been created with default parameters,
8825 <function>nextval</function> calls on it will return successive values
8826 beginning with 1. Other behaviors can be obtained by using
8827 special parameters in the <xref linkend="sql-createsequence" endterm="sql-createsequence-title"> command;
8828 see its command reference page for more information.
8833 To avoid blocking of concurrent transactions that obtain numbers from the
8834 same sequence, a <function>nextval</function> operation is never rolled back;
8835 that is, once a value has been fetched it is considered used, even if the
8836 transaction that did the <function>nextval</function> later aborts. This means
8837 that aborted transactions might leave unused <quote>holes</quote> in the
8838 sequence of assigned values. <function>setval</function> operations are never
8839 rolled back, either.
8846 <sect1 id="functions-conditional">
8847 <title>Conditional Expressions</title>
8850 <primary>CASE</primary>
8854 <primary>conditional expression</primary>
8858 This section describes the <acronym>SQL</acronym>-compliant conditional expressions
8859 available in <productname>PostgreSQL</productname>.
8864 If your needs go beyond the capabilities of these conditional
8865 expressions you might want to consider writing a stored procedure
8866 in a more expressive programming language.
8871 <title><literal>CASE</></title>
8874 The <acronym>SQL</acronym> <token>CASE</token> expression is a
8875 generic conditional expression, similar to if/else statements in
8879 CASE WHEN <replaceable>condition</replaceable> THEN <replaceable>result</replaceable>
8880 <optional>WHEN ...</optional>
8881 <optional>ELSE <replaceable>result</replaceable></optional>
8885 <token>CASE</token> clauses can be used wherever
8886 an expression is valid. <replaceable>condition</replaceable> is an
8887 expression that returns a <type>boolean</type> result. If the result is true
8888 then the value of the <token>CASE</token> expression is the
8889 <replaceable>result</replaceable> that follows the condition. If the result is false any
8890 subsequent <token>WHEN</token> clauses are searched in the same
8891 manner. If no <token>WHEN</token>
8892 <replaceable>condition</replaceable> is true then the value of the
8893 case expression is the <replaceable>result</replaceable> in the
8894 <token>ELSE</token> clause. If the <token>ELSE</token> clause is
8895 omitted and no condition matches, the result is null.
8911 CASE WHEN a=1 THEN 'one'
8926 The data types of all the <replaceable>result</replaceable>
8927 expressions must be convertible to a single output type.
8928 See <xref linkend="typeconv-union-case"> for more detail.
8932 The following <quote>simple</quote> <token>CASE</token> expression is a
8933 specialized variant of the general form above:
8936 CASE <replaceable>expression</replaceable>
8937 WHEN <replaceable>value</replaceable> THEN <replaceable>result</replaceable>
8938 <optional>WHEN ...</optional>
8939 <optional>ELSE <replaceable>result</replaceable></optional>
8944 <replaceable>expression</replaceable> is computed and compared to
8945 all the <replaceable>value</replaceable> specifications in the
8946 <token>WHEN</token> clauses until one is found that is equal. If
8947 no match is found, the <replaceable>result</replaceable> in the
8948 <token>ELSE</token> clause (or a null value) is returned. This is similar
8949 to the <function>switch</function> statement in C.
8953 The example above can be written using the simple
8954 <token>CASE</token> syntax:
8957 CASE a WHEN 1 THEN 'one'
8972 A <token>CASE</token> expression does not evaluate any subexpressions
8973 that are not needed to determine the result. For example, this is a
8974 possible way of avoiding a division-by-zero failure:
8976 SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;
8982 <title><literal>COALESCE</></title>
8985 <primary>COALESCE</primary>
8989 <primary>NVL</primary>
8993 <primary>IFNULL</primary>
8997 <function>COALESCE</function>(<replaceable>value</replaceable> <optional>, ...</optional>)
9001 The <function>COALESCE</function> function returns the first of its
9002 arguments that is not null. Null is returned only if all arguments
9003 are null. It is often used to substitute a default value for
9004 null values when data is retrieved for display, for example:
9006 SELECT COALESCE(description, short_description, '(none)') ...
9011 Like a <token>CASE</token> expression, <function>COALESCE</function> will
9012 not evaluate arguments that are not needed to determine the result;
9013 that is, arguments to the right of the first non-null argument are
9014 not evaluated. This SQL-standard function provides capabilities similar
9015 to <function>NVL</> and <function>IFNULL</>, which are used in some other
9021 <title><literal>NULLIF</></title>
9024 <primary>NULLIF</primary>
9028 <function>NULLIF</function>(<replaceable>value1</replaceable>, <replaceable>value2</replaceable>)
9032 The <function>NULLIF</function> function returns a null value if
9033 <replaceable>value1</replaceable> and <replaceable>value2</replaceable>
9034 are equal; otherwise it returns <replaceable>value1</replaceable>.
9035 This can be used to perform the inverse operation of the
9036 <function>COALESCE</function> example given above:
9038 SELECT NULLIF(value, '(none)') ...
9042 If <replaceable>value1</replaceable> is <literal>(none)</>, return a null,
9043 otherwise return <replaceable>value1</replaceable>.
9049 <title><literal>GREATEST</literal> and <literal>LEAST</literal></title>
9052 <primary>GREATEST</primary>
9055 <primary>LEAST</primary>
9059 <function>GREATEST</function>(<replaceable>value</replaceable> <optional>, ...</optional>)
9062 <function>LEAST</function>(<replaceable>value</replaceable> <optional>, ...</optional>)
9066 The <function>GREATEST</> and <function>LEAST</> functions select the
9067 largest or smallest value from a list of any number of expressions.
9068 The expressions must all be convertible to a common data type, which
9069 will be the type of the result
9070 (see <xref linkend="typeconv-union-case"> for details). NULL values
9071 in the list are ignored. The result will be NULL only if all the
9072 expressions evaluate to NULL.
9076 Note that <function>GREATEST</> and <function>LEAST</> are not in
9077 the SQL standard, but are a common extension. Some other databases
9078 make them return NULL if any argument is NULL, rather than only when
9085 <sect1 id="functions-array">
9086 <title>Array Functions and Operators</title>
9089 <xref linkend="array-operators-table"> shows the operators
9090 available for <type>array</type> types.
9093 <table id="array-operators-table">
9094 <title><type>array</type> Operators</title>
9098 <entry>Operator</entry>
9099 <entry>Description</entry>
9100 <entry>Example</entry>
9101 <entry>Result</entry>
9106 <entry> <literal>=</literal> </entry>
9107 <entry>equal</entry>
9108 <entry><literal>ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3]</literal></entry>
9109 <entry><literal>t</literal></entry>
9113 <entry> <literal><></literal> </entry>
9114 <entry>not equal</entry>
9115 <entry><literal>ARRAY[1,2,3] <> ARRAY[1,2,4]</literal></entry>
9116 <entry><literal>t</literal></entry>
9120 <entry> <literal><</literal> </entry>
9121 <entry>less than</entry>
9122 <entry><literal>ARRAY[1,2,3] < ARRAY[1,2,4]</literal></entry>
9123 <entry><literal>t</literal></entry>
9127 <entry> <literal>></literal> </entry>
9128 <entry>greater than</entry>
9129 <entry><literal>ARRAY[1,4,3] > ARRAY[1,2,4]</literal></entry>
9130 <entry><literal>t</literal></entry>
9134 <entry> <literal><=</literal> </entry>
9135 <entry>less than or equal</entry>
9136 <entry><literal>ARRAY[1,2,3] <= ARRAY[1,2,3]</literal></entry>
9137 <entry><literal>t</literal></entry>
9141 <entry> <literal>>=</literal> </entry>
9142 <entry>greater than or equal</entry>
9143 <entry><literal>ARRAY[1,4,3] >= ARRAY[1,4,3]</literal></entry>
9144 <entry><literal>t</literal></entry>
9148 <entry> <literal>@></literal> </entry>
9149 <entry>contains</entry>
9150 <entry><literal>ARRAY[1,4,3] @> ARRAY[3,1]</literal></entry>
9151 <entry><literal>t</literal></entry>
9155 <entry> <literal><@</literal> </entry>
9156 <entry>is contained by</entry>
9157 <entry><literal>ARRAY[2,7] <@ ARRAY[1,7,4,2,6]</literal></entry>
9158 <entry><literal>t</literal></entry>
9162 <entry> <literal>&&</literal> </entry>
9163 <entry>overlap (have elements in common)</entry>
9164 <entry><literal>ARRAY[1,4,3] && ARRAY[2,1]</literal></entry>
9165 <entry><literal>t</literal></entry>
9169 <entry> <literal>||</literal> </entry>
9170 <entry>array-to-array concatenation</entry>
9171 <entry><literal>ARRAY[1,2,3] || ARRAY[4,5,6]</literal></entry>
9172 <entry><literal>{1,2,3,4,5,6}</literal></entry>
9176 <entry> <literal>||</literal> </entry>
9177 <entry>array-to-array concatenation</entry>
9178 <entry><literal>ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]]</literal></entry>
9179 <entry><literal>{{1,2,3},{4,5,6},{7,8,9}}</literal></entry>
9183 <entry> <literal>||</literal> </entry>
9184 <entry>element-to-array concatenation</entry>
9185 <entry><literal>3 || ARRAY[4,5,6]</literal></entry>
9186 <entry><literal>{3,4,5,6}</literal></entry>
9190 <entry> <literal>||</literal> </entry>
9191 <entry>array-to-element concatenation</entry>
9192 <entry><literal>ARRAY[4,5,6] || 7</literal></entry>
9193 <entry><literal>{4,5,6,7}</literal></entry>
9200 Array comparisons compare the array contents element-by-element,
9201 using the default B-Tree comparison function for the element data type.
9202 In multidimensional arrays the elements are visited in row-major order
9203 (last subscript varies most rapidly).
9204 If the contents of two arrays are equal but the dimensionality is
9205 different, the first difference in the dimensionality information
9206 determines the sort order. (This is a change from versions of
9207 <productname>PostgreSQL</> prior to 8.2: older versions would claim
9208 that two arrays with the same contents were equal, even if the
9209 number of dimensions or subscript ranges were different.)
9213 See <xref linkend="arrays"> for more details about array operator
9218 <xref linkend="array-functions-table"> shows the functions
9219 available for use with array types. See <xref linkend="arrays">
9220 for more discussion and examples of the use of these functions.
9223 <table id="array-functions-table">
9224 <title><type>array</type> Functions</title>
9228 <entry>Function</entry>
9229 <entry>Return Type</entry>
9230 <entry>Description</entry>
9231 <entry>Example</entry>
9232 <entry>Result</entry>
9239 <function>array_append</function>(<type>anyarray</type>, <type>anyelement</type>)
9242 <entry><type>anyarray</type></entry>
9243 <entry>append an element to the end of an array</entry>
9244 <entry><literal>array_append(ARRAY[1,2], 3)</literal></entry>
9245 <entry><literal>{1,2,3}</literal></entry>
9250 <function>array_cat</function>(<type>anyarray</type>, <type>anyarray</type>)
9253 <entry><type>anyarray</type></entry>
9254 <entry>concatenate two arrays</entry>
9255 <entry><literal>array_cat(ARRAY[1,2,3], ARRAY[4,5])</literal></entry>
9256 <entry><literal>{1,2,3,4,5}</literal></entry>
9261 <function>array_dims</function>(<type>anyarray</type>)
9264 <entry><type>text</type></entry>
9265 <entry>returns a text representation of array's dimensions</entry>
9266 <entry><literal>array_dims(ARRAY[[1,2,3], [4,5,6]])</literal></entry>
9267 <entry><literal>[1:2][1:3]</literal></entry>
9272 <function>array_lower</function>(<type>anyarray</type>, <type>int</type>)
9275 <entry><type>int</type></entry>
9276 <entry>returns lower bound of the requested array dimension</entry>
9277 <entry><literal>array_lower('[0:2]={1,2,3}'::int[], 1)</literal></entry>
9278 <entry><literal>0</literal></entry>
9283 <function>array_prepend</function>(<type>anyelement</type>, <type>anyarray</type>)
9286 <entry><type>anyarray</type></entry>
9287 <entry>append an element to the beginning of an array</entry>
9288 <entry><literal>array_prepend(1, ARRAY[2,3])</literal></entry>
9289 <entry><literal>{1,2,3}</literal></entry>
9294 <function>array_to_string</function>(<type>anyarray</type>, <type>text</type>)
9297 <entry><type>text</type></entry>
9298 <entry>concatenates array elements using provided delimiter</entry>
9299 <entry><literal>array_to_string(ARRAY[1, 2, 3], '~^~')</literal></entry>
9300 <entry><literal>1~^~2~^~3</literal></entry>
9305 <function>array_upper</function>(<type>anyarray</type>, <type>int</type>)
9308 <entry><type>int</type></entry>
9309 <entry>returns upper bound of the requested array dimension</entry>
9310 <entry><literal>array_upper(ARRAY[1,2,3,4], 1)</literal></entry>
9311 <entry><literal>4</literal></entry>
9316 <function>string_to_array</function>(<type>text</type>, <type>text</type>)
9319 <entry><type>text[]</type></entry>
9320 <entry>splits string into array elements using provided delimiter</entry>
9321 <entry><literal>string_to_array('xx~^~yy~^~zz', '~^~')</literal></entry>
9322 <entry><literal>{xx,yy,zz}</literal></entry>
9329 <sect1 id="functions-aggregate">
9330 <title>Aggregate Functions</title>
9332 <indexterm zone="functions-aggregate">
9333 <primary>aggregate function</primary>
9334 <secondary>built-in</secondary>
9338 <firstterm>Aggregate functions</firstterm> compute a single result
9339 value from a set of input values. The built-in aggregate functions
9341 <xref linkend="functions-aggregate-table"> and
9342 <xref linkend="functions-aggregate-statistics-table">.
9343 The special syntax considerations for aggregate
9344 functions are explained in <xref linkend="syntax-aggregates">.
9345 Consult <xref linkend="tutorial-agg"> for additional introductory
9349 <table id="functions-aggregate-table">
9350 <title>General-Purpose Aggregate Functions</title>
9355 <entry>Function</entry>
9356 <entry>Argument Type</entry>
9357 <entry>Return Type</entry>
9358 <entry>Description</entry>
9366 <primary>average</primary>
9368 <function>avg(<replaceable class="parameter">expression</replaceable>)</function>
9371 <type>smallint</type>, <type>int</type>,
9372 <type>bigint</type>, <type>real</type>, <type>double
9373 precision</type>, <type>numeric</type>, or <type>interval</type>
9376 <type>numeric</type> for any integer type argument,
9377 <type>double precision</type> for a floating-point argument,
9378 otherwise the same as the argument data type
9380 <entry>the average (arithmetic mean) of all input values</entry>
9386 <primary>bit_and</primary>
9388 <function>bit_and(<replaceable class="parameter">expression</replaceable>)</function>
9391 <type>smallint</type>, <type>int</type>, <type>bigint</type>, or
9395 same as argument data type
9397 <entry>the bitwise AND of all non-null input values, or null if none</entry>
9403 <primary>bit_or</primary>
9405 <function>bit_or(<replaceable class="parameter">expression</replaceable>)</function>
9408 <type>smallint</type>, <type>int</type>, <type>bigint</type>, or
9412 same as argument data type
9414 <entry>the bitwise OR of all non-null input values, or null if none</entry>
9420 <primary>bool_and</primary>
9422 <function>bool_and(<replaceable class="parameter">expression</replaceable>)</function>
9430 <entry>true if all input values are true, otherwise false</entry>
9436 <primary>bool_or</primary>
9438 <function>bool_or(<replaceable class="parameter">expression</replaceable>)</function>
9446 <entry>true if at least one input value is true, otherwise false</entry>
9450 <entry><function>count(*)</function></entry>
9452 <entry><type>bigint</type></entry>
9453 <entry>number of input rows</entry>
9457 <entry><function>count(<replaceable class="parameter">expression</replaceable>)</function></entry>
9459 <entry><type>bigint</type></entry>
9461 number of input rows for which the value of <replaceable
9462 class="parameter">expression</replaceable> is not null
9469 <primary>every</primary>
9471 <function>every(<replaceable class="parameter">expression</replaceable>)</function>
9479 <entry>equivalent to <function>bool_and</function></entry>
9483 <entry><function>max(<replaceable class="parameter">expression</replaceable>)</function></entry>
9484 <entry>any array, numeric, string, or date/time type</entry>
9485 <entry>same as argument type</entry>
9487 maximum value of <replaceable
9488 class="parameter">expression</replaceable> across all input
9494 <entry><function>min(<replaceable class="parameter">expression</replaceable>)</function></entry>
9495 <entry>any array, numeric, string, or date/time type</entry>
9496 <entry>same as argument type</entry>
9498 minimum value of <replaceable
9499 class="parameter">expression</replaceable> across all input
9505 <entry><function>sum(<replaceable class="parameter">expression</replaceable>)</function></entry>
9507 <type>smallint</type>, <type>int</type>,
9508 <type>bigint</type>, <type>real</type>, <type>double
9509 precision</type>, <type>numeric</type>, or
9510 <type>interval</type>
9513 <type>bigint</type> for <type>smallint</type> or
9514 <type>int</type> arguments, <type>numeric</type> for
9515 <type>bigint</type> arguments, <type>double precision</type>
9516 for floating-point arguments, otherwise the same as the
9519 <entry>sum of <replaceable class="parameter">expression</replaceable> across all input values</entry>
9526 It should be noted that except for <function>count</function>,
9527 these functions return a null value when no rows are selected. In
9528 particular, <function>sum</function> of no rows returns null, not
9529 zero as one might expect. The <function>coalesce</function> function can be
9530 used to substitute zero for null when necessary.
9535 <primary>ANY</primary>
9538 <primary>SOME</primary>
9541 Boolean aggregates <function>bool_and</function> and
9542 <function>bool_or</function> correspond to standard SQL aggregates
9543 <function>every</function> and <function>any</function> or
9544 <function>some</function>.
9545 As for <function>any</function> and <function>some</function>,
9546 it seems that there is an ambiguity built into the standard syntax:
9548 SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;
9550 Here <function>ANY</function> can be considered both as leading
9551 to a subquery or as an aggregate if the select expression returns 1 row.
9552 Thus the standard name cannot be given to these aggregates.
9558 Users accustomed to working with other SQL database management
9559 systems might be surprised by the performance of the
9560 <function>count</function> aggregate when it is applied to the
9561 entire table. A query like:
9563 SELECT count(*) FROM sometable;
9565 will be executed by <productname>PostgreSQL</productname> using a
9566 sequential scan of the entire table.
9572 <xref linkend="functions-aggregate-statistics-table"> shows
9573 aggregate functions typically used in statistical analysis.
9574 (These are separated out merely to avoid cluttering the listing
9575 of more-commonly-used aggregates.) Where the description mentions
9576 <replaceable class="parameter">N</replaceable>, it means the
9577 number of input rows for which all the input expressions are non-null.
9578 In all cases, null is returned if the computation is meaningless,
9579 for example when <replaceable class="parameter">N</replaceable> is zero.
9583 <primary>statistics</primary>
9586 <primary>linear regression</primary>
9589 <table id="functions-aggregate-statistics-table">
9590 <title>Aggregate Functions for Statistics</title>
9595 <entry>Function</entry>
9596 <entry>Argument Type</entry>
9597 <entry>Return Type</entry>
9598 <entry>Description</entry>
9607 <primary>correlation</primary>
9609 <function>corr(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9612 <type>double precision</type>
9615 <type>double precision</type>
9617 <entry>correlation coefficient</entry>
9623 <primary>covariance</primary>
9624 <secondary>population</secondary>
9626 <function>covar_pop(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9629 <type>double precision</type>
9632 <type>double precision</type>
9634 <entry>population covariance</entry>
9640 <primary>covariance</primary>
9641 <secondary>sample</secondary>
9643 <function>covar_samp(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9646 <type>double precision</type>
9649 <type>double precision</type>
9651 <entry>sample covariance</entry>
9656 <function>regr_avgx(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9659 <type>double precision</type>
9662 <type>double precision</type>
9664 <entry>average of the independent variable
9665 (<literal>sum(<replaceable class="parameter">X</replaceable>)/<replaceable class="parameter">N</replaceable></literal>)</entry>
9670 <function>regr_avgy(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9673 <type>double precision</type>
9676 <type>double precision</type>
9678 <entry>average of the dependent variable
9679 (<literal>sum(<replaceable class="parameter">Y</replaceable>)/<replaceable class="parameter">N</replaceable></literal>)</entry>
9684 <function>regr_count(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9687 <type>double precision</type>
9692 <entry>number of input rows in which both expressions are nonnull</entry>
9698 <primary>regression intercept</primary>
9700 <function>regr_intercept(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9703 <type>double precision</type>
9706 <type>double precision</type>
9708 <entry>y-intercept of the least-squares-fit linear equation
9709 determined by the (<replaceable
9710 class="parameter">X</replaceable>, <replaceable
9711 class="parameter">Y</replaceable>) pairs</entry>
9716 <function>regr_r2(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9719 <type>double precision</type>
9722 <type>double precision</type>
9724 <entry>square of the correlation coefficient</entry>
9730 <primary>regression slope</primary>
9732 <function>regr_slope(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9735 <type>double precision</type>
9738 <type>double precision</type>
9740 <entry>slope of the least-squares-fit linear equation determined
9741 by the (<replaceable class="parameter">X</replaceable>,
9742 <replaceable class="parameter">Y</replaceable>) pairs</entry>
9747 <function>regr_sxx(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9750 <type>double precision</type>
9753 <type>double precision</type>
9755 <entry><literal>sum(<replaceable
9756 class="parameter">X</replaceable>^2) - sum(<replaceable
9757 class="parameter">X</replaceable>)^2/<replaceable
9758 class="parameter">N</replaceable></literal> (<quote>sum of
9759 squares</quote> of the independent variable)</entry>
9764 <function>regr_sxy(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9767 <type>double precision</type>
9770 <type>double precision</type>
9772 <entry><literal>sum(<replaceable
9773 class="parameter">X</replaceable>*<replaceable
9774 class="parameter">Y</replaceable>) - sum(<replaceable
9775 class="parameter">X</replaceable>) * sum(<replaceable
9776 class="parameter">Y</replaceable>)/<replaceable
9777 class="parameter">N</replaceable></literal> (<quote>sum of
9778 products</quote> of independent times dependent
9784 <function>regr_syy(<replaceable class="parameter">Y</replaceable>, <replaceable class="parameter">X</replaceable>)</function>
9787 <type>double precision</type>
9790 <type>double precision</type>
9792 <entry><literal>sum(<replaceable
9793 class="parameter">Y</replaceable>^2) - sum(<replaceable
9794 class="parameter">Y</replaceable>)^2/<replaceable
9795 class="parameter">N</replaceable></literal> (<quote>sum of
9796 squares</quote> of the dependent variable)</entry>
9802 <primary>standard deviation</primary>
9804 <function>stddev(<replaceable class="parameter">expression</replaceable>)</function>
9807 <type>smallint</type>, <type>int</type>,
9808 <type>bigint</type>, <type>real</type>, <type>double
9809 precision</type>, or <type>numeric</type>
9812 <type>double precision</type> for floating-point arguments,
9813 otherwise <type>numeric</type>
9815 <entry>historical alias for <function>stddev_samp</function></entry>
9821 <primary>standard deviation</primary>
9822 <secondary>population</secondary>
9824 <function>stddev_pop(<replaceable class="parameter">expression</replaceable>)</function>
9827 <type>smallint</type>, <type>int</type>,
9828 <type>bigint</type>, <type>real</type>, <type>double
9829 precision</type>, or <type>numeric</type>
9832 <type>double precision</type> for floating-point arguments,
9833 otherwise <type>numeric</type>
9835 <entry>population standard deviation of the input values</entry>
9841 <primary>standard deviation</primary>
9842 <secondary>sample</secondary>
9844 <function>stddev_samp(<replaceable class="parameter">expression</replaceable>)</function>
9847 <type>smallint</type>, <type>int</type>,
9848 <type>bigint</type>, <type>real</type>, <type>double
9849 precision</type>, or <type>numeric</type>
9852 <type>double precision</type> for floating-point arguments,
9853 otherwise <type>numeric</type>
9855 <entry>sample standard deviation of the input values</entry>
9861 <primary>variance</primary>
9863 <function>variance</function>(<replaceable class="parameter">expression</replaceable>)
9866 <type>smallint</type>, <type>int</type>,
9867 <type>bigint</type>, <type>real</type>, <type>double
9868 precision</type>, or <type>numeric</type>
9871 <type>double precision</type> for floating-point arguments,
9872 otherwise <type>numeric</type>
9874 <entry>historical alias for <function>var_samp</function></entry>
9880 <primary>variance</primary>
9881 <secondary>population</secondary>
9883 <function>var_pop</function>(<replaceable class="parameter">expression</replaceable>)
9886 <type>smallint</type>, <type>int</type>,
9887 <type>bigint</type>, <type>real</type>, <type>double
9888 precision</type>, or <type>numeric</type>
9891 <type>double precision</type> for floating-point arguments,
9892 otherwise <type>numeric</type>
9894 <entry>population variance of the input values (square of the population standard deviation)</entry>
9900 <primary>variance</primary>
9901 <secondary>sample</secondary>
9903 <function>var_samp</function>(<replaceable class="parameter">expression</replaceable>)
9906 <type>smallint</type>, <type>int</type>,
9907 <type>bigint</type>, <type>real</type>, <type>double
9908 precision</type>, or <type>numeric</type>
9911 <type>double precision</type> for floating-point arguments,
9912 otherwise <type>numeric</type>
9914 <entry>sample variance of the input values (square of the sample standard deviation)</entry>
9923 <sect1 id="functions-subquery">
9924 <title>Subquery Expressions</title>
9927 <primary>EXISTS</primary>
9931 <primary>IN</primary>
9935 <primary>NOT IN</primary>
9939 <primary>ANY</primary>
9943 <primary>ALL</primary>
9947 <primary>SOME</primary>
9951 <primary>subquery</primary>
9955 This section describes the <acronym>SQL</acronym>-compliant subquery
9956 expressions available in <productname>PostgreSQL</productname>.
9957 All of the expression forms documented in this section return
9958 Boolean (true/false) results.
9962 <title><literal>EXISTS</literal></title>
9965 EXISTS (<replaceable>subquery</replaceable>)
9969 The argument of <token>EXISTS</token> is an arbitrary <command>SELECT</> statement,
9970 or <firstterm>subquery</firstterm>. The
9971 subquery is evaluated to determine whether it returns any rows.
9972 If it returns at least one row, the result of <token>EXISTS</token> is
9973 <quote>true</>; if the subquery returns no rows, the result of <token>EXISTS</token>
9978 The subquery can refer to variables from the surrounding query,
9979 which will act as constants during any one evaluation of the subquery.
9983 The subquery will generally only be executed far enough to determine
9984 whether at least one row is returned, not all the way to completion.
9985 It is unwise to write a subquery that has any side effects (such as
9986 calling sequence functions); whether the side effects occur or not
9987 might be difficult to predict.
9991 Since the result depends only on whether any rows are returned,
9992 and not on the contents of those rows, the output list of the
9993 subquery is normally uninteresting. A common coding convention is
9994 to write all <literal>EXISTS</> tests in the form
9995 <literal>EXISTS(SELECT 1 WHERE ...)</literal>. There are exceptions to
9996 this rule however, such as subqueries that use <token>INTERSECT</token>.
10000 This simple example is like an inner join on <literal>col2</>, but
10001 it produces at most one output row for each <literal>tab1</> row,
10002 even if there are multiple matching <literal>tab2</> rows:
10004 SELECT col1 FROM tab1
10005 WHERE EXISTS(SELECT 1 FROM tab2 WHERE col2 = tab1.col2);
10011 <title><literal>IN</literal></title>
10014 <replaceable>expression</replaceable> IN (<replaceable>subquery</replaceable>)
10018 The right-hand side is a parenthesized
10019 subquery, which must return exactly one column. The left-hand expression
10020 is evaluated and compared to each row of the subquery result.
10021 The result of <token>IN</token> is <quote>true</> if any equal subquery row is found.
10022 The result is <quote>false</> if no equal row is found (including the special
10023 case where the subquery returns no rows).
10027 Note that if the left-hand expression yields null, or if there are
10028 no equal right-hand values and at least one right-hand row yields
10029 null, the result of the <token>IN</token> construct will be null, not false.
10030 This is in accordance with SQL's normal rules for Boolean combinations
10035 As with <token>EXISTS</token>, it's unwise to assume that the subquery will
10036 be evaluated completely.
10040 <replaceable>row_constructor</replaceable> IN (<replaceable>subquery</replaceable>)
10044 The left-hand side of this form of <token>IN</token> is a row constructor,
10045 as described in <xref linkend="sql-syntax-row-constructors">.
10046 The right-hand side is a parenthesized
10047 subquery, which must return exactly as many columns as there are
10048 expressions in the left-hand row. The left-hand expressions are
10049 evaluated and compared row-wise to each row of the subquery result.
10050 The result of <token>IN</token> is <quote>true</> if any equal subquery row is found.
10051 The result is <quote>false</> if no equal row is found (including the special
10052 case where the subquery returns no rows).
10056 As usual, null values in the rows are combined per
10057 the normal rules of SQL Boolean expressions. Two rows are considered
10058 equal if all their corresponding members are non-null and equal; the rows
10059 are unequal if any corresponding members are non-null and unequal;
10060 otherwise the result of that row comparison is unknown (null).
10061 If all the per-row results are either unequal or null, with at least one
10062 null, then the result of <token>IN</token> is null.
10067 <title><literal>NOT IN</literal></title>
10070 <replaceable>expression</replaceable> NOT IN (<replaceable>subquery</replaceable>)
10074 The right-hand side is a parenthesized
10075 subquery, which must return exactly one column. The left-hand expression
10076 is evaluated and compared to each row of the subquery result.
10077 The result of <token>NOT IN</token> is <quote>true</> if only unequal subquery rows
10078 are found (including the special case where the subquery returns no rows).
10079 The result is <quote>false</> if any equal row is found.
10083 Note that if the left-hand expression yields null, or if there are
10084 no equal right-hand values and at least one right-hand row yields
10085 null, the result of the <token>NOT IN</token> construct will be null, not true.
10086 This is in accordance with SQL's normal rules for Boolean combinations
10091 As with <token>EXISTS</token>, it's unwise to assume that the subquery will
10092 be evaluated completely.
10096 <replaceable>row_constructor</replaceable> NOT IN (<replaceable>subquery</replaceable>)
10100 The left-hand side of this form of <token>NOT IN</token> is a row constructor,
10101 as described in <xref linkend="sql-syntax-row-constructors">.
10102 The right-hand side is a parenthesized
10103 subquery, which must return exactly as many columns as there are
10104 expressions in the left-hand row. The left-hand expressions are
10105 evaluated and compared row-wise to each row of the subquery result.
10106 The result of <token>NOT IN</token> is <quote>true</> if only unequal subquery rows
10107 are found (including the special case where the subquery returns no rows).
10108 The result is <quote>false</> if any equal row is found.
10112 As usual, null values in the rows are combined per
10113 the normal rules of SQL Boolean expressions. Two rows are considered
10114 equal if all their corresponding members are non-null and equal; the rows
10115 are unequal if any corresponding members are non-null and unequal;
10116 otherwise the result of that row comparison is unknown (null).
10117 If all the per-row results are either unequal or null, with at least one
10118 null, then the result of <token>NOT IN</token> is null.
10123 <title><literal>ANY</literal>/<literal>SOME</literal></title>
10126 <replaceable>expression</replaceable> <replaceable>operator</replaceable> ANY (<replaceable>subquery</replaceable>)
10127 <replaceable>expression</replaceable> <replaceable>operator</replaceable> SOME (<replaceable>subquery</replaceable>)
10131 The right-hand side is a parenthesized
10132 subquery, which must return exactly one column. The left-hand expression
10133 is evaluated and compared to each row of the subquery result using the
10134 given <replaceable>operator</replaceable>, which must yield a Boolean
10136 The result of <token>ANY</token> is <quote>true</> if any true result is obtained.
10137 The result is <quote>false</> if no true result is found (including the special
10138 case where the subquery returns no rows).
10142 <token>SOME</token> is a synonym for <token>ANY</token>.
10143 <token>IN</token> is equivalent to <literal>= ANY</literal>.
10147 Note that if there are no successes and at least one right-hand row yields
10148 null for the operator's result, the result of the <token>ANY</token> construct
10149 will be null, not false.
10150 This is in accordance with SQL's normal rules for Boolean combinations
10155 As with <token>EXISTS</token>, it's unwise to assume that the subquery will
10156 be evaluated completely.
10160 <replaceable>row_constructor</replaceable> <replaceable>operator</> ANY (<replaceable>subquery</replaceable>)
10161 <replaceable>row_constructor</replaceable> <replaceable>operator</> SOME (<replaceable>subquery</replaceable>)
10165 The left-hand side of this form of <token>ANY</token> is a row constructor,
10166 as described in <xref linkend="sql-syntax-row-constructors">.
10167 The right-hand side is a parenthesized
10168 subquery, which must return exactly as many columns as there are
10169 expressions in the left-hand row. The left-hand expressions are
10170 evaluated and compared row-wise to each row of the subquery result,
10171 using the given <replaceable>operator</replaceable>.
10172 The result of <token>ANY</token> is <quote>true</> if the comparison
10173 returns true for any subquery row.
10174 The result is <quote>false</> if the comparison returns false for every
10175 subquery row (including the special case where the subquery returns no
10177 The result is NULL if the comparison does not return true for any row,
10178 and it returns NULL for at least one row.
10182 See <xref linkend="row-wise-comparison"> for details about the meaning
10183 of a row-wise comparison.
10188 <title><literal>ALL</literal></title>
10191 <replaceable>expression</replaceable> <replaceable>operator</replaceable> ALL (<replaceable>subquery</replaceable>)
10195 The right-hand side is a parenthesized
10196 subquery, which must return exactly one column. The left-hand expression
10197 is evaluated and compared to each row of the subquery result using the
10198 given <replaceable>operator</replaceable>, which must yield a Boolean
10200 The result of <token>ALL</token> is <quote>true</> if all rows yield true
10201 (including the special case where the subquery returns no rows).
10202 The result is <quote>false</> if any false result is found.
10203 The result is NULL if the comparison does not return false for any row,
10204 and it returns NULL for at least one row.
10208 <token>NOT IN</token> is equivalent to <literal><> ALL</literal>.
10212 As with <token>EXISTS</token>, it's unwise to assume that the subquery will
10213 be evaluated completely.
10217 <replaceable>row_constructor</replaceable> <replaceable>operator</replaceable> ALL (<replaceable>subquery</replaceable>)
10221 The left-hand side of this form of <token>ALL</token> is a row constructor,
10222 as described in <xref linkend="sql-syntax-row-constructors">.
10223 The right-hand side is a parenthesized
10224 subquery, which must return exactly as many columns as there are
10225 expressions in the left-hand row. The left-hand expressions are
10226 evaluated and compared row-wise to each row of the subquery result,
10227 using the given <replaceable>operator</replaceable>.
10228 The result of <token>ALL</token> is <quote>true</> if the comparison
10229 returns true for all subquery rows (including the special
10230 case where the subquery returns no rows).
10231 The result is <quote>false</> if the comparison returns false for any
10233 The result is NULL if the comparison does not return false for any
10234 subquery row, and it returns NULL for at least one row.
10238 See <xref linkend="row-wise-comparison"> for details about the meaning
10239 of a row-wise comparison.
10244 <title>Row-wise Comparison</title>
10246 <indexterm zone="functions-subquery">
10247 <primary>comparison</primary>
10248 <secondary>subquery result row</secondary>
10252 <replaceable>row_constructor</replaceable> <replaceable>operator</replaceable> (<replaceable>subquery</replaceable>)
10256 The left-hand side is a row constructor,
10257 as described in <xref linkend="sql-syntax-row-constructors">.
10258 The right-hand side is a parenthesized subquery, which must return exactly
10259 as many columns as there are expressions in the left-hand row. Furthermore,
10260 the subquery cannot return more than one row. (If it returns zero rows,
10261 the result is taken to be null.) The left-hand side is evaluated and
10262 compared row-wise to the single subquery result row.
10266 See <xref linkend="row-wise-comparison"> for details about the meaning
10267 of a row-wise comparison.
10273 <sect1 id="functions-comparisons">
10274 <title>Row and Array Comparisons</title>
10277 <primary>IN</primary>
10281 <primary>NOT IN</primary>
10285 <primary>ANY</primary>
10289 <primary>ALL</primary>
10293 <primary>SOME</primary>
10297 <primary>row-wise comparison</primary>
10301 <primary>comparison</primary>
10302 <secondary>row-wise</secondary>
10306 <primary>IS DISTINCT FROM</primary>
10310 <primary>IS NOT DISTINCT FROM</primary>
10314 This section describes several specialized constructs for making
10315 multiple comparisons between groups of values. These forms are
10316 syntactically related to the subquery forms of the previous section,
10317 but do not involve subqueries.
10318 The forms involving array subexpressions are
10319 <productname>PostgreSQL</productname> extensions; the rest are
10320 <acronym>SQL</acronym>-compliant.
10321 All of the expression forms documented in this section return
10322 Boolean (true/false) results.
10326 <title><literal>IN</literal></title>
10329 <replaceable>expression</replaceable> IN (<replaceable>value</replaceable> <optional>, ...</optional>)
10333 The right-hand side is a parenthesized list
10334 of scalar expressions. The result is <quote>true</> if the left-hand expression's
10335 result is equal to any of the right-hand expressions. This is a shorthand
10339 <replaceable>expression</replaceable> = <replaceable>value1</replaceable>
10341 <replaceable>expression</replaceable> = <replaceable>value2</replaceable>
10348 Note that if the left-hand expression yields null, or if there are
10349 no equal right-hand values and at least one right-hand expression yields
10350 null, the result of the <token>IN</token> construct will be null, not false.
10351 This is in accordance with SQL's normal rules for Boolean combinations
10357 <title><literal>NOT IN</literal></title>
10360 <replaceable>expression</replaceable> NOT IN (<replaceable>value</replaceable> <optional>, ...</optional>)
10364 The right-hand side is a parenthesized list
10365 of scalar expressions. The result is <quote>true</quote> if the left-hand expression's
10366 result is unequal to all of the right-hand expressions. This is a shorthand
10370 <replaceable>expression</replaceable> <> <replaceable>value1</replaceable>
10372 <replaceable>expression</replaceable> <> <replaceable>value2</replaceable>
10379 Note that if the left-hand expression yields null, or if there are
10380 no equal right-hand values and at least one right-hand expression yields
10381 null, the result of the <token>NOT IN</token> construct will be null, not true
10382 as one might naively expect.
10383 This is in accordance with SQL's normal rules for Boolean combinations
10389 <literal>x NOT IN y</literal> is equivalent to <literal>NOT (x IN y)</literal> in all
10390 cases. However, null values are much more likely to trip up the novice when
10391 working with <token>NOT IN</token> than when working with <token>IN</token>.
10392 It's best to express your condition positively if possible.
10398 <title><literal>ANY</literal>/<literal>SOME</literal> (array)</title>
10401 <replaceable>expression</replaceable> <replaceable>operator</replaceable> ANY (<replaceable>array expression</replaceable>)
10402 <replaceable>expression</replaceable> <replaceable>operator</replaceable> SOME (<replaceable>array expression</replaceable>)
10406 The right-hand side is a parenthesized expression, which must yield an
10408 The left-hand expression
10409 is evaluated and compared to each element of the array using the
10410 given <replaceable>operator</replaceable>, which must yield a Boolean
10412 The result of <token>ANY</token> is <quote>true</> if any true result is obtained.
10413 The result is <quote>false</> if no true result is found (including the special
10414 case where the array has zero elements).
10418 If the array expression yields a null array, the result of
10419 <token>ANY</token> will be null. If the left-hand expression yields null,
10420 the result of <token>ANY</token> is ordinarily null (though a non-strict
10421 comparison operator could possibly yield a different result).
10422 Also, if the right-hand array contains any null elements and no true
10423 comparison result is obtained, the result of <token>ANY</token>
10424 will be null, not false (again, assuming a strict comparison operator).
10425 This is in accordance with SQL's normal rules for Boolean combinations
10430 <token>SOME</token> is a synonym for <token>ANY</token>.
10435 <title><literal>ALL</literal> (array)</title>
10438 <replaceable>expression</replaceable> <replaceable>operator</replaceable> ALL (<replaceable>array expression</replaceable>)
10442 The right-hand side is a parenthesized expression, which must yield an
10444 The left-hand expression
10445 is evaluated and compared to each element of the array using the
10446 given <replaceable>operator</replaceable>, which must yield a Boolean
10448 The result of <token>ALL</token> is <quote>true</> if all comparisons yield true
10449 (including the special case where the array has zero elements).
10450 The result is <quote>false</> if any false result is found.
10454 If the array expression yields a null array, the result of
10455 <token>ALL</token> will be null. If the left-hand expression yields null,
10456 the result of <token>ALL</token> is ordinarily null (though a non-strict
10457 comparison operator could possibly yield a different result).
10458 Also, if the right-hand array contains any null elements and no false
10459 comparison result is obtained, the result of <token>ALL</token>
10460 will be null, not true (again, assuming a strict comparison operator).
10461 This is in accordance with SQL's normal rules for Boolean combinations
10466 <sect2 id="row-wise-comparison">
10467 <title>Row-wise Comparison</title>
10470 <replaceable>row_constructor</replaceable> <replaceable>operator</replaceable> <replaceable>row_constructor</replaceable>
10474 Each side is a row constructor,
10475 as described in <xref linkend="sql-syntax-row-constructors">.
10476 The two row values must have the same number of fields.
10477 Each side is evaluated and they are compared row-wise. Row comparisons
10478 are allowed when the <replaceable>operator</replaceable> is
10480 <literal><></>,
10483 <literal>></> or
10485 or has semantics similar to one of these. (To be specific, an operator
10486 can be a row comparison operator if it is a member of a B-Tree operator
10487 class, or is the negator of the <literal>=</> member of a B-Tree operator
10492 The <literal>=</> and <literal><></> cases work slightly differently
10493 from the others. Two rows are considered
10494 equal if all their corresponding members are non-null and equal; the rows
10495 are unequal if any corresponding members are non-null and unequal;
10496 otherwise the result of the row comparison is unknown (null).
10500 For the <literal><</>, <literal><=</>, <literal>></> and
10501 <literal>>=</> cases, the row elements are compared left-to-right,
10502 stopping as soon as an unequal or null pair of elements is found.
10503 If either of this pair of elements is null, the result of the
10504 row comparison is unknown (null); otherwise comparison of this pair
10505 of elements determines the result. For example,
10506 <literal>ROW(1,2,NULL) < ROW(1,3,0)</>
10507 yields true, not null, because the third pair of elements are not
10513 Prior to <productname>PostgreSQL</productname> 8.2, the
10514 <literal><</>, <literal><=</>, <literal>></> and <literal>>=</>
10515 cases were not handled per SQL specification. A comparison like
10516 <literal>ROW(a,b) < ROW(c,d)</>
10518 <literal>a < c AND b < d</>
10519 whereas the correct behavior is equivalent to
10520 <literal>a < c OR (a = c AND b < d)</>.
10525 <replaceable>row_constructor</replaceable> IS DISTINCT FROM <replaceable>row_constructor</replaceable>
10529 This construct is similar to a <literal><></literal> row comparison,
10530 but it does not yield null for null inputs. Instead, any null value is
10531 considered unequal to (distinct from) any non-null value, and any two
10532 nulls are considered equal (not distinct). Thus the result will always
10533 be either true or false, never null.
10537 <replaceable>row_constructor</replaceable> IS NOT DISTINCT FROM <replaceable>row_constructor</replaceable>
10541 This construct is similar to a <literal>=</literal> row comparison,
10542 but it does not yield null for null inputs. Instead, any null value is
10543 considered unequal to (distinct from) any non-null value, and any two
10544 nulls are considered equal (not distinct). Thus the result will always
10545 be either true or false, never null.
10551 <sect1 id="functions-srf">
10552 <title>Set Returning Functions</title>
10554 <indexterm zone="functions-srf">
10555 <primary>set returning functions</primary>
10556 <secondary>functions</secondary>
10560 <primary>generate_series</primary>
10564 This section describes functions that possibly return more than one row.
10565 Currently the only functions in this class are series generating functions,
10566 as detailed in <xref linkend="functions-srf-series">.
10569 <table id="functions-srf-series">
10570 <title>Series Generating Functions</title>
10574 <entry>Function</entry>
10575 <entry>Argument Type</entry>
10576 <entry>Return Type</entry>
10577 <entry>Description</entry>
10583 <entry><literal><function>generate_series</function>(<parameter>start</parameter>, <parameter>stop</parameter>)</literal></entry>
10584 <entry><type>int</type> or <type>bigint</type></entry>
10585 <entry><type>setof int</type> or <type>setof bigint</type> (same as argument type)</entry>
10587 Generate a series of values, from <parameter>start</parameter> to <parameter>stop</parameter>
10588 with a step size of one
10593 <entry><literal><function>generate_series</function>(<parameter>start</parameter>, <parameter>stop</parameter>, <parameter>step</parameter>)</literal></entry>
10594 <entry><type>int</type> or <type>bigint</type></entry>
10595 <entry><type>setof int</type> or <type>setof bigint</type> (same as argument type)</entry>
10597 Generate a series of values, from <parameter>start</parameter> to <parameter>stop</parameter>
10598 with a step size of <parameter>step</parameter>
10607 When <parameter>step</parameter> is positive, zero rows are returned if
10608 <parameter>start</parameter> is greater than <parameter>stop</parameter>.
10609 Conversely, when <parameter>step</parameter> is negative, zero rows are
10610 returned if <parameter>start</parameter> is less than <parameter>stop</parameter>.
10611 Zero rows are also returned for <literal>NULL</literal> inputs. It is an error
10612 for <parameter>step</parameter> to be zero. Some examples follow:
10614 select * from generate_series(2,4);
10622 select * from generate_series(5,1,-2);
10630 select * from generate_series(4,3);
10635 select current_date + s.a as dates from generate_series(0,14,7) as s(a);
10646 <sect1 id="functions-info">
10647 <title>System Information Functions</title>
10650 <xref linkend="functions-info-session-table"> shows several
10651 functions that extract session and system information.
10655 In addition to the functions listed in this section, there are a number of
10656 functions related to the statistics system that also provide system
10657 information. See <xref linkend="monitoring-stats-views"> for more
10661 <table id="functions-info-session-table">
10662 <title>Session Information Functions</title>
10665 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
10670 <entry><literal><function>current_database</function>()</literal></entry>
10671 <entry><type>name</type></entry>
10672 <entry>name of current database</entry>
10676 <entry><literal><function>current_schema</function>()</literal></entry>
10677 <entry><type>name</type></entry>
10678 <entry>name of current schema</entry>
10682 <entry><literal><function>current_schemas</function>(<type>boolean</type>)</literal></entry>
10683 <entry><type>name[]</type></entry>
10684 <entry>names of schemas in search path optionally including implicit schemas</entry>
10688 <entry><literal><function>current_user</function></literal></entry>
10689 <entry><type>name</type></entry>
10690 <entry>user name of current execution context</entry>
10694 <entry><literal><function>inet_client_addr</function>()</literal></entry>
10695 <entry><type>inet</type></entry>
10696 <entry>address of the remote connection</entry>
10700 <entry><literal><function>inet_client_port</function>()</literal></entry>
10701 <entry><type>int</type></entry>
10702 <entry>port of the remote connection</entry>
10706 <entry><literal><function>inet_server_addr</function>()</literal></entry>
10707 <entry><type>inet</type></entry>
10708 <entry>address of the local connection</entry>
10712 <entry><literal><function>inet_server_port</function>()</literal></entry>
10713 <entry><type>int</type></entry>
10714 <entry>port of the local connection</entry>
10718 <entry><literal><function>pg_my_temp_schema</function>()</literal></entry>
10719 <entry><type>oid</type></entry>
10720 <entry>OID of session's temporary schema, or 0 if none</entry>
10724 <entry><literal><function>pg_is_other_temp_schema</function>(<type>oid</type>)</literal></entry>
10725 <entry><type>boolean</type></entry>
10726 <entry>is schema another session's temporary schema?</entry>
10730 <entry><literal><function>pg_postmaster_start_time</function>()</literal></entry>
10731 <entry><type>timestamp with time zone</type></entry>
10732 <entry>server start time</entry>
10736 <entry><literal><function>session_user</function></literal></entry>
10737 <entry><type>name</type></entry>
10738 <entry>session user name</entry>
10742 <entry><literal><function>user</function></literal></entry>
10743 <entry><type>name</type></entry>
10744 <entry>equivalent to <function>current_user</function></entry>
10748 <entry><literal><function>version</function>()</literal></entry>
10749 <entry><type>text</type></entry>
10750 <entry><productname>PostgreSQL</> version information</entry>
10757 <primary>user</primary>
10758 <secondary>current</secondary>
10762 <primary>schema</primary>
10763 <secondary>current</secondary>
10767 <primary>search path</primary>
10768 <secondary>current</secondary>
10772 <primary>current_database</primary>
10776 <primary>current_schema</primary>
10780 <primary>current_user</primary>
10784 The <function>session_user</function> is normally the user who initiated
10785 the current database connection; but superusers can change this setting
10786 with <xref linkend="sql-set-session-authorization" endterm="sql-set-session-authorization-title">.
10787 The <function>current_user</function> is the user identifier
10788 that is applicable for permission checking. Normally, it is equal
10789 to the session user, but it can be changed with
10790 <xref linkend="sql-set-role" endterm="sql-set-role-title">.
10791 It also changes during the execution of
10792 functions with the attribute <literal>SECURITY DEFINER</literal>.
10793 In Unix parlance, the session user is the <quote>real user</quote> and
10794 the current user is the <quote>effective user</quote>.
10799 <function>current_user</function>, <function>session_user</function>, and
10800 <function>user</function> have special syntactic status in <acronym>SQL</acronym>:
10801 they must be called without trailing parentheses.
10806 <function>current_schema</function> returns the name of the schema that is
10807 at the front of the search path (or a null value if the search path is
10808 empty). This is the schema that will be used for any tables or
10809 other named objects that are created without specifying a target schema.
10810 <function>current_schemas(boolean)</function> returns an array of the names of all
10811 schemas presently in the search path. The Boolean option determines whether or not
10812 implicitly included system schemas such as <literal>pg_catalog</> are included in the search
10818 The search path can be altered at run time. The command is:
10820 SET search_path TO <replaceable>schema</> <optional>, <replaceable>schema</>, ...</optional>
10826 <primary>inet_client_addr</primary>
10830 <primary>inet_client_port</primary>
10834 <primary>inet_server_addr</primary>
10838 <primary>inet_server_port</primary>
10842 <function>inet_client_addr</function> returns the IP address of the
10843 current client, and <function>inet_client_port</function> returns the
10845 <function>inet_server_addr</function> returns the IP address on which
10846 the server accepted the current connection, and
10847 <function>inet_server_port</function> returns the port number.
10848 All these functions return NULL if the current connection is via a
10849 Unix-domain socket.
10853 <primary>pg_my_temp_schema</primary>
10857 <primary>pg_is_other_temp_schema</primary>
10861 <function>pg_my_temp_schema</function> returns the OID of the current
10862 session's temporary schema, or 0 if it has none (because it has not
10863 created any temporary tables).
10864 <function>pg_is_other_temp_schema</function> returns true if the
10865 given OID is the OID of any other session's temporary schema.
10866 (This can be useful, for example, to exclude other sessions' temporary
10867 tables from a catalog display.)
10871 <primary>pg_postmaster_start_time</primary>
10875 <function>pg_postmaster_start_time</function> returns the
10876 <type>timestamp with time zone</type> when the
10881 <primary>version</primary>
10885 <function>version</function> returns a string describing the
10886 <productname>PostgreSQL</productname> server's version.
10890 <primary>privilege</primary>
10891 <secondary>querying</secondary>
10895 <xref linkend="functions-info-access-table"> lists functions that
10896 allow the user to query object access privileges programmatically.
10897 See <xref linkend="ddl-priv"> for more information about
10901 <table id="functions-info-access-table">
10902 <title>Access Privilege Inquiry Functions</title>
10905 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
10910 <entry><literal><function>has_database_privilege</function>(<parameter>user</parameter>,
10911 <parameter>database</parameter>,
10912 <parameter>privilege</parameter>)</literal>
10914 <entry><type>boolean</type></entry>
10915 <entry>does user have privilege for database</entry>
10918 <entry><literal><function>has_database_privilege</function>(<parameter>database</parameter>,
10919 <parameter>privilege</parameter>)</literal>
10921 <entry><type>boolean</type></entry>
10922 <entry>does current user have privilege for database</entry>
10925 <entry><literal><function>has_function_privilege</function>(<parameter>user</parameter>,
10926 <parameter>function</parameter>,
10927 <parameter>privilege</parameter>)</literal>
10929 <entry><type>boolean</type></entry>
10930 <entry>does user have privilege for function</entry>
10933 <entry><literal><function>has_function_privilege</function>(<parameter>function</parameter>,
10934 <parameter>privilege</parameter>)</literal>
10936 <entry><type>boolean</type></entry>
10937 <entry>does current user have privilege for function</entry>
10940 <entry><literal><function>has_language_privilege</function>(<parameter>user</parameter>,
10941 <parameter>language</parameter>,
10942 <parameter>privilege</parameter>)</literal>
10944 <entry><type>boolean</type></entry>
10945 <entry>does user have privilege for language</entry>
10948 <entry><literal><function>has_language_privilege</function>(<parameter>language</parameter>,
10949 <parameter>privilege</parameter>)</literal>
10951 <entry><type>boolean</type></entry>
10952 <entry>does current user have privilege for language</entry>
10955 <entry><literal><function>has_schema_privilege</function>(<parameter>user</parameter>,
10956 <parameter>schema</parameter>,
10957 <parameter>privilege</parameter>)</literal>
10959 <entry><type>boolean</type></entry>
10960 <entry>does user have privilege for schema</entry>
10963 <entry><literal><function>has_schema_privilege</function>(<parameter>schema</parameter>,
10964 <parameter>privilege</parameter>)</literal>
10966 <entry><type>boolean</type></entry>
10967 <entry>does current user have privilege for schema</entry>
10970 <entry><literal><function>has_table_privilege</function>(<parameter>user</parameter>,
10971 <parameter>table</parameter>,
10972 <parameter>privilege</parameter>)</literal>
10974 <entry><type>boolean</type></entry>
10975 <entry>does user have privilege for table</entry>
10978 <entry><literal><function>has_table_privilege</function>(<parameter>table</parameter>,
10979 <parameter>privilege</parameter>)</literal>
10981 <entry><type>boolean</type></entry>
10982 <entry>does current user have privilege for table</entry>
10985 <entry><literal><function>has_tablespace_privilege</function>(<parameter>user</parameter>,
10986 <parameter>tablespace</parameter>,
10987 <parameter>privilege</parameter>)</literal>
10989 <entry><type>boolean</type></entry>
10990 <entry>does user have privilege for tablespace</entry>
10993 <entry><literal><function>has_tablespace_privilege</function>(<parameter>tablespace</parameter>,
10994 <parameter>privilege</parameter>)</literal>
10996 <entry><type>boolean</type></entry>
10997 <entry>does current user have privilege for tablespace</entry>
11000 <entry><literal><function>pg_has_role</function>(<parameter>user</parameter>,
11001 <parameter>role</parameter>,
11002 <parameter>privilege</parameter>)</literal>
11004 <entry><type>boolean</type></entry>
11005 <entry>does user have privilege for role</entry>
11008 <entry><literal><function>pg_has_role</function>(<parameter>role</parameter>,
11009 <parameter>privilege</parameter>)</literal>
11011 <entry><type>boolean</type></entry>
11012 <entry>does current user have privilege for role</entry>
11019 <primary>has_database_privilege</primary>
11022 <primary>has_function_privilege</primary>
11025 <primary>has_language_privilege</primary>
11028 <primary>has_schema_privilege</primary>
11031 <primary>has_table_privilege</primary>
11034 <primary>has_tablespace_privilege</primary>
11037 <primary>pg_has_role</primary>
11041 <function>has_database_privilege</function> checks whether a user
11042 can access a database in a particular way. The possibilities for its
11043 arguments are analogous to <function>has_table_privilege</function>.
11044 The desired access privilege type must evaluate to
11045 <literal>CREATE</literal>,
11046 <literal>CONNECT</literal>,
11047 <literal>TEMPORARY</literal>, or
11048 <literal>TEMP</literal> (which is equivalent to
11049 <literal>TEMPORARY</literal>).
11053 <function>has_function_privilege</function> checks whether a user
11054 can access a function in a particular way. The possibilities for its
11055 arguments are analogous to <function>has_table_privilege</function>.
11056 When specifying a function by a text string rather than by OID,
11057 the allowed input is the same as for the <type>regprocedure</> data type
11058 (see <xref linkend="datatype-oid">).
11059 The desired access privilege type must evaluate to
11060 <literal>EXECUTE</literal>.
11063 SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');
11068 <function>has_language_privilege</function> checks whether a user
11069 can access a procedural language in a particular way. The possibilities
11070 for its arguments are analogous to <function>has_table_privilege</function>.
11071 The desired access privilege type must evaluate to
11072 <literal>USAGE</literal>.
11076 <function>has_schema_privilege</function> checks whether a user
11077 can access a schema in a particular way. The possibilities for its
11078 arguments are analogous to <function>has_table_privilege</function>.
11079 The desired access privilege type must evaluate to
11080 <literal>CREATE</literal> or
11081 <literal>USAGE</literal>.
11085 <function>has_table_privilege</function> checks whether a user
11086 can access a table in a particular way. The user can be
11087 specified by name or by OID
11088 (<literal>pg_authid.oid</literal>), or if the argument is
11090 <function>current_user</function> is assumed. The table can be specified
11091 by name or by OID. (Thus, there are actually six variants of
11092 <function>has_table_privilege</function>, which can be distinguished by
11093 the number and types of their arguments.) When specifying by name,
11094 the name can be schema-qualified if necessary.
11095 The desired access privilege type
11096 is specified by a text string, which must evaluate to one of the
11097 values <literal>SELECT</literal>, <literal>INSERT</literal>,
11098 <literal>UPDATE</literal>, <literal>DELETE</literal>,
11099 <literal>REFERENCES</literal>, or <literal>TRIGGER</literal>.
11100 (Case of the string is not significant, however.)
11103 SELECT has_table_privilege('myschema.mytable', 'select');
11108 <function>has_tablespace_privilege</function> checks whether a user
11109 can access a tablespace in a particular way. The possibilities for its
11110 arguments are analogous to <function>has_table_privilege</function>.
11111 The desired access privilege type must evaluate to
11112 <literal>CREATE</literal>.
11116 <function>pg_has_role</function> checks whether a user
11117 can access a role in a particular way. The possibilities for its
11118 arguments are analogous to <function>has_table_privilege</function>.
11119 The desired access privilege type must evaluate to
11120 <literal>MEMBER</literal> or
11121 <literal>USAGE</literal>.
11122 <literal>MEMBER</literal> denotes direct or indirect membership in
11123 the role (that is, the right to do <command>SET ROLE</>), while
11124 <literal>USAGE</literal> denotes whether the privileges of the role
11125 are immediately available without doing <command>SET ROLE</>.
11129 To test whether a user holds a grant option on the privilege,
11130 append <literal>WITH GRANT OPTION</literal> to the privilege key
11131 word; for example <literal>'UPDATE WITH GRANT OPTION'</literal>.
11135 <xref linkend="functions-info-schema-table"> shows functions that
11136 determine whether a certain object is <firstterm>visible</> in the
11137 current schema search path.
11138 For example, a table is said to be visible if its
11139 containing schema is in the search path and no table of the same
11140 name appears earlier in the search path. This is equivalent to the
11141 statement that the table can be referenced by name without explicit
11142 schema qualification. To list the names of all visible tables:
11144 SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
11148 <table id="functions-info-schema-table">
11149 <title>Schema Visibility Inquiry Functions</title>
11152 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
11157 <entry><literal><function>pg_conversion_is_visible</function>(<parameter>conversion_oid</parameter>)</literal>
11159 <entry><type>boolean</type></entry>
11160 <entry>is conversion visible in search path</entry>
11163 <entry><literal><function>pg_function_is_visible</function>(<parameter>function_oid</parameter>)</literal>
11165 <entry><type>boolean</type></entry>
11166 <entry>is function visible in search path</entry>
11169 <entry><literal><function>pg_operator_is_visible</function>(<parameter>operator_oid</parameter>)</literal>
11171 <entry><type>boolean</type></entry>
11172 <entry>is operator visible in search path</entry>
11175 <entry><literal><function>pg_opclass_is_visible</function>(<parameter>opclass_oid</parameter>)</literal>
11177 <entry><type>boolean</type></entry>
11178 <entry>is operator class visible in search path</entry>
11181 <entry><literal><function>pg_table_is_visible</function>(<parameter>table_oid</parameter>)</literal>
11183 <entry><type>boolean</type></entry>
11184 <entry>is table visible in search path</entry>
11187 <entry><literal><function>pg_ts_config_is_visible</function>(<parameter>config_oid</parameter>)</literal>
11189 <entry><type>boolean</type></entry>
11190 <entry>is text search configuration visible in search path</entry>
11193 <entry><literal><function>pg_ts_dict_is_visible</function>(<parameter>dict_oid</parameter>)</literal>
11195 <entry><type>boolean</type></entry>
11196 <entry>is text search dictionary visible in search path</entry>
11199 <entry><literal><function>pg_ts_parser_is_visible</function>(<parameter>parser_oid</parameter>)</literal>
11201 <entry><type>boolean</type></entry>
11202 <entry>is text search parser visible in search path</entry>
11205 <entry><literal><function>pg_ts_template_is_visible</function>(<parameter>template_oid</parameter>)</literal>
11207 <entry><type>boolean</type></entry>
11208 <entry>is text search template visible in search path</entry>
11211 <entry><literal><function>pg_type_is_visible</function>(<parameter>type_oid</parameter>)</literal>
11213 <entry><type>boolean</type></entry>
11214 <entry>is type (or domain) visible in search path</entry>
11221 <primary>pg_conversion_is_visible</primary>
11224 <primary>pg_function_is_visible</primary>
11227 <primary>pg_operator_is_visible</primary>
11230 <primary>pg_opclass_is_visible</primary>
11233 <primary>pg_table_is_visible</primary>
11236 <primary>pg_ts_config_is_visible</primary>
11239 <primary>pg_ts_dict_is_visible</primary>
11242 <primary>pg_ts_parser_is_visible</primary>
11245 <primary>pg_ts_template_is_visible</primary>
11248 <primary>pg_type_is_visible</primary>
11252 Each function performs the visibility check for one type of database
11253 object. Note that <function>pg_table_is_visible</function> can also be used
11254 with views, indexes and sequences; <function>pg_type_is_visible</function>
11255 can also be used with domains. For functions and operators, an object in
11256 the search path is visible if there is no object of the same name
11257 <emphasis>and argument data type(s)</> earlier in the path. For operator
11258 classes, both name and associated index access method are considered.
11262 All these functions require object OIDs to identify the object to be
11263 checked. If you want to test an object by name, it is convenient to use
11264 the OID alias types (<type>regclass</>, <type>regtype</>,
11265 <type>regprocedure</>, <type>regoperator</>, <type>regconfig</>,
11266 or <type>regdictionary</>),
11269 SELECT pg_type_is_visible('myschema.widget'::regtype);
11271 Note that it would not make much sense to test an unqualified name in
11272 this way — if the name can be recognized at all, it must be visible.
11276 <primary>format_type</primary>
11280 <primary>pg_get_viewdef</primary>
11284 <primary>pg_get_ruledef</primary>
11288 <primary>pg_get_indexdef</primary>
11292 <primary>pg_get_triggerdef</primary>
11296 <primary>pg_get_constraintdef</primary>
11300 <primary>pg_get_expr</primary>
11304 <primary>pg_get_userbyid</primary>
11308 <primary>pg_get_serial_sequence</primary>
11312 <primary>pg_tablespace_databases</primary>
11316 <xref linkend="functions-info-catalog-table"> lists functions that
11317 extract information from the system catalogs.
11320 <table id="functions-info-catalog-table">
11321 <title>System Catalog Information Functions</title>
11324 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
11329 <entry><literal><function>format_type</function>(<parameter>type_oid</parameter>, <parameter>typemod</>)</literal></entry>
11330 <entry><type>text</type></entry>
11331 <entry>get SQL name of a data type</entry>
11334 <entry><literal><function>pg_get_constraintdef</function>(<parameter>constraint_oid</parameter>)</literal></entry>
11335 <entry><type>text</type></entry>
11336 <entry>get definition of a constraint</entry>
11339 <entry><literal><function>pg_get_constraintdef</function>(<parameter>constraint_oid</parameter>, <parameter>pretty_bool</>)</literal></entry>
11340 <entry><type>text</type></entry>
11341 <entry>get definition of a constraint</entry>
11344 <entry><literal><function>pg_get_expr</function>(<parameter>expr_text</parameter>, <parameter>relation_oid</>)</literal></entry>
11345 <entry><type>text</type></entry>
11346 <entry>decompile internal form of an expression, assuming that any Vars
11347 in it refer to the relation indicated by the second parameter</entry>
11350 <entry><literal><function>pg_get_expr</function>(<parameter>expr_text</parameter>, <parameter>relation_oid</>, <parameter>pretty_bool</>)</literal></entry>
11351 <entry><type>text</type></entry>
11352 <entry>decompile internal form of an expression, assuming that any Vars
11353 in it refer to the relation indicated by the second parameter</entry>
11356 <entry><literal><function>pg_get_indexdef</function>(<parameter>index_oid</parameter>)</literal></entry>
11357 <entry><type>text</type></entry>
11358 <entry>get <command>CREATE INDEX</> command for index</entry>
11361 <entry><literal><function>pg_get_indexdef</function>(<parameter>index_oid</parameter>, <parameter>column_no</>, <parameter>pretty_bool</>)</literal></entry>
11362 <entry><type>text</type></entry>
11363 <entry>get <command>CREATE INDEX</> command for index,
11364 or definition of just one index column when
11365 <parameter>column_no</> is not zero</entry>
11368 <entry><literal><function>pg_get_ruledef</function>(<parameter>rule_oid</parameter>)</literal></entry>
11369 <entry><type>text</type></entry>
11370 <entry>get <command>CREATE RULE</> command for rule</entry>
11373 <entry><literal><function>pg_get_ruledef</function>(<parameter>rule_oid</parameter>, <parameter>pretty_bool</>)</literal></entry>
11374 <entry><type>text</type></entry>
11375 <entry>get <command>CREATE RULE</> command for rule</entry>
11378 <entry><literal><function>pg_get_serial_sequence</function>(<parameter>table_name</parameter>, <parameter>column_name</parameter>)</literal></entry>
11379 <entry><type>text</type></entry>
11380 <entry>get name of the sequence that a <type>serial</type> or <type>bigserial</type> column
11384 <entry><function>pg_get_triggerdef</function>(<parameter>trigger_oid</parameter>)</entry>
11385 <entry><type>text</type></entry>
11386 <entry>get <command>CREATE [ CONSTRAINT ] TRIGGER</> command for trigger</entry>
11389 <entry><literal><function>pg_get_userbyid</function>(<parameter>roleid</parameter>)</literal></entry>
11390 <entry><type>name</type></entry>
11391 <entry>get role name with given ID</entry>
11394 <entry><literal><function>pg_get_viewdef</function>(<parameter>view_name</parameter>)</literal></entry>
11395 <entry><type>text</type></entry>
11396 <entry>get underlying <command>SELECT</command> command for view (<emphasis>deprecated</emphasis>)</entry>
11399 <entry><literal><function>pg_get_viewdef</function>(<parameter>view_name</parameter>, <parameter>pretty_bool</>)</literal></entry>
11400 <entry><type>text</type></entry>
11401 <entry>get underlying <command>SELECT</command> command for view (<emphasis>deprecated</emphasis>)</entry>
11404 <entry><literal><function>pg_get_viewdef</function>(<parameter>view_oid</parameter>)</literal></entry>
11405 <entry><type>text</type></entry>
11406 <entry>get underlying <command>SELECT</command> command for view</entry>
11409 <entry><literal><function>pg_get_viewdef</function>(<parameter>view_oid</parameter>, <parameter>pretty_bool</>)</literal></entry>
11410 <entry><type>text</type></entry>
11411 <entry>get underlying <command>SELECT</command> command for view</entry>
11414 <entry><literal><function>pg_tablespace_databases</function>(<parameter>tablespace_oid</parameter>)</literal></entry>
11415 <entry><type>setof oid</type></entry>
11416 <entry>get the set of database OIDs that have objects in the tablespace</entry>
11423 <function>format_type</function> returns the SQL name of a data type that
11424 is identified by its type OID and possibly a type modifier. Pass NULL
11425 for the type modifier if no specific modifier is known.
11429 <function>pg_get_constraintdef</function>,
11430 <function>pg_get_indexdef</function>, <function>pg_get_ruledef</function>,
11431 and <function>pg_get_triggerdef</function>, respectively reconstruct the
11432 creating command for a constraint, index, rule, or trigger. (Note that this
11433 is a decompiled reconstruction, not the original text of the command.)
11434 <function>pg_get_expr</function> decompiles the internal form of an
11435 individual expression, such as the default value for a column. It can be
11436 useful when examining the contents of system catalogs.
11437 <function>pg_get_viewdef</function> reconstructs the <command>SELECT</>
11438 query that defines a view. Most of these functions come in two variants,
11439 one of which can optionally <quote>pretty-print</> the result. The
11440 pretty-printed format is more readable, but the default format is more
11441 likely to be interpreted the same way by future versions of
11442 <productname>PostgreSQL</>; avoid using pretty-printed output for dump
11443 purposes. Passing <literal>false</> for the pretty-print parameter yields
11444 the same result as the variant that does not have the parameter at all.
11448 <function>pg_get_serial_sequence</function> returns the name of the
11449 sequence associated with a column, or NULL if no sequence is associated
11450 with the column. The first input parameter is a table name with
11451 optional schema, and the second parameter is a column name. Because
11452 the first parameter is potentially a schema and table, it is not treated
11453 as a double-quoted identifier, meaning it is lowercased by default,
11454 while the second parameter, being just a column name, is treated as
11455 double-quoted and has its case preserved. The function returns a value
11456 suitably formatted for passing to the sequence functions (see <xref
11457 linkend="functions-sequence">). This association can be modified or
11458 removed with <command>ALTER SEQUENCE OWNED BY</>. (The function
11459 probably should have been called
11460 <function>pg_get_owned_sequence</function>; its name reflects the fact
11461 that it's typically used with <type>serial</> or <type>bigserial</>
11466 <function>pg_get_userbyid</function> extracts a role's name given
11471 <function>pg_tablespace_databases</function> allows a tablespace to be
11472 examined. It returns the set of OIDs of databases that have objects stored
11473 in the tablespace. If this function returns any rows, the tablespace is not
11474 empty and cannot be dropped. To display the specific objects populating the
11475 tablespace, you will need to connect to the databases identified by
11476 <function>pg_tablespace_databases</function> and query their
11477 <structname>pg_class</> catalogs.
11481 <primary>col_description</primary>
11485 <primary>obj_description</primary>
11489 <primary>shobj_description</primary>
11493 <primary>comment</primary>
11494 <secondary sortas="database objects">about database objects</secondary>
11498 The functions shown in <xref linkend="functions-info-comment-table">
11499 extract comments previously stored with the <xref linkend="sql-comment"
11500 endterm="sql-comment-title"> command. A null value is returned if no
11501 comment could be found matching the specified parameters.
11504 <table id="functions-info-comment-table">
11505 <title>Comment Information Functions</title>
11508 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
11513 <entry><literal><function>col_description</function>(<parameter>table_oid</parameter>, <parameter>column_number</parameter>)</literal></entry>
11514 <entry><type>text</type></entry>
11515 <entry>get comment for a table column</entry>
11518 <entry><literal><function>obj_description</function>(<parameter>object_oid</parameter>, <parameter>catalog_name</parameter>)</literal></entry>
11519 <entry><type>text</type></entry>
11520 <entry>get comment for a database object</entry>
11523 <entry><literal><function>obj_description</function>(<parameter>object_oid</parameter>)</literal></entry>
11524 <entry><type>text</type></entry>
11525 <entry>get comment for a database object (<emphasis>deprecated</emphasis>)</entry>
11528 <entry><literal><function>shobj_description</function>(<parameter>object_oid</parameter>, <parameter>catalog_name</parameter>)</literal></entry>
11529 <entry><type>text</type></entry>
11530 <entry>get comment for a shared database object</entry>
11537 <function>col_description</function> returns the comment for a table column,
11538 which is specified by the OID of its table and its column number.
11539 <function>obj_description</function> cannot be used for table columns since
11540 columns do not have OIDs of their own.
11544 The two-parameter form of <function>obj_description</function> returns the
11545 comment for a database object specified by its OID and the name of the
11546 containing system catalog. For example,
11547 <literal>obj_description(123456,'pg_class')</literal>
11548 would retrieve the comment for a table with OID 123456.
11549 The one-parameter form of <function>obj_description</function> requires only
11550 the object OID. It is now deprecated since there is no guarantee that
11551 OIDs are unique across different system catalogs; therefore, the wrong
11552 comment could be returned.
11556 <function>shobj_description</function> is used just like
11557 <function>obj_description</function> only that it is used for retrieving
11558 comments on shared objects. Some system catalogs are global to all
11559 databases within each cluster and their descriptions are stored globally
11564 <primary>txid_current</primary>
11568 <primary>txid_current_snapshot</primary>
11572 <primary>txid_snapshot_xmin</primary>
11576 <primary>txid_snapshot_xmax</primary>
11580 <primary>txid_snapshot_xip</primary>
11584 <primary>txid_visible_in_snapshot</primary>
11588 The functions shown in <xref linkend="functions-txid-snapshot">
11589 export server internal transaction information to user level. The main
11590 use of these functions is to determine which transactions were committed
11591 between two snapshots.
11594 <table id="functions-txid-snapshot">
11595 <title>Transaction IDs and snapshots</title>
11598 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
11603 <entry><literal><function>txid_current</function>()</literal></entry>
11604 <entry><type>bigint</type></entry>
11605 <entry>get current transaction ID</entry>
11608 <entry><literal><function>txid_current_snapshot</function>()</literal></entry>
11609 <entry><type>txid_snapshot</type></entry>
11610 <entry>get current snapshot</entry>
11613 <entry><literal><function>txid_snapshot_xmin</function>(<parameter>txid_snapshot</parameter>)</literal></entry>
11614 <entry><type>bigint</type></entry>
11615 <entry>get xmin of snapshot</entry>
11618 <entry><literal><function>txid_snapshot_xmax</function>(<parameter>txid_snapshot</parameter>)</literal></entry>
11619 <entry><type>bigint</type></entry>
11620 <entry>get xmax of snapshot</entry>
11623 <entry><literal><function>txid_snapshot_xip</function>(<parameter>txid_snapshot</parameter>)</literal></entry>
11624 <entry><type>setof bigint</type></entry>
11625 <entry>get in-progress transaction IDs in snapshot</entry>
11628 <entry><literal><function>txid_visible_in_snapshot</function>(<parameter>bigint</parameter>, <parameter>txid_snapshot</parameter>)</literal></entry>
11629 <entry><type>boolean</type></entry>
11630 <entry>is transaction ID visible in snapshot?</entry>
11637 The internal transaction ID type (<type>xid</>) is 32 bits wide and so
11638 it wraps around every 4 billion transactions. However, these functions
11639 export a 64-bit format that is extended with an <quote>epoch</> counter
11640 so that it will not wrap around for the life of an installation.
11641 The data type used by these functions, <type>txid_snapshot</type>,
11642 stores information about transaction ID
11643 visibility at a particular moment in time. Its components are
11644 described in <xref linkend="functions-txid-snapshot-parts">.
11647 <table id="functions-txid-snapshot-parts">
11648 <title>Snapshot components</title>
11652 <entry>Name</entry>
11653 <entry>Description</entry>
11660 <entry><type>xmin</type></entry>
11662 Earliest transaction ID (txid) that is still active. All earlier
11663 transactions will either be committed and visible, or rolled
11669 <entry><type>xmax</type></entry>
11671 First as-yet-unassigned txid. All txids later than this one are
11672 not yet started as of the time of the snapshot, and thus invisible.
11677 <entry><type>xip_list</type></entry>
11679 Active txids at the time of the snapshot. All of them are between
11680 <literal>xmin</> and <literal>xmax</>. A txid that is
11681 <literal>xmin <= txid < xmax</literal> and not in this list was
11682 already completed at the time of the snapshot, and thus either visible
11683 or dead according to its commit status.
11692 <type>txid_snapshot</>'s textual representation is
11693 <literal><replaceable>xmin</>:<replaceable>xmax</>:<replaceable>xip_list</></literal>.
11694 For example <literal>10:20:10,14,15</literal> means
11695 <literal>xmin=10, xmax=20, xip_list=10, 14, 15</literal>.
11699 <sect1 id="functions-admin">
11700 <title>System Administration Functions</title>
11703 <xref linkend="functions-admin-set-table"> shows the functions
11704 available to query and alter run-time configuration parameters.
11707 <table id="functions-admin-set-table">
11708 <title>Configuration Settings Functions</title>
11711 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry></row>
11717 <literal><function>current_setting</function>(<parameter>setting_name</parameter>)</literal>
11719 <entry><type>text</type></entry>
11720 <entry>current value of setting</entry>
11724 <literal><function>set_config(<parameter>setting_name</parameter>,
11725 <parameter>new_value</parameter>,
11726 <parameter>is_local</parameter>)</function></literal>
11728 <entry><type>text</type></entry>
11729 <entry>set parameter and return new value</entry>
11736 <primary>SET</primary>
11740 <primary>SHOW</primary>
11744 <primary>configuration</primary>
11745 <secondary sortas="server">of the server</secondary>
11746 <tertiary>functions</tertiary>
11750 The function <function>current_setting</function> yields the
11751 current value of the setting <parameter>setting_name</parameter>.
11752 It corresponds to the <acronym>SQL</acronym> command
11753 <command>SHOW</command>. An example:
11755 SELECT current_setting('datestyle');
11765 <function>set_config</function> sets the parameter
11766 <parameter>setting_name</parameter> to
11767 <parameter>new_value</parameter>. If
11768 <parameter>is_local</parameter> is <literal>true</literal>, the
11769 new value will only apply to the current transaction. If you want
11770 the new value to apply for the current session, use
11771 <literal>false</literal> instead. The function corresponds to the
11772 SQL command <command>SET</command>. An example:
11774 SELECT set_config('log_statement_stats', 'off', false);
11784 <primary>pg_cancel_backend</primary>
11787 <primary>pg_reload_conf</primary>
11790 <primary>pg_rotate_logfile</primary>
11794 <primary>signal</primary>
11795 <secondary sortas="backend">backend processes</secondary>
11799 The functions shown in <xref
11800 linkend="functions-admin-signal-table"> send control signals to
11801 other server processes. Use of these functions is restricted
11805 <table id="functions-admin-signal-table">
11806 <title>Server Signalling Functions</title>
11809 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
11816 <literal><function>pg_cancel_backend</function>(<parameter>pid</parameter> <type>int</>)</literal>
11818 <entry><type>boolean</type></entry>
11819 <entry>Cancel a backend's current query</entry>
11823 <literal><function>pg_reload_conf</function>()</literal>
11825 <entry><type>boolean</type></entry>
11826 <entry>Cause server processes to reload their configuration files</entry>
11830 <literal><function>pg_rotate_logfile</function>()</literal>
11832 <entry><type>boolean</type></entry>
11833 <entry>Rotate server's log file</entry>
11840 Each of these functions returns <literal>true</literal> if
11841 successful and <literal>false</literal> otherwise.
11845 <function>pg_cancel_backend</> sends a query cancel
11846 (<systemitem>SIGINT</>) signal to a backend process identified by
11847 process ID. The process ID of an active backend can be found from
11848 the <structfield>procpid</structfield> column in the
11849 <structname>pg_stat_activity</structname> view, or by listing the
11850 <command>postgres</command> processes on the server with
11851 <application>ps</>.
11855 <function>pg_reload_conf</> sends a <systemitem>SIGHUP</> signal
11856 to the server, causing the configuration files
11857 to be reloaded by all server processes.
11861 <function>pg_rotate_logfile</> signals the log-file manager to switch
11862 to a new output file immediately. This works only when the built-in
11863 log collector is running, since otherwise there is no log-file manager
11868 <primary>pg_start_backup</primary>
11871 <primary>pg_stop_backup</primary>
11874 <primary>pg_switch_xlog</primary>
11877 <primary>pg_current_xlog_location</primary>
11880 <primary>pg_current_xlog_insert_location</primary>
11883 <primary>pg_xlogfile_name_offset</primary>
11886 <primary>pg_xlogfile_name</primary>
11889 <primary>backup</primary>
11893 The functions shown in <xref
11894 linkend="functions-admin-backup-table"> assist in making on-line backups.
11895 Use of the first three functions is restricted to superusers.
11898 <table id="functions-admin-backup-table">
11899 <title>Backup Control Functions</title>
11902 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
11909 <literal><function>pg_start_backup</function>(<parameter>label</> <type>text</>)</literal>
11911 <entry><type>text</type></entry>
11912 <entry>Set up for performing on-line backup</entry>
11916 <literal><function>pg_stop_backup</function>()</literal>
11918 <entry><type>text</type></entry>
11919 <entry>Finish performing on-line backup</entry>
11923 <literal><function>pg_switch_xlog</function>()</literal>
11925 <entry><type>text</type></entry>
11926 <entry>Force switch to a new transaction log file</entry>
11930 <literal><function>pg_current_xlog_location</function>()</literal>
11932 <entry><type>text</type></entry>
11933 <entry>Get current transaction log write location</entry>
11937 <literal><function>pg_current_xlog_insert_location</function>()</literal>
11939 <entry><type>text</type></entry>
11940 <entry>Get current transaction log insert location</entry>
11944 <literal><function>pg_xlogfile_name_offset</function>(<parameter>location</> <type>text</>)</literal>
11946 <entry><type>text</>, <type>integer</></entry>
11947 <entry>Convert transaction log location string to file name and decimal byte offset within file</entry>
11951 <literal><function>pg_xlogfile_name</function>(<parameter>location</> <type>text</>)</literal>
11953 <entry><type>text</type></entry>
11954 <entry>Convert transaction log location string to file name</entry>
11961 <function>pg_start_backup</> accepts a single parameter which is an
11962 arbitrary user-defined label for the backup. (Typically this would be
11963 the name under which the backup dump file will be stored.) The function
11964 writes a backup label file into the database cluster's data directory,
11965 and then returns the backup's starting transaction log location as text. The user
11966 need not pay any attention to this result value, but it is provided in
11969 postgres=# select pg_start_backup('label_goes_here');
11978 <function>pg_stop_backup</> removes the label file created by
11979 <function>pg_start_backup</>, and instead creates a backup history file in
11980 the transaction log archive area. The history file includes the label given to
11981 <function>pg_start_backup</>, the starting and ending transaction log locations for
11982 the backup, and the starting and ending times of the backup. The return
11983 value is the backup's ending transaction log location (which again might be of little
11984 interest). After noting the ending location, the current transaction log insertion
11985 point is automatically advanced to the next transaction log file, so that the
11986 ending transaction log file can be archived immediately to complete the backup.
11990 <function>pg_switch_xlog</> moves to the next transaction log file, allowing the
11991 current file to be archived (assuming you are using continuous archiving).
11992 The result is the ending transaction log location within the just-completed transaction log file.
11993 If there has been no transaction log activity since the last transaction log switch,
11994 <function>pg_switch_xlog</> does nothing and returns the end location
11995 of the previous transaction log file.
11999 <function>pg_current_xlog_location</> displays the current transaction log write
12000 location in the same format used by the above functions. Similarly,
12001 <function>pg_current_xlog_insert_location</> displays the current transaction log
12002 insertion point. The insertion point is the <quote>logical</> end
12003 of the transaction log
12004 at any instant, while the write location is the end of what has actually
12005 been written out from the server's internal buffers. The write location
12006 is the end of what can be examined from outside the server, and is usually
12007 what you want if you are interested in archiving partially-complete transaction log
12008 files. The insertion point is made available primarily for server
12009 debugging purposes. These are both read-only operations and do not
12010 require superuser permissions.
12014 You can use <function>pg_xlogfile_name_offset</> to extract the
12015 corresponding transaction log file name and byte offset from the results of any of the
12016 above functions. For example:
12018 postgres=# select * from pg_xlogfile_name_offset(pg_stop_backup());
12019 file_name | file_offset
12020 --------------------------+-------------
12021 00000001000000000000000D | 4039624
12024 Similarly, <function>pg_xlogfile_name</> extracts just the transaction log file name.
12025 When the given transaction log location is exactly at a transaction log file boundary, both
12026 these functions return the name of the preceding transaction log file.
12027 This is usually the desired behavior for managing transaction log archiving
12028 behavior, since the preceding file is the last one that currently
12029 needs to be archived.
12033 For details about proper usage of these functions, see
12034 <xref linkend="continuous-archiving">.
12038 The functions shown in <xref linkend="functions-admin-dbsize"> calculate
12039 the actual disk space usage of database objects.
12043 <primary>pg_column_size</primary>
12046 <primary>pg_database_size</primary>
12049 <primary>pg_relation_size</primary>
12052 <primary>pg_size_pretty</primary>
12055 <primary>pg_tablespace_size</primary>
12058 <primary>pg_total_relation_size</primary>
12061 <table id="functions-admin-dbsize">
12062 <title>Database Object Size Functions</title>
12065 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
12071 <entry><function>pg_column_size</function>(<type>any</type>)</entry>
12072 <entry><type>int</type></entry>
12073 <entry>Number of bytes used to store a particular value (possibly compressed)</entry>
12077 <literal><function>pg_database_size</function>(<type>oid</type>)</literal>
12079 <entry><type>bigint</type></entry>
12080 <entry>Disk space used by the database with the specified OID</entry>
12084 <literal><function>pg_database_size</function>(<type>name</type>)</literal>
12086 <entry><type>bigint</type></entry>
12087 <entry>Disk space used by the database with the specified name</entry>
12091 <literal><function>pg_relation_size</function>(<type>oid</type>)</literal>
12093 <entry><type>bigint</type></entry>
12094 <entry>Disk space used by the table or index with the specified OID</entry>
12098 <literal><function>pg_relation_size</function>(<type>text</type>)</literal>
12100 <entry><type>bigint</type></entry>
12102 Disk space used by the table or index with the specified name.
12103 The table name can be qualified with a schema name
12108 <literal><function>pg_size_pretty</function>(<type>bigint</type>)</literal>
12110 <entry><type>text</type></entry>
12111 <entry>Converts a size in bytes into a human-readable format with size units</entry>
12115 <literal><function>pg_tablespace_size</function>(<type>oid</type>)</literal>
12117 <entry><type>bigint</type></entry>
12118 <entry>Disk space used by the tablespace with the specified OID</entry>
12122 <literal><function>pg_tablespace_size</function>(<type>name</type>)</literal>
12124 <entry><type>bigint</type></entry>
12125 <entry>Disk space used by the tablespace with the specified name</entry>
12129 <literal><function>pg_total_relation_size</function>(<type>oid</type>)</literal>
12131 <entry><type>bigint</type></entry>
12133 Total disk space used by the table with the specified OID,
12134 including indexes and toasted data
12139 <literal><function>pg_total_relation_size</function>(<type>text</type>)</literal>
12141 <entry><type>bigint</type></entry>
12143 Total disk space used by the table with the specified name,
12144 including indexes and toasted data. The table name can be
12145 qualified with a schema name
12153 <function>pg_column_size</> shows the space used to store any individual
12158 <function>pg_database_size</function> and <function>pg_tablespace_size</>
12159 accept the OID or name of a database or tablespace, and return the total
12160 disk space used therein.
12164 <function>pg_relation_size</> accepts the OID or name of a table, index or
12165 toast table, and returns the size in bytes.
12169 <function>pg_size_pretty</> can be used to format the result of one of
12170 the other functions in a human-readable way, using kB, MB, GB or TB as
12175 <function>pg_total_relation_size</> accepts the OID or name of a
12176 table or toast table, and returns the size in bytes of the data
12177 and all associated indexes and toast tables.
12181 The functions shown in <xref
12182 linkend="functions-admin-genfile"> provide native file access to
12183 files on the machine hosting the server. Only files within the
12184 database cluster directory and the <varname>log_directory</> can be
12185 accessed. Use a relative path for files within the cluster directory,
12186 and a path matching the <varname>log_directory</> configuration setting
12187 for log files. Use of these functions is restricted to superusers.
12190 <table id="functions-admin-genfile">
12191 <title>Generic File Access Functions</title>
12194 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
12201 <literal><function>pg_ls_dir</function>(<parameter>dirname</> <type>text</>)</literal>
12203 <entry><type>setof text</type></entry>
12204 <entry>List the contents of a directory</entry>
12208 <literal><function>pg_read_file</function>(<parameter>filename</> <type>text</>, <parameter>offset</> <type>bigint</>, <parameter>length</> <type>bigint</>)</literal>
12210 <entry><type>text</type></entry>
12211 <entry>Return the contents of a text file</entry>
12215 <literal><function>pg_stat_file</function>(<parameter>filename</> <type>text</>)</literal>
12217 <entry><type>record</type></entry>
12218 <entry>Return information about a file</entry>
12225 <primary>pg_ls_dir</primary>
12228 <function>pg_ls_dir</> returns all the names in the specified
12229 directory, except the special entries <quote><literal>.</></> and
12230 <quote><literal>..</></>.
12234 <primary>pg_read_file</primary>
12237 <function>pg_read_file</> returns part of a text file, starting
12238 at the given <parameter>offset</>, returning at most <parameter>length</>
12239 bytes (less if the end of file is reached first). If <parameter>offset</>
12240 is negative, it is relative to the end of the file.
12244 <primary>pg_stat_file</primary>
12247 <function>pg_stat_file</> returns a record containing the file
12248 size, last accessed time stamp, last modified time stamp,
12249 last file status change time stamp (Unix platforms only),
12250 file creation time stamp (Windows only), and a <type>boolean</type>
12251 indicating if it is a directory. Typical usages include:
12253 SELECT * FROM pg_stat_file('filename');
12254 SELECT (pg_stat_file('filename')).modification;
12259 The functions shown in <xref linkend="functions-advisory-locks"> manage
12260 advisory locks. For details about proper usage of these functions, see
12261 <xref linkend="advisory-locks">.
12264 <table id="functions-advisory-locks">
12265 <title>Advisory Lock Functions</title>
12268 <row><entry>Name</entry> <entry>Return Type</entry> <entry>Description</entry>
12275 <literal><function>pg_advisory_lock</function>(<parameter>key</> <type>bigint</>)</literal>
12277 <entry><type>void</type></entry>
12278 <entry>Obtain exclusive advisory lock</entry>
12282 <literal><function>pg_advisory_lock</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
12284 <entry><type>void</type></entry>
12285 <entry>Obtain exclusive advisory lock</entry>
12290 <literal><function>pg_advisory_lock_shared</function>(<parameter>key</> <type>bigint</>)</literal>
12292 <entry><type>void</type></entry>
12293 <entry>Obtain shared advisory lock</entry>
12297 <literal><function>pg_advisory_lock_shared</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
12299 <entry><type>void</type></entry>
12300 <entry>Obtain shared advisory lock</entry>
12305 <literal><function>pg_try_advisory_lock</function>(<parameter>key</> <type>bigint</>)</literal>
12307 <entry><type>boolean</type></entry>
12308 <entry>Obtain exclusive advisory lock if available</entry>
12312 <literal><function>pg_try_advisory_lock</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
12314 <entry><type>boolean</type></entry>
12315 <entry>Obtain exclusive advisory lock if available</entry>
12320 <literal><function>pg_try_advisory_lock_shared</function>(<parameter>key</> <type>bigint</>)</literal>
12322 <entry><type>boolean</type></entry>
12323 <entry>Obtain shared advisory lock if available</entry>
12327 <literal><function>pg_try_advisory_lock_shared</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
12329 <entry><type>boolean</type></entry>
12330 <entry>Obtain shared advisory lock if available</entry>
12335 <literal><function>pg_advisory_unlock</function>(<parameter>key</> <type>bigint</>)</literal>
12337 <entry><type>boolean</type></entry>
12338 <entry>Release an exclusive advisory lock</entry>
12342 <literal><function>pg_advisory_unlock</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
12344 <entry><type>boolean</type></entry>
12345 <entry>Release an exclusive advisory lock</entry>
12350 <literal><function>pg_advisory_unlock_shared</function>(<parameter>key</> <type>bigint</>)</literal>
12352 <entry><type>boolean</type></entry>
12353 <entry>Release a shared advisory lock</entry>
12357 <literal><function>pg_advisory_unlock_shared</function>(<parameter>key1</> <type>int</>, <parameter>key2</> <type>int</>)</literal>
12359 <entry><type>boolean</type></entry>
12360 <entry>Release a shared advisory lock</entry>
12365 <literal><function>pg_advisory_unlock_all</function>()</literal>
12367 <entry><type>void</type></entry>
12368 <entry>Release all advisory locks held by the current session</entry>
12376 <primary>pg_advisory_lock</primary>
12379 <function>pg_advisory_lock</> locks an application-defined resource,
12380 which can be identified either by a single 64-bit key value or two
12381 32-bit key values (note that these two key spaces do not overlap). If
12382 another session already holds a lock on the same resource, the
12383 function will wait until the resource becomes available. The lock
12384 is exclusive. Multiple lock requests stack, so that if the same resource
12385 is locked three times it must be also unlocked three times to be
12386 released for other sessions' use.
12390 <primary>pg_advisory_lock_shared</primary>
12393 <function>pg_advisory_lock_shared</> works the same as
12394 <function>pg_advisory_lock</>,
12395 except the lock can be shared with other sessions requesting shared locks.
12396 Only would-be exclusive lockers are locked out.
12400 <primary>pg_try_advisory_lock</primary>
12403 <function>pg_try_advisory_lock</> is similar to
12404 <function>pg_advisory_lock</>, except the function will not wait for the
12405 lock to become available. It will either obtain the lock immediately and
12406 return <literal>true</>, or return <literal>false</> if the lock cannot be
12411 <primary>pg_try_advisory_lock_shared</primary>
12414 <function>pg_try_advisory_lock_shared</> works the same as
12415 <function>pg_try_advisory_lock</>, except it attempts to acquire
12416 shared rather than exclusive lock.
12420 <primary>pg_advisory_unlock</primary>
12423 <function>pg_advisory_unlock</> will release a previously-acquired
12424 exclusive advisory lock. It
12425 will return <literal>true</> if the lock is successfully released.
12426 If the lock was in fact not held, it will return <literal>false</>,
12427 and in addition, an SQL warning will be raised by the server.
12431 <primary>pg_advisory_unlock_shared</primary>
12434 <function>pg_advisory_unlock_shared</> works the same as
12435 <function>pg_advisory_unlock</>,
12436 except to release a shared advisory lock.
12440 <primary>pg_advisory_unlock_all</primary>
12443 <function>pg_advisory_unlock_all</> will release all advisory locks
12444 held by the current session. (This function is implicitly invoked
12445 at session end, even if the client disconnects ungracefully.)