update postgres from example ejemplo data crear column json postgresql jsonschema postgresql-json

from - ¿Validación del esquema JSON en PostgreSQL?



postgresql json search performance (3)

Hay otra github.com/furstenheim/is_jsonb_valid que implementa la validación json. El uso es casi el mismo que el "esquema de Postgres-JSON"

CREATE TABLE example (id serial PRIMARY KEY, data jsonb); -- do is_jsonb_valid instead of validate_json_schema ALTER TABLE example ADD CONSTRAINT data_is_valid CHECK (is_jsonb_valid(''{"type": "object"}'', data)); INSERT INTO example (data) VALUES (''{}''); -- INSERT 0 1 INSERT INTO example (data) VALUES (''1''); -- ERROR: new row for relation "example" violates check constraint "data_is_valid" -- DETAIL: Failing row contains (2, 1).

He realizado algunas pruebas de validación de tweets y es 20 veces más rápido que el "esquema de Postgres-JSON", principalmente porque está escrito en C en lugar de en SQL.

Descargo de responsabilidad, he escrito esta extensión.

No puedo encontrar información sobre la validación de esquema JSON en PostgreSQL, ¿hay alguna forma de implementar la validación de esquema JSON en el tipo de datos PostgreSQL JSON?


Hay una extensión PostgreSQL que implementa la validación del esquema JSON en PL / PgSQL.

Se usa de esta manera (tomado del archivo README del proyecto):

CREATE TABLE example (id serial PRIMARY KEY, data jsonb); ALTER TABLE example ADD CONSTRAINT data_is_valid CHECK (validate_json_schema(''{"type": "object"}'', data)); INSERT INTO example (data) VALUES (''{}''); -- INSERT 0 1 INSERT INTO example (data) VALUES (''1''); -- ERROR: new row for relation "example" violates check constraint "data_is_valid" -- DETAIL: Failing row contains (2, 1).


Lo que necesita es algo para traducir las restricciones del esquema JSON en PostgreSQL, por ejemplo:

{ "properties": { "age": {"minimum": 21} }, "required": ["age"] }

a:

SELECT FROM ... WHERE (elem->>''age'' >= 21)

No tengo conocimiento de ninguna herramienta existente. Sé de algo similar para MySQL que podría ser útil para escribir el tuyo, pero nada para usar el tipo JSON en PostgreSQL.