Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

array.sgml

Blame
  • array.sgml 2.91 KiB
    <Chapter Id="arrays">
    <Title>Arrays</Title>
    
    <Para>
    <Note>
    <Para>
    This must become a chapter on array behavior. Volunteers? - thomas 1998-01-12
    </Para>
    </Note>
    </Para>
    
    <Para>
         <ProductName>Postgres</ProductName> allows attributes of an instance to be defined
         as  fixed-length  or  variable-length multi-dimensional
         arrays. Arrays of any base type  or  user-defined  type
         can  be created. To illustrate their use, we first create a 
         class with arrays of base types.
         
    <ProgramListing>
    CREATE TABLE SAL_EMP (
        name            text,
        pay_by_quarter  int4[],
        schedule        text[][]
    );
    </ProgramListing>
    </Para>
    
    <Para>
         The above query will create a class named SAL_EMP  with
         a  <FirstTerm>text</FirstTerm>  string (name), a one-dimensional array of <FirstTerm>int4</FirstTerm>
         (pay_by_quarter),  which  represents   the   employee's
         salary by quarter and a two-dimensional array of <FirstTerm>text</FirstTerm>
         (schedule),  which  represents  the  employee's  weekly
         schedule.   Now  we  do  some  <FirstTerm>INSERTS</FirstTerm>s; note that when
         appending to an array, we  enclose  the  values  within
         braces  and  separate  them  by commas.  If you know <FirstTerm>C</FirstTerm>,
         this is not unlike the syntax for  initializing  structures.
         
    <ProgramListing>
    INSERT INTO SAL_EMP
        VALUES ('Bill',
        '{10000, 10000, 10000, 10000}',
        '{{"meeting", "lunch"}, {}}');
    
    INSERT INTO SAL_EMP
        VALUES ('Carol',
        '{20000, 25000, 25000, 25000}',
        '{{"talk", "consult"}, {"meeting"}}');
    </ProgramListing>
    
         By  default,  <ProductName>Postgres</ProductName>  uses  the "one-based" numbering
         convention for arrays -- that is, an array  of  n  elements starts with array[1] and ends with array[n].
         Now,  we  can  run  some queries on SAL_EMP.  First, we
         show how to access a single element of an  array  at  a
         time.   This query retrieves the names of the employees
         whose pay changed in the second quarter:
         
    <ProgramListing>
    SELECT name
        FROM SAL_EMP
        WHERE SAL_EMP.pay_by_quarter[1] &lt;&gt;
        SAL_EMP.pay_by_quarter[2];
    
    +------+
    |name  |
    +------+
    |Carol |
    +------+
    </ProgramListing>
    </Para>
    
    <Para>
         This query retrieves  the  third  quarter  pay  of  all
         employees:
         
    <ProgramListing>
    SELECT SAL_EMP.pay_by_quarter[3] FROM SAL_EMP;
    
    
    +---------------+
    |pay_by_quarter |
    +---------------+
    |10000          |
    +---------------+
    |25000          |
    +---------------+
    </ProgramListing>
    </Para>
    
    <Para>
         We  can  also  access  arbitrary slices of an array, or
         subarrays.  This query  retrieves  the  first  item  on
         Bill's schedule for the first two days of the week.
         
    <ProgramListing>
    SELECT SAL_EMP.schedule[1:2][1:1]
        FROM SAL_EMP
        WHERE SAL_EMP.name = 'Bill';
    
    +-------------------+
    |schedule           |
    +-------------------+
    |{{"meeting"},{""}} |
    +-------------------+
    </ProgramListing>
    </Para>
    
    </Chapter>