recorrer postgres manejo example column arreglos array arrays postgresql multidimensional-array for-loop plpgsql

arrays - manejo - sql array postgresql



Lazo sobre la dimensión de la matriz en plpgsql (1)

En plpgsql, quiero obtener los contenidos de la matriz uno por uno desde una matriz de dos dimensiones.

DECLARE m varchar[]; arr varchar[][] := array[[''key1'',''val1''],[''key2'',''val2'']]; BEGIN for m in select arr LOOP raise NOTICE ''%'',m; END LOOP; END;

Pero el código anterior regresa:

{{key1,val1},{key2,val2}}

en una linea Quiero ser capaz de repetir y llamar a otra función que toma parámetros como:

another_func(key1,val1)


Desde PostgreSQL 9.1 existe la conveniente FOREACH :

DO $do$ DECLARE m varchar[]; arr varchar[] := array[[''key1'',''val1''],[''key2'',''val2'']]; BEGIN FOREACH m SLICE 1 IN ARRAY arr LOOP RAISE NOTICE ''another_func(%,%)'',m[1], m[2]; END LOOP; END $do$

Solución para versiones anteriores :

DO $do$ DECLARE arr varchar[] := ''{{key1,val1},{key2,val2}}''; BEGIN FOR i IN array_lower(arr, 1) .. array_upper(arr, 1) LOOP RAISE NOTICE ''another_func(%,%)'',arr[i][1], arr[i][2]; END LOOP; END $do$

Además, no hay diferencia entre varchar[] y varchar[][] para el sistema de tipo PostgreSQL. Explico con más detalle here .

La declaración DO requiere al menos PostgreSQL 9.0, y LANGUAGE plpgsql es el valor predeterminado (para que pueda omitir la declaración).