問題タブ [jsonb]
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.
arrays - Postgres - jsonb 配列から要素を削除
ID とテキストをjsonb
含む要素の配列( ) があります。jsonb[]
私が使用できる要素を削除するには:
UPDATE "Users" SET chats = array_remove(chats, '{"id": 2, "text": "my message"')
しかし、IDだけでメッセージを削除したいのですが、メッセージを取得すると別のクエリが必要になります。
postgresql - PostgreSQLでjsonb列のフィールドを更新するには?
jsonb
そこで、PostgreSQLを試してみたいと思いました。私のテーブルには、extras
タイプjsonb
という名前の列があります。
サンプルデータはextras
次のようになります{"param1": 10, "param2": 15}
SQL ステートメントのみを使用して JSON を変更したいと思います。私はこのようなことをしたい:
ofが 12を超える場合、その値に 10 を追加してフィールドを更新param1
します。extras
param2
extras
このような SQL ステートメントをどのように記述できますか? アプリケーションレイヤーでこれを簡単に実行できることはわかっていますが、処理する可能性のある行数が膨大になり、db-application-で時間を無駄にしたくないため、SQLレイヤー自体でこれを実行したいと思います-デシベル往復
json - フィールドの数値比較のための jsonb のインデックス作成
で簡単なテーブルを定義しました
また、キー (大規模なセットから取得) と 1 から 100 までの値を持つデータが含まれています。
(特定のキーに関連付けられた) 値がベンチマーク値より大きいエントリを検索したいと思います。たとえば、次の方法でこれを実現できます。
...しかしもちろん、これはインデックスを使用せず、テーブルスキャンに頼っています。私はあるのだろうか:
- "polled" > 50 のリソースをクエリするより効率的な方法
- この種のクエリをサポートするインデックスを構築する方法
json - jsonb キーに対して LIKE クエリを実行するにはどうすればよいですか?
私は次のjsonb構造を持っています:
LIKE 演算子を含む行を選択するにはどうすればよいですか?
0 行を返します...「this_that」と「this_and_that」に一致することを望んでいました。(注: 「_」に続く文字は大きく異なる可能性があるため、完全に一致させることはできません)。
postgresql - エラー: タイプ タイムスタンプの入力構文が無効です: "end_time"
postgresql の新機能であり、jsonb の新機能です。オブジェクトの配列をフィルタリングしようとしています:
私のクエリ:
エラーが発生します:
python - 「インデックスの作成」はトランザクションの「ロールバック」を返します
SqlAlchemy セッションは次のように定義されました。
そして構成されました:
また、生のSQLをトランザクションに実行してjsonbフィールドのインデックスを作成する必要があります。
操作の SqlAlchemy ログは次のようになります。
また、インデックスは作成されません。
ただし、同じ SQL コマンドを実行すると、psql
エラーなしでインデックスが作成されます。
この場合、SqlAlchemy の "execute" コマンドを使用してインデックスを作成するにはどうすればよいですか?
postgresql - 大きな jsonb フィールドから複数の値をより高速に取得する (postgresql 9.4)
tl;dr
PSQL 9.4 を使用して、虚数関数を使用する場合のように、jsonb フィールドから複数の値を取得する方法はありますか。
複数の値を選択するのに必要なほぼ直線的な時間 (1 つの値 = 300 ミリ秒、2 つの値 = 450 ミリ秒、3 つの値 = 600 ミリ秒) を高速化することを期待して
バックグラウンド
次のjsonbテーブルがあります:
約 100 000 行あり、各行には 90 以上のキーと対応する値を持つ jsonb 辞書があります。かなり迅速な方法 (< 500 ミリ秒) でいくつか (< 10) のキーと値を選択する SQL クエリを作成しようとしています。
インデックスとクエリ: 190ms
私はインデックスを追加することから始めました:
これにより、次のように "x" ディクショナリの値に基づくクエリが高速になります。
これには約 190 ミリ秒かかります (許容範囲)
ディクショナリ値の取得
ただし、SELECT 部分で戻るキーを追加し始めると、実行時間はほぼ直線的に増加します。
1値:300ms
366ms (+175ms)
300ms (+110ms)
3値:600ms
600ミリ秒かかります(選択した値ごとに+410または+100)
600ミリ秒かかります(選択した値ごとに+410または+100)
より多くの値をより速く取得する
虚数関数を使用する場合のように、jsonb フィールドから複数の値を取得する方法はありますか。
これにより、これらの検索が高速化される可能性があります。それらを列、リスト/配列、さらにはjsonオブジェクトとして返すことができます。
PL/Python を使用して配列を取得する
念のため、PL/Python を使用してカスタム関数を作成しましたが、おそらく json.loads が原因で、かなり遅くなりました (5 秒以上)。
2015-05-21 更新
GIN インデックスで hstore を使用してテーブルを再実装しましたが、パフォーマンスは jsonb を使用した場合とほぼ同じです。つまり、私の場合は役に立ちません。