sql >> Databáze >  >> RDS >> PostgreSQL

Jak zabránit „neplatné vstupní syntaxi pro typ json“ v Postgresu, když záznamy obsahují kombinaci json nebo řetězců

Pokud chcete přeskočit řádky s neplatným JSON, musíte nejprve otestovat pokud je text platný JSON. Můžete to udělat vytvořením funkce, která se pokusí analyzovat hodnotu a zachytit výjimku pro neplatné hodnoty JSON.

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;

Když to máte, můžete použít is_json funkce v CASE nebo WHERE klauzule pro zúžení platných hodnot.

-- 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. Jak se kategorie a podkategorie pro WooCommerce ukládají do DB?

  2. skript vyhledávače php

  3. MySQL 8 vytvořte nového uživatele s nefunkčním heslem

  4. Problémy s typy obsahu při načítání zařízení v Django