PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So verhindern Sie „ungültige Eingabesyntax für den Typ json“ in Postgres, wenn Datensätze eine Mischung aus json oder Zeichenfolgen enthalten

Wenn Sie die Zeilen mit ungültigem JSON überspringen möchten, müssen Sie zuerst testen wenn der Text gültiges JSON ist. Sie können dies tun, indem Sie eine Funktion erstellen, die versucht, den Wert zu analysieren und die Ausnahme für ungültige JSON-Werte abzufangen.

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;

Wenn Sie das haben, können Sie is_json verwenden Funktion in einem CASE oder WHERE -Klausel, um die gültigen Werte einzugrenzen.

-- 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;