PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come trasmettere l'array json all'array di testo?

prova json_array_elements_text invece di json_array_elements e non è necessario il cast esplicito al testo (x::text ), quindi puoi usare:

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;

Per la tua domanda aggiuntiva

Perché x::text non è un cast?

Questo è cast e, per questo motivo, non dà alcun errore, ma quando si esegue il cast di una stringa json su un testo in questo modo:::text , postgres aggiunge virgolette al valore.

Solo a scopo di test, cambia di nuovo la tua funzione in originale (come è nella tua domanda) e prova:

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

Come vedi, (json_array_castext('["hello","world"]'))[1]"hello" invece di hello . ed è per questo che hai ricevuto false quando si confrontano questi valori.