PostgreSQLでJSONスキーマ検証に関する情報が見つかりません。PostgreSQLJSONデータ型にJSONスキーマ検証を実装する方法はありますか?
PL/PgSQLでJSONスキーマ検証を実装する PostgreSQL拡張機能 があります。
これは次のように使用されます(プロジェクト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).
Json検証を実装する別の PostgreSQL拡張機能 があります。使い方は「Postgres-JSON-schema」とほぼ同じです。
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).
ツイートを検証するベンチマークをいくつか実行しましたが、これは「Postgres-JSON-schema」よりも20倍高速です。これは、主にSQLではなくCで記述されているためです。
免責事項、私はこの拡張機能を作成しました。
必要なのは、JSONスキーマ制約をPostgreSQL制約に変換するものです。例:
{
"properties": {
"age": {"minimum": 21}
},
"required": ["age"]
}
に:
SELECT FROM ...
WHERE (elem->>'age' >= 21)
私は既存のツールを知りません。 MySQL に似たものを知っています。これは、独自の記述には役立つかもしれませんが、PostgreSQLでJSON型を使用する場合には何もありません。