私は最近、PostgreSQLのJSONBタイプ用のカスタムマイナス演算子を作成することについてblog postと書いています。Postgresのカスタム演算子の優先順位は組み込みですか?
基本的には、オペレータは、このように作成されました:この演算子が作成された後
CREATE OPERATOR - (
PROCEDURE = jsonb_minus,
LEFTARG = jsonb,
RIGHTARG = jsonb)
しかし、コメンターとして正しくデフォルトJSONBは、指摘 - TEXTはもう機能していません。エラーでこのクエリ結果:invalid input syntax for type json
で
SELECT '{"a":1, "b":{"c":123, "d":"test"}}'::jsonb - 'a'
結果。 2番目の引数をTEXTに明示的にキャストして機能させる必要があります。
は、カスタム演算子を削除した後、通常の動作が復元され、上記のクエリは、所望の結果を与える:{"b": {"c": 123, "d": "test"}}
なぜPostgresは明示的な型が指定されていない場合、デフォルトのテキストの上JSONBにキャストしようとするだろうか?これを避けることはできますか?
ああ、秒でそれを打ち負かす:-) もう1つ注目すべきは、カスタム演算子(いくつかの言語で使用されているのがわかります)の優先順位を変更できないことです。 https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-PRECEDENCE –