PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak rzutować tablicę json na tablicę tekstową?

spróbuj json_array_elements_text zamiast json_array_elements i nie potrzebujesz jawnego rzutowania na tekst (x::text ), więc możesz użyć:

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;

Na Twoje dodatkowe pytanie

Dlaczego x::text nie jest rzutowaniem?

To jest rzutowane i z tego powodu nie daje żadnego błędu, ale podczas rzutowania łańcucha json na tekst w ten sposób:::text , postgres dodaje cytaty do wartości.

Tylko w celach testowych, zmieńmy ponownie twoją funkcję na oryginalną (tak jak w twoim pytaniu) i spróbuj:

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

Jak widzisz, (json_array_castext('["hello","world"]'))[1] daje "hello" zamiast hello . i dlatego otrzymałeś false podczas porównywania tych wartości.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zarządzanie wysoką dostępnością w PostgreSQL – Część II:Menedżer replikacji

  2. Najnowsze trendy PostgreSQL:najbardziej czasochłonne zadania i ważne wskaźniki do śledzenia

  3. Twórz wiele instancji Postgres na tym samym komputerze

  4. Sprawdź, czy sekwencja istnieje w Postgresie (plpgsql)

  5. postgresql - liczba (brak wartości null) każdej kolumny w tabeli