2014-03-06 4 views
14

PostgreSQL에서 JSON 스키마 유효성 검사에 대한 정보를 찾을 수 없습니다. PostgreSQL JSON 데이터 형식에서 JSON 스키마 유효성 검사를 구현하는 방법이 있습니까? 나는 기존의 도구를 잘 모르는 것 같아요PostgreSQL의 JSON 스키마 유효성 검사?

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

: 당신이 필요로하는 무엇

답변

4

PL/PgSQL에서 JSON 스키마 유효성 검사를 구현하는 PostgreSQL extension이 있습니다.

는 (프로젝트 README 파일에서 가져온)과 같이 사용됩니다

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). 
+0

이 유효성 검사를위한 성능로드 테스트가 있는지 알고 계셨습니까? – khorvat

+0

나는 모른다. 이 코드는 이해하기 쉬운 PL/PgSQL의 꽤 짧습니다 (259 행). 이것은 해석됩니다. 자신의 스키마로 측정해야합니다. – Mordae

3

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

에 PostgreSQL의 것들로 JSON 스키마 제약을 번역하는 일, 예컨대 :입니다. 나는 MySQL과 비슷한 것을 알고 있는데,이 글은 당신 자신의 글쓰기에 유용 할 수 있지만, PostgreSQL에서 JSON 유형을 사용하는 것에 대해서는 아무 것도 모른다.

+0

이 시점에서 사용할 수있는 스키마 유효성 검사가 없다고 생각합니다. V8 엔진을 유효성 검사에 사용할 가능성이 있는지 알고 계십니까? 일부 OnUpdate/OnInsert 작업에서? – khorvat

+0

오! 죄송 합니다만 오해의 여지가 있으며 유효성 검사가 아닌 쿼리에 JSON 스키마를 사용하는 것에 대해 묻고 있다고 생각했습니다. 예, 제출하기 전에 코드로 확인하거나 코드의 유효성을 검사하는 것이 합리적인 것처럼 보입니다. – cloudfeet

+2

이 리소스를 체크 아웃하십시오. 도움이 될 수 있습니다. http://blog.endpoint.com/2013/06/postgresql-as-nosql-with-data-validation.html – topwik

1

는 JSON 유효성 검사를 구현하는 또 다른 PostgreSQL extension있다. 사용법은이 C로 작성 주로하기 때문에, "포스트 그레스-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). 

내가 트윗을 확인하는 몇 가지 벤치 마크를 수행 한하고 20 배 "포스트 그레스-JSON 스키마"보다 빠른 거의 동일 SQL 대신.

면책 조항, 본인은이 확장 프로그램을 작성했습니다.