2024-01-01から1ヶ月間の記事一覧

JSONB のキーと他のキーの複合キー(by PostgreSQL)

SQL

先日書いた JSONB の primary key を作る ( by PosetgreSQL ) - Oboe吹きプログラマの黙示録 これでは、目的の主キーとして、任意の列とJSONB型のJSON内の値のキーとする場合の CONSTRAINT を2つ書けない制約でUPSERT文 (ON CONFLICT~DO UPDATE)を思うよ…

JSONB の primary key を作る ( by PosetgreSQL )

SQL

単純に CREATE TABLE の PRIMARY KEY で指定してもエラーになる。 CREATE TABLE public.jsample ( id int4 NOT NULL, title varchar(60) NOT NULL, jdoc jsonb not NULL, PRIMARY KEY (id, jdoc->'item'->>'id') ); SQLエラー [42601]: ERROR: "->"またはそ…

json_set/jsonb_set で NULL をセットする時の注意

SQL

PostgreSQL でのことである。 あるテーブルの JSONB型に、以下のようなJSON値があるとする。 { "a":{ "a1": "Apple", "a2": "Lemon" } } このJSONの"a1" を null にする場合、シングルクォートで括った 文字列 ' null' 指定した以下なら成功する。 UPDATE jb…

PostgreSQL JSON演算子による JSON null の扱い

SQL

JSON型、JSONB型、の JSON の null の扱い まずは JSON演算子の基本から、 "b" 配列の1番目 SELECT '{"a":{"b":[{"c":1},{"c":2},{"c":null}]}}'::jsonb->'a'->'b'->1->>'c' 結果は 文字型で 2 "b" 配列の2番目 SELECT '{"a":{"b":[{"c":1},{"c":2},{"c":n…

Json が同じかどうか判定する

2つのJsonの キーと値が同じであるか判定する。 Java なら、 Jackson ライブラリの JsonNode に変換して、equals メソッドで判定する。 ==演算子ではダメ!Python なら、 dict に変換して、==演算子で判定して良い。 import json dictA = json.loads('{…

JSON から PostgreSQL JSON演算子のパスを作る

JSONの解析として、過去、いろいろと作ってきた。 Jackson でJSON読込み key-value の BiConsumer を処理する - Oboe吹きプログラマの黙示録 Jackson でJSON読込み key-value の BiConsumer で、日付時刻も - Oboe吹きプログラマの黙示録 Jackson JSON読込み…

区切り、括りの正規表現

区切り文字や括りの1行文字列で、最初 or 最後の一致を求める正規表現 例題) 対象文字列 'AsDate'->'C'->'2'->'June'区切り文字「->」 最後の区切り文字以降 (?<=\->)([^\->]+$) ## match した文字列 'June' 最後の区切りを含んだ文字以降 \->(?<=\->)([^\…