@@ -357,3 +357,73 @@ SELECT id, d FROM tstsh WHERE t @@ 'wr&qh' AND d >= '2016-05-16 14:21:25' ORDER
357357 458 | Fri May 20 21:21:22.326724 2016
358358(3 rows)
359359
360+ -- Test multicolumn index
361+ RESET enable_indexscan;
362+ RESET enable_indexonlyscan;
363+ RESET enable_bitmapscan;
364+ SET enable_seqscan = off;
365+ DROP INDEX tstsh_idx;
366+ CREATE INDEX tstsh_id_idx ON tsts USING rum (t rum_tsvector_addon_ops, id, d)
367+ WITH (attach = 'd', to = 't');
368+ EXPLAIN (costs off)
369+ SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND id = 1::int ORDER BY d <=> '2016-05-16 14:21:25' LIMIT 5;
370+ QUERY PLAN
371+ -----------------------------------------------------------------------------------
372+ Limit
373+ -> Index Scan using tstsh_id_idx on tsts
374+ Index Cond: ((t @@ '''wr'' & ''qh'''::tsquery) AND (id = 1))
375+ Order By: (d <=> 'Mon May 16 14:21:25 2016'::timestamp without time zone)
376+ (4 rows)
377+
378+ SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND id = 1::int ORDER BY d <=> '2016-05-16 14:21:25' LIMIT 5;
379+ id | d
380+ ----+---
381+ (0 rows)
382+
383+ EXPLAIN (costs off)
384+ SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND id = 355::int ORDER BY d <=> '2016-05-16 14:21:25' LIMIT 5;
385+ QUERY PLAN
386+ -----------------------------------------------------------------------------------
387+ Limit
388+ -> Index Scan using tstsh_id_idx on tsts
389+ Index Cond: ((t @@ '''wr'' & ''qh'''::tsquery) AND (id = 355))
390+ Order By: (d <=> 'Mon May 16 14:21:25 2016'::timestamp without time zone)
391+ (4 rows)
392+
393+ SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND id = 355::int ORDER BY d <=> '2016-05-16 14:21:25' LIMIT 5;
394+ id | d
395+ -----+---------------------------------
396+ 355 | Mon May 16 14:21:22.326724 2016
397+ (1 row)
398+
399+ EXPLAIN (costs off)
400+ SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d = '2016-05-11 11:21:22.326724'::timestamp ORDER BY d <=> '2016-05-16 14:21:25' LIMIT 5;
401+ QUERY PLAN
402+ ----------------------------------------------------------------------------------------------------------------------------------
403+ Limit
404+ -> Index Scan using tstsh_id_idx on tsts
405+ Index Cond: ((t @@ '''wr'' & ''qh'''::tsquery) AND (d = 'Wed May 11 11:21:22.326724 2016'::timestamp without time zone))
406+ Order By: (d <=> 'Mon May 16 14:21:25 2016'::timestamp without time zone)
407+ (4 rows)
408+
409+ SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d = '2016-05-11 11:21:22.326724'::timestamp ORDER BY d <=> '2016-05-16 14:21:25' LIMIT 5;
410+ id | d
411+ -----+---------------------------------
412+ 232 | Wed May 11 11:21:22.326724 2016
413+ (1 row)
414+
415+ EXPLAIN (costs off)
416+ SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d = '2000-05-01'::timestamp ORDER BY d <=> '2016-05-16 14:21:25' LIMIT 5;
417+ QUERY PLAN
418+ ---------------------------------------------------------------------------------------------------------------------------
419+ Limit
420+ -> Index Scan using tstsh_id_idx on tsts
421+ Index Cond: ((t @@ '''wr'' & ''qh'''::tsquery) AND (d = 'Mon May 01 00:00:00 2000'::timestamp without time zone))
422+ Order By: (d <=> 'Mon May 16 14:21:25 2016'::timestamp without time zone)
423+ (4 rows)
424+
425+ SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d = '2000-05-01'::timestamp ORDER BY d <=> '2016-05-16 14:21:25' LIMIT 5;
426+ id | d
427+ ----+---
428+ (0 rows)
429+