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)