sql >> Database >  >> RDS >> PostgreSQL

Hoe 'ongeldige invoersyntaxis voor type json' in Postgres te voorkomen, wanneer records een mix van json of strings bevatten

Als u de rijen met ongeldige JSON wilt overslaan, moet u eerst testen als de tekst een geldige JSON is. U kunt dit doen door een functie te maken die zal proberen de waarde te ontleden en de uitzondering voor ongeldige JSON-waarden op te vangen.

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;

Als je dat hebt, zou je de is_json . kunnen gebruiken functie in een CASE of WHERE clausule om de geldige waarden te beperken.

-- 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. Hoe MySQL-tabelrecords in tweeën te splitsen om aan elke kant van een pagina weer te geven

  2. Hoe om te gaan met uitzonderingen en de resterende instructies uit te voeren?

  3. Alle rijen van de eerste tabel van een join forceren

  4. Slaapstand op orakel, @GeneratedValue(strategie =GenerationType.AUTO)