sql >> データベース >  >> RDS >> PostgreSQL

配列インデックスにPostgresqlJSONB配列をどのように作成しますか?

    GINインデックス です 何が欲しいですか?

    まず、IDをより扱いやすい形式に整理する必要があるようです。私はJSONを操作するPostgreSQLの方法よりもPythonに精通しているので、この目的のためにPL/Pythonを使用しました。

       DROP TABLE IF EXISTS ids;
    
    CREATE TABLE ids (user_id integer, a jsonb);
    
    INSERT INTO ids VALUES 
        (1, '{"b": [{"ids": [1, 2, 3, 4]}, {"ids": [2, 3, 4]}, {"ids": [1, 2, 4]}]}'),
        (2, '{"b": [{"ids": [2, 3, 4]}]}'),
        (3, '{"b": [{"ids": [4, 5, 6]}, {"ids": [6, 7, 8]}]}');
    
    CREATE OR REPLACE FUNCTION extract_ids(a_json jsonb) 
    RETURNS int[] AS
    $BODY$
        import json
        s = set()
        a = json.loads(a_json)
        for key in a.keys():
            for id_set in a[key]:
                s.update(id_set['ids'])
        return(list(s))
    $BODY$ LANGUAGE plpythonu IMMUTABLE;
    
    SELECT user_id, extract_ids(a)
    FROM ids;
    
    CREATE INDEX ON ids USING gin (extract_ids(a));
    
    SELECT user_id 
    FROM ids
    WHERE ARRAY[3] <@ extract_ids(a);
    



    1. mysql:SELECTで重複した結果を表示しない

    2. 致命的なエラー:未定義の関数mysql_connect_errno()を呼び出します

    3. SQL Serverのストアドプロシージャ/関数で入出力パラメータを宣言する方法は?

    4. CakePHP 3の複数の列で2つのテーブルを結合するにはどうすればよいですか?