PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да предотвратите „невалиден входен синтаксис за тип json“ в Postgres, когато записите съдържат комбинация от json или низове

Ако искате да пропуснете редовете с невалиден JSON, първо трябва да тествате ако текстът е валиден JSON. Можете да направите това, като създадете функция, която ще се опита да анализира стойността и да улови изключението за невалидни 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;

Когато имате това, можете да използвате is_json функция в CASE или WHERE клауза, за да стесните валидните стойности.

-- 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql - има ли начин да деактивирате показването на оператори INSERT при четене от файл?

  2. Как да преведа PostgreSQL OID с помощта на python

  3. Автоматично нарастване на PostgreSQL

  4. Индекс на клеймото за време:Функциите в индексния израз трябва да бъдат маркирани като НЕИЗМЕНЯЕМИ

  5. ActiveRecord::StatementInvalid. PG грешка