Der er flere måder. En måde er at caste arrayet til tekst og dele det op med regexp_split_to_table ()
.
Denne funktion er til stede i PostgreSQL 8.3 eller nyere .
SELECT regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{');
Output:
0,0,0
1,1,1
2,2,2
Hvis du vil have de vedlagte parenteser (måske ikke?), skal du tilføje dem igen på denne måde:
SELECT '{' || regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{') || '}';
Vores input:
{0,0,0}
{1,1,1}
{2,2,2}
Alternativt:
Dette burde også fungere med PostgreSQL 8.2 eller måske endnu tidligere, men det testede jeg ikke.
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
Output:
{{0,0,0}}
{{1,1,1}}
{{2,2,2}}
(Du ønsker måske at fjerne nogle krøllede parenteser ..)
Ellers ville jeg skrive en plpgsql-funktion, der går gennem arrayet. Ret nemt.
Der er også den relaterede unnest()
funktion, men den returnerer en række pr. basiselement (heltal i dette tilfælde), så det nytter ikke noget her.
En (hurtig!) måde at udlæse resultatet på:COPY
.