2013-06-10 3 views
0

Я хотел бы присоединиться к доктрине сущности процедура PostgreSQL акций (который возвращает таблицу в качестве результата) вместо таблицыУчение 2 Postgresql отображение процедуры акций

Ex: процедура Get_Uuser (Sexe, возраст) поиск все пользователи для выбранных параметров et возвращают коллекцию user_id (например, имена user_id_rech).

В PgSQL, можно использовать эту процедуру запаса в виде таблицы:

выберите имя_пользователя Пользователя влево присоединиться к get_user ('Н', 45), где User.user_id = user_id_rech

Процедура запаса используется как таблица здесь.

Я не думаю, что доктрина 2 позволяет сопоставить процедуру запаса, но мне бы хотелось, чтобы кто-то подтвердил это мне.

Благодаря

ответ

1

(Пишущий это как ответ, потому что это слишком долго, как комментарий.)

ли доктрина позволяет этому или нет, я хотел бы добровольцем, что ваш запрос будет неэффективным (возможно, ужасно), потому что Postgres не будет иметь возможности оценить, сколько строк Get_User() вернется.

Скорее всего, ваша функция является простой оберткой вокруг return query select ... в plpgsql или эквивалентом SQL, если написано на простом sql. Если это так, подумайте о создании представления. Это позволит Postgres переписывать запрос, если это необходимо, а также использовать правильную статистику для содержимого вашей таблицы и, вероятно, позволит полностью избавиться от соединения.

Еще лучше, оставьте запрос напрямую. Если вы его часто используете, создайте функцию, которая вернет ее для дальнейшей фильтрации.

+0

Спасибо за ваш ответ. Get_user - это просто (очень) простой пример, используемый только для того, чтобы сделать мой вопрос более понятным. Моя реальная функция на самом деле является динамическим построителем запросов, который возвращает данные из нескольких таблиц. Создание представления в этом случае невозможно. С уважением –

+0

Обратите внимание, что вы можете сообщить PostgreSQL, сколько строк обычно возвращает запрос. См. Документы в разделе 'CREATE FUNCTION' –

Смежные вопросы