PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como converter matriz json para matriz de texto?


tente json_array_elements_text em vez de json_array_elements , e você não precisa de conversão explícita para texto (x::text ), então você pode usar:
CREATE or replace FUNCTION json_array_castext(json) RETURNS text[] AS $f$
    SELECT array_agg(x) FROM json_array_elements_text($1) t(x);
$f$ LANGUAGE sql IMMUTABLE;

Para sua pergunta adicional

Por que x::text não é um elenco?

Isso é convertido e, por causa disso, não está dando nenhum erro, mas ao converter a string json para texto como este:::text , o postgres adiciona aspas ao valor.

Apenas para fins de teste, vamos alterar sua função para original novamente (como está na sua pergunta) e tente:
SELECT  
(json_array_castext('["hello","world"]'))[1] = 'hello',
(json_array_castext('["hello","world"]'))[1],
'hello'

Como você vê, (json_array_castext('["hello","world"]'))[1]"hello" em vez de hello . e foi por isso que você obteve false ao comparar esses valores.