|  | Este debe convertirse en una capítulo sobre el 
   comportamiento de los matrices. ¿Voluntarios? - thomas 1998-01-12 | 
     Postgres permite que los atributos 
     de una instancia sean definidos como una matriz multidimensional de 
     longitud fija o variable. Pueden crearse matrices de cualquier tipo
     (incluyendo tipos definidos por el usuario). Para ilustrar su uso,
     primero creamos una clase con matrices de tipos base.
| CREATE TABLE SAL_EMP (
    name            text,
    pay_by_quarter  int4[],
    schedule        text[][]); | 
    La consulta de arriba creará una clase llamada SAL_EMP con
    una cadena de tipo text (name), una matriz
    unidimensional de tipo int4 (pay_by_quarter),
    que representa el salario trimestral del empleado y una matriz bidimensional
    de tipo text (schedule), el cual representa
    el horario semanal del empleado. Ahora hacemos algunos     INSERT; fíjese que cuando se agregan elementos a una matriz,
    encerramos 
    los valores entre llaves y los separamos con comas. Si usted conoce
    el lenguaje C, esto no es muy diferente de la
    sintáis que se utiliza para inicializar estructuras.
| 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"}}'); | 
    Por defecto 
Postgres utiliza la convención de
    «numeración basada en uno» para las matrices, esto es, una matriz de n
    elementos comienza con array[1] y finaliza con array[n]. Ahora, podemos
    hacer algunas consultas sobre SAL_EMP. Primero, mostramos cómo acceder a
    un elemento de una de las matrices a la vez. Esta consulta recupera los
    nombres de los empleados cuyos pagos cambiaron en el segundo trimestre:
| SELECT name
    FROM SAL_EMP
    WHERE SAL_EMP.pay_by_quarter[1] <>
    SAL_EMP.pay_by_quarter[2];
+------+
|name  |
+------+
|Carol |
+------+ | 
    La siguiente consulta recupera el pago del tercer trimestre
    de todos los empleados: 
| SELECT SAL_EMP.pay_by_quarter[3] FROM SAL_EMP;
+---------------+
|pay_by_quarter |
+---------------+
|10000          |
+---------------+
|25000          |
+---------------+ | 
    También podemos acceder arbitrariamente a distintas
    porciones de la matriz o submatrices. Esta consulta recupera
    el primer elemento de la agenda de Bill para los primeros dos 
    días de la semana.
| SELECT SAL_EMP.schedule[1:2][1:1]
    FROM SAL_EMP
    WHERE SAL_EMP.name = 'Bill';
+-------------------+
|schedule           |
+-------------------+
|{{"meeting"},{""}} |
+-------------------+ |