その列を整数の配列に変換してよければ、次のようになります。
'/123/12/34/56/5/' becomes ARRAY[123,12,34,56,5]
これpath_arr
は type の列なので、INTEGER[]
その列に GIN インデックスを作成できます。
CREATE INDEX ON things USING gin(path_arr);
12 を含むすべてのアイテムのクエリは次のようになります。
SELECT * FROM things WHERE ARRAY[12] <@ path_arr;
インデックスを使用します。私のテスト (100 万行) では、次のような計画が得られます。
EXPLAIN SELECT * FROM things WHERE ARRAY[12] <@ path_arr;
QUERY PLAN
----------------------------------------------------------------------------------------
Bitmap Heap Scan on things (cost=5915.75..9216.99 rows=1000 width=92)
Recheck Cond: (path_arr <@ '{12}'::integer[])
-> Bitmap Index Scan on things_path_arr_idx (cost=0.00..5915.50 rows=1000 width=0)
Index Cond: ('{12}'::integer[] <@ path_arr)
(4 rows)