sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo convertir una matriz json en una matriz de texto?

prueba json_array_elements_text en lugar de json_array_elements , y no necesita conversión explícita a texto (x::text ), por lo que puede 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 su pregunta adicional

¿Por qué x::text no es un molde?

Esto se emite y, debido a esto, no da ningún error, pero cuando se convierte una cadena json en un texto como este:::text , postgres agrega comillas al valor.

Solo con fines de prueba, cambiemos su función a original nuevamente (como está en su pregunta) e intentemos:

SELECT  
(json_array_castext('["hello","world"]'))[1] = 'hello',
(json_array_castext('["hello","world"]'))[1],
'hello'

Como ves, (json_array_castext('["hello","world"]'))[1] da "hello" en lugar de hello . y por eso obtuviste false al comparar esos valores.