4.7.7. Arrays

El tipo de datos array es una de las características especiales de PostgreSQL, permite el almacenamiento de más de un valor del mismo tipo en la misma columna.

Definición
Los arrays no cumplen la pri-   mera forma normal de Cood,     por lo que muchos los               consideran inaceptables en el  modelo relacional.                     

 

demo=# create table Estudiante (
demo(# nombre varchar(30),
demo(# parciales int [3]
demo(# );
CREATE

 

La columna parciales acepta tres calificaciones de los estudiantes.

 

También es posible asignar un solo valor del array:

demo=# insert into Estudiante( nombre, parciales[2]) values ( `Pedro´ ,`{90}´); INSERT 17418 1
demo=# select * from Estudiante ;
nombre      | parciales
------------+------------
John Lennon |
Juan        | {90,95,97}
Pedro       | {90}
(3 rows)

Los arrays, al igual que cualquier columna cuando no se especifica lo contrario, aceptan valores nulos:

demo=# insert into Estudiante values ( `John Lennon´ );
INSERT 17416 1
demo=# insert into Estudiante values ( `Juan´ , `{90,95,97}´ );
INSERT 17417 1

Los valores del array se escriben siempre entre llaves.

 

demo=# select * from Estudiante;
nombre        | parciales
--------------+------------
John Lennon   |
Juan          | {90,95,97}
(2 rows)

Para seleccionar un valor de un array en una consulta se especifica entre corchetes la celda que se va a desplegar:

 

Sólo Juan tiene calificación en el tercer parcial.                                 

demo=# select nombre, parciales[3] from Estudiante;
nombre        | parciales
--------------+-----------
John Lennon   |
Juan          | 97
Pedro         |
(3 rows)

 

La columna parciales del registro       Pablo incluye cuatro celdas y sólo    la última tiene valor.                            

En muchos lenguajes de programación, los array se implementan con longitud fija, PostgreSQL permite aumentar su tamaño dinámicamente:
 

 

demo=# insert into Estudiante( nombre, parciales[4]) values ( `Pablo´ , `{70}´); INSERT 17419 1
demo=# select * from Estudiante;
nombre        | parciales
--------------+------------
John Lennon   |
Juan          | {90,95,97}
Pedro         | {90}
Pablo         | {70}
(4 rows)

Mediante la función array_dims() podemos conocer las dimensiones de un array:

demo=# select nombre, array_dims(parciales) from Estudiante;
nombre        | array_dims
--------------+------------
John Lennon   |
Juan          | [1:3]
Pedro         | [1:1]
Pablo         | [1:1]
(4 rows)