Home Explore Blog CI



postgresql

2nd chunk of `doc/src/sgml/array.sgml`
ba4ac05eb6f969017b9f7391b15f323f076721edb8bbe9d30000000100000fa3
 know C, this is not unlike the C syntax for initializing
   structures.)  You can put double quotes around any element value,
   and must do so if it contains commas or curly braces.  (More
   details appear below.)  Thus, the general format of an array
   constant is the following:
<synopsis>
'{ <replaceable>val1</replaceable> <replaceable>delim</replaceable> <replaceable>val2</replaceable> <replaceable>delim</replaceable> ... }'
</synopsis>
   where <replaceable>delim</replaceable> is the delimiter character
   for the type, as recorded in its <literal>pg_type</literal> entry.
   Among the standard data types provided in the
   <productname>PostgreSQL</productname> distribution, all use a comma
   (<literal>,</literal>), except for type <type>box</type> which uses a semicolon
   (<literal>;</literal>). Each <replaceable>val</replaceable> is
   either a constant of the array element type, or a subarray. An example
   of an array constant is:
<programlisting>
'{{1,2,3},{4,5,6},{7,8,9}}'
</programlisting>
   This constant is a two-dimensional, 3-by-3 array consisting of
   three subarrays of integers.
  </para>

  <para>
   To set an element of an array constant to NULL, write <literal>NULL</literal>
   for the element value.  (Any upper- or lower-case variant of
   <literal>NULL</literal> will do.)  If you want an actual string value
   <quote>NULL</quote>, you must put double quotes around it.
  </para>

  <para>
   (These kinds of array constants are actually only a special case of
   the generic type constants discussed in <xref
   linkend="sql-syntax-constants-generic"/>.  The constant is initially
   treated as a string and passed to the array input conversion
   routine.  An explicit type specification might be necessary.)
  </para>

  <para>
   Now we can show some <command>INSERT</command> statements:

<programlisting>
INSERT INTO sal_emp
    VALUES ('Bill',
    '{10000, 10000, 10000, 10000}',
    '{{"meeting", "lunch"}, {"training", "presentation"}}');

INSERT INTO sal_emp
    VALUES ('Carol',
    '{20000, 25000, 25000, 25000}',
    '{{"breakfast", "consulting"}, {"meeting", "lunch"}}');
</programlisting>
  </para>

 <para>
  The result of the previous two inserts looks like this:

<programlisting>
SELECT * FROM sal_emp;
 name  |      pay_by_quarter       |                 schedule
-------+---------------------------+-------------------------------------------
 Bill  | {10000,10000,10000,10000} | {{meeting,lunch},{training,presentation}}
 Carol | {20000,25000,25000,25000} | {{breakfast,consulting},{meeting,lunch}}
(2 rows)
</programlisting>
 </para>

 <para>
  Multidimensional arrays must have matching extents for each
  dimension. A mismatch causes an error, for example:

<programlisting>
INSERT INTO sal_emp
    VALUES ('Bill',
    '{10000, 10000, 10000, 10000}',
    '{{"meeting", "lunch"}, {"meeting"}}');
ERROR:  malformed array literal: "{{"meeting", "lunch"}, {"meeting"}}"
DETAIL:  Multidimensional arrays must have sub-arrays with matching dimensions.
</programlisting>
 </para>

 <para>
  The <literal>ARRAY</literal> constructor syntax can also be used:
<programlisting>
INSERT INTO sal_emp
    VALUES ('Bill',
    ARRAY[10000, 10000, 10000, 10000],
    ARRAY[['meeting', 'lunch'], ['training', 'presentation']]);

INSERT INTO sal_emp
    VALUES ('Carol',
    ARRAY[20000, 25000, 25000, 25000],
    ARRAY[['breakfast', 'consulting'], ['meeting', 'lunch']]);
</programlisting>
  Notice that the array elements are ordinary SQL constants or
  expressions; for instance, string literals are single quoted, instead of
  double quoted as they would be in an array literal.  The <literal>ARRAY</literal>
  constructor syntax is discussed in more detail in
  <xref linkend="sql-syntax-array-constructors"/>.
 </para>
 </sect2>

 <sect2 id="arrays-accessing">
  <title>Accessing Arrays</title>

  <indexterm>
   <primary>array</primary>
   <secondary>accessing</secondary>
  </indexterm>

 <para>
  Now, we can run some queries on the table.

Title: Array Value Input and Accessing in PostgreSQL
Summary
In PostgreSQL, array constants can be written using curly braces and commas, with element values optionally enclosed in double quotes, and NULL values specified using the NULL keyword, and arrays can be inserted into tables using INSERT statements, while array elements can be accessed and queried using various SQL syntax and constructors.