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

Sådan forhindres 'ugyldig inputsyntaks for type json' i Postgres, når poster indeholder en blanding af json eller strenge

Hvis du vil springe rækkerne med ugyldig JSON over, skal du først teste hvis teksten er gyldig JSON. Du kan gøre dette ved at oprette en funktion, som vil forsøge at parse værdien og fange undtagelsen for ugyldige JSON-værdier.

CREATE OR REPLACE FUNCTION is_json(input_text varchar) RETURNS boolean AS $$
  DECLARE
    maybe_json json;
  BEGIN
    BEGIN
      maybe_json := input_text;
    EXCEPTION WHEN others THEN
      RETURN FALSE;
    END;

    RETURN TRUE;
  END;
$$ LANGUAGE plpgsql IMMUTABLE;

Når du har det, kan du bruge is_json funktion i en CASE eller WHERE klausul for at indsnævre de gyldige værdier.

-- this can eliminate invalid values
SELECT user_data::json #> '{user,name}'
FROM users WHERE is_json(user_data);

-- or this if you want to fill will NULLs
SELECT
  CASE
    WHEN is_json(user_data)
      THEN user_data::json #> '{user,name}'
    ELSE
      NULL
  END
FROM users;


  1. PHP søgescript til mySQL database, kun 3 bogstaver virker

  2. Kørsel af Big Data Analytics-forespørgsler ved hjælp af SQL og Presto

  3. Find tabel med maksimalt antal rækker i en database i mysql

  4. Vælg SUM fra underforespørgsel, mens du bruger whereHas i Laravel