Как насчет создания функции, которая берет идентификатор пользователя и возвращает подмножество строк, к которым он имеет доступ?
CREATE FUNCTION user_items(integer) RETURNS SETOF items AS $$
SELECT * FROM items WHERE user_id = $1
$$ LANGUAGE SQL;
SELECT * FROM user_items(55); # 55 being the user id
edit Если подумать об этом больше, это может привести кснижение производительности, так как условие user_id будет применено ко всему набору данных до любых других условий «пользователь-земля».
Например, SELECT * FROM user_items(55) WHERE id=45
сначала отфильтрует всю таблицу для пользовательских элементов, итолько затем найти идентификатор для этого подмножества.
С помощью представлений планировщик запросов может принять решение об оптимальном порядке оценки условий (где он, вероятно, сначала отфильтрует по идентификатору, чем по идентификатору пользователя).При использовании функции, как я предложил, postgres не может этого сделать.