På onsdag 16. mars 2016 kl. 16:07:56, skrev Evgeniy Shishkin <
itparan...@gmail.com <mailto:itparan...@gmail.com>>:

 > On 16 Mar 2016, at 18:04, Evgeniy Shishkin <itparan...@gmail.com> wrote:
 >
 >>
 >> On 16 Mar 2016, at 17:52, Evgeniy Shishkin <itparan...@gmail.com> wrote:
 >>
 >>
 >>> On 16 Mar 2016, at 16:37, Tom Lane <t...@sss.pgh.pa.us> wrote:
 >>>
 >>> Andreas Joseph Krogh <andr...@visena.com> writes:
 >>>> 1. Why isnt' folder_id part of the index-cond?
 >>>
 >>> Because a GIN index is useless for sorting.
 >>
 >> I don't see how gin inability to return sorted data relates to index 
condition.
 >> In fact i tried to reproduce the example,
 >> and if i change folder_id to int from bigint, then index condition with 
folder_id is used
 >>
 >>        Index Cond: ((fts_all @@ '''hi'''::tsquery) AND (folder_id = 1))
 >>
 >
 > Looks like documentation 
http://www.postgresql.org/docs/9.5/static/btree-gin.html
 > is lying about supporting int8 type
 >

 Uh, it works if i cast to bigint explicitly
       WHERE  del.fts_all @@ to_tsquery('simple', 'hi')
       AND del.folder_id = 1::bigint;
 results in
          Index Cond: ((folder_id = '1'::bigint) AND (fts_all @@ 
'''hi'''::tsquery))
 
Hm, this is quite cranky, but thanks for the heads-up!
 
Tho it looks like it works if prepared, without explicit cast:
 
prepare fish AS  SELECT del.id , del.received_timestamp FROM delivery del WHERE
1= 1 AND del.fts_all @@ to_tsquery('simple', $1) AND del.folder_id = $2 ORDER BY
del.received_timestampDESC LIMIT 101 OFFSET 0; explain analyze execute fish(
'hi:*', 1);                                                          QUERY 
PLAN                                                         
 
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Limit  (cost=9.13..9.13 rows=1 width=16) (actual time=0.047..0.048 rows=2 
loops=1)
    ->  Sort  (cost=9.13..9.13 rows=1 width=16) (actual time=0.045..0.045 
rows=2 loops=1)
          Sort Key: received_timestamp DESC
          Sort Method: quicksort  Memory: 25kB
          ->  Bitmap Heap Scan on delivery del  (cost=7.80..9.12 rows=1 
width=16) (actual time=0.034..0.034 rows=2 loops=1)
                Recheck Cond: ((fts_all @@ '''hi'':*'::tsquery) AND (folder_id 
= '1'::bigint))
                Heap Blocks: exact=1
                ->  Bitmap Index Scan on fts_idx  (cost=0.00..7.80 rows=1 
width=0) (actual time=0.023..0.023 rows=2 loops=1)
                      Index Cond: ((fts_all @@ '''hi'':*'::tsquery) AND 
(folder_id = '1'::bigint))
  Execution time: 0.103 ms
 (10 rows)
 

 
-- Andreas Joseph Krogh
CTO / Partner - Visena AS
Mobile: +47 909 56 963
andr...@visena.com <mailto:andr...@visena.com>
www.visena.com <https://www.visena.com>
 <https://www.visena.com>


 

Reply via email to