Postgres – 数组for循环

我在写一个plpgsql脚本。
我想从二维数组中逐个获取数组内容。

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

但是上面的代码返回

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

在一行中。 我想能够循环,并调用另一个函数,它需要像这样的参数:

 another_func(key1,val1) 

由于PostgreSQL 9.1有一个方便的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$ 

旧版本的解决scheme:

 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$ 

此外,PostgreSQLtypes系统的varchar[]varchar[][]之间没有区别。 我在这里更详细地解释。

DO语句至less需要PostgreSQL 9.0, LANGUAGE plpgsql是默认的(所以你可以省略声明)。