PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment convertir un tableau json en tableau de texte?

essayez json_array_elements_text au lieu de json_array_elements , et vous n'avez pas besoin d'un transtypage explicite en texte (x::text ), vous pouvez donc utiliser :

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;

Pour votre question complémentaire

Pourquoi x::text n'est pas un cast ?

Ceci est casté et à cause de cela, il ne donne aucune erreur, mais lors de la conversion de la chaîne json en texte comme ceci :::text , postgres ajoute des guillemets à value.

Juste à des fins de test, redéfinissons votre fonction sur l'original (comme dans votre question) et essayez :

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

Comme vous le voyez, (json_array_castext('["hello","world"]'))[1] donne "hello" au lieu de hello . et c'est pourquoi vous avez obtenu false lors de la comparaison de ces valeurs.