linuxover, если я правильно понял вопрос, то можно поступить чуть проще.
=# create index on posts using rum(tags rum_anyarray_ops);
=# select * from posts where tags <@ '{a,b,c,d}' order by tags <=> '{d}';
id | tags
----+-------
2 | {a,d}
4 | {b,d}
6 | {c,d}
1 | {a}
3 | {b}
5 | {c}
При этом способе сортировка также выполняется в индексе:
=# set enable_sort to off;
=# explain (costs off) select * from posts where tags <@ '{a,b,c,d}' order by tags <=> '{d}';
QUERY PLAN
---------------------------------------------
Index Scan using posts_tags_idx on posts
Index Cond: (tags <@ '{a,b,c,d}'::text[])
Order By: (tags <=> '{d}'::text[])
Не являюсь специалистом по птицам. Но я некоторое время проработал в Иннополисе, и там каждый день несколько птиц ударялось об окно Технопарка. Конечно там совсем рядом большой лес, но и здание Технопарка небольшое, всего 7 этажей. Но птицы все равно не облетали здание стороной.
При этом способе сортировка также выполняется в индексе:
1 — необходимо скачать или собрать FreeTDS под Windows (http://www.freetds.org/userguide/osissues.htm#WINDOWS)
2 — собрать tds_fdw под Windows. Есть полезные статьи https://wiki.postgresql.org/wiki/Building_and_Installing_PostgreSQL_Extension_Modules и http://blog.2ndquadrant.com/compiling-postgresql-extensions-visual-studio-windows/.
Я сам еще не пробовал собирать tds_fdw под Windows. Возможно попробую и напишу об этом статью.