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).