Jest kilka sposobów. Jednym ze sposobów jest rzutowanie tablicy na tekst i podzielenie go za pomocą regexp_split_to_table ()
.
Ta funkcja jest obecna w PostgreSQL 8.3 lub nowszym .
SELECT regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{');
Wyjście:
0,0,0
1,1,1
2,2,2
Jeśli chcesz nawiasy zamykające (może nie?), dodaj je z powrotem w ten sposób:
SELECT '{' || regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{') || '}';
Nasze dane:
{0,0,0}
{1,1,1}
{2,2,2}
Alternatywnie:
Powinno to również działać z PostgreSQL 8.2 a może nawet wcześniej, ale tego nie testowałem.
SELECT my_2d_int_arr_var[x:x][1:3]
FROM (SELECT generate_series(1, array_upper(my_2d_intarr, 1), 1)::int4 AS x)) x
Wyjście:
{{0,0,0}}
{{1,1,1}}
{{2,2,2}}
(Możesz usunąć kilka nawiasów klamrowych ..)
W przeciwnym razie napisałbym funkcję plpgsql, która przechodzi przez tablicę. Dość łatwe.
Istnieje również powiązany unnest()
funkcji, ale zwraca wiersz na element bazowy (w tym przypadku liczbę całkowitą), więc nie ma to tutaj zastosowania.
Jeden (szybki!) sposób na wyprowadzenie wyniku:COPY
.