問題タブ [postgresql-json]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2567 参照

postgresql - UPSERT テスト コードの構文エラー

次のテスト コードを使用して新しい PostgreSQLアップサート構文をテストしようとしていますが、構文エラーが発生します。

上記のコードが失敗するのはなぜですか?

また、test1テーブルにはいくつかの制約があります (非負の値と一意の主キー)。一意性制約のみに対処する方法は?

更新 2:から に切り替えましUPDATEINSERT(ばかげた間違いで申し訳ありません!) が、まだ構文に苦労しています:

また、JSON 行を次のように変更しようとしました。

しかし、それも失敗します...

便宜上、私のテストコードを次に示します。

0 投票する
1 に答える
11497 参照

postgresql - JSONB_ARRAY_ELEMENTS を WHERE ... IN 条件で使用する

オンライン ポーカー プレイヤーは、オプションでプレイルーム 1 またはプレイルーム 2 へのアクセスを購入できます。

また、不正行為のために一時的に禁止される可能性があります。

上記の表には、4 つのテスト レコードが含まれています。

4 つのレコードはすべて、異なるソーシャル ネットワーク (たとえば、Facebook、Twitter、Apple Game Center など) を介して自分自身を認証した同一人物のものです。

数値のユーザー ID のリストを (JSON 配列として) 取り、同じ人物に属するレコードを単一のレコードにマージするストアド関数を作成しようとしています - 彼女の支払いや罰を失うことはありません:

残念ながら、これを使用すると次のエラーが発生します。

問題を解決するのを手伝ってください。

便宜上、ここに SQL コードの要旨を示します。

0 投票する
1 に答える
1673 参照

arrays - JSONB_ARRAY_ELEMENTS の結果を VARCHAR 配列に割り当てる

JSONB_ARRAY_ELEMENTS呼び出しの結果をVARCHAR 配列に割り当てようとすると(後でSELECT ... WHERE IN (UNNEST(...))ステートメントで使用するため)、次のストアド関数:

残念ながら、エラーが出力されます:

だから私はARRAY_AGGを使用して割り当てを修正しようとしました-

しかし、構文エラーが発生します:

JSONB_ARRAY_ELEMENTS結果を配列に保存する方法を教えてください。

アップデート:

私は Nick のアドバイスに従いました (ありがとう)。

SELECT ... WHERE IN ...ステートメントで配列を使用しようとすると:

0 投票する
2 に答える
2053 参照

json - サブセレクトでjsonbの結果をフィルタリングする

複数のテーブルから階層的な JSON 結果を作成しています。これらは単なる例ですが、このデモンストレーションの目的を理解するのに十分なはずです。

テストデータ:

次の関数を作成しました。

関数の実行book_get

次の結果が生成されます

WHEREこれで、句を使用してデータをフィルタリングできるようになりました。

でフィルタリングできるようにするにはどうすればよいauthorsですか? たとえば、 に相当するものWHERE _b.authors.'name' = 'Arthur C. Clarke'

authorsどのタイプになるか全くわかりません。それとも?それはまだレコード(配列)ですか?もうJSONですか?にアクセスできるからだと思いますidが、アクセスすることはそれほど問題ではありませんか?titlepages_b.authors

アクセス_b.authorsすると私にERROR: missing FROM-clause entry for table "authors"

JSON 演算子でアクセスすると、_b.authors->>..または_b->authors->>..

句で使用GROUP BYしたことを覚えています:HAVING

しかし、それは私にエラーを与えます:

エラー: タイプ json の等価演算子を識別できませんでした

もう少し明確にするために:

基本的に必要なことを行います。これは、インデックスの作成者が である場合にのみ一致し0ますArthur C. Clarke。彼が本を共同執筆し、彼が 2 位 (インデックス 1) だった場合、一致はありませんでした。だから私が見つけようとしているのは、_b.authorsたまたま著者で満たされた JSON 配列であるスキャンの正しい構文です。どんな試みも受け入れません。私が理解している限りでは@>#>のみがサポートされていJSONBます。_b.authorsでは、値に対して任意の列を選択する際に正しい構文を取得するにはどうすればよいですか。

更新 2

ドキュメントをもう一度読んでください... Postgresのドキュメントから、関数に関してJSONとJSONBに違いがあるという部分を取得できなかったようです。データ型のみに関するものだと思いました。where 句で etc のような演算子を使用すると、と置き換えるto_jsonとうまくいくようです。to_jsonb@>

アップデート 3

@ErwinBrandstetter: 理にかなっています。LATERAL は私にはまだ知られていませんでしたが、存在することを知ってよかったです。私は JSON/JSONB の関数と演算子に慣れてきました。今ではとても理にかなっています。私には明確ではないのはLIKE、たとえばWHERE節での出現を見つけることです。

jsonb_array_elements配列内のオブジェクトのネストを解除するために使用する必要がある場合(最後のWHERE節では、の内容がb.authorsJSONB データ型であるため)。私はそれからすることができました

望ましい結果が得られます。

しかし、私の例の最後の(最後の)WHERE節でこれを達成するためのアプローチは何ですか? WHERE結果の完全なセットをフィルタリングし、サブ選択の途中で部分的にフィルタリングしたくないため、最後の句を指摘します。したがって、一般的には、著者のミドルネームが「C」である本を最終的な結果セットから除外したいと考えています。または名前「アーサー」。

更新 4

FROMもちろん節で。すべての可能性を見つけたら、最後にパフォーマンスの微調整を行う必要がありますが、これが私が思いついたものです。

'Arthur' で始まる著者名を持つすべての本を提供します。このアプローチへのコメントや更新に感謝します。

0 投票する
3 に答える
144 参照

python - この SQL ステートメントの django ORM バージョンはありますか?

Django 1.9 と Postgres 9.4 を使用。

と呼ばれるjsonbフィールドがありjson_fieldます。json_fieldのようなキーtitleを含めることができます'the cow jumped over the moon'

titleだから私は含む行を検索したいmoon

次の生の SQL を使用して適切に動作します

SELECT * FROM web_file where (json_field ->> 'title')::text LIKE '%moon%';

しかし、私はむしろ Django ORM を使用してそれを行いたいと思います。

編集:

私は試してみようと思いました(そして@kloddantが指摘したように)

しかし、次のエラーが発生します

関連はこちらmodels.py

疑わしいですが、djangoモデルとMPTTModelの衝突である可能性がありますか?

0 投票する
1 に答える
299 参照

postgresql - postgresql ビュー/関数で 2 つの json オブジェクトをマージする

私はポストグレスに次の3つのテーブルを持っています...

住所コンポーネントには次のようなデータがあります...

従業員は複数の住所を持つことができ、各住所は 1 つの住所コンポーネントに関連付けられます。

address を json として、 address_component を別の json としてアドレス オブジェクト内に埋め込みたいと考えています。

これにより、アドレスの配列をjsonとして正しく取得できますが、一時的にアドレスコンポーネントを別の結果として取得できます。この address_component json を address json 配列の個々の要素にマージして、以下のような出力を得ることができますか?