Как вызвать функцию в представлении - PullRequest
0 голосов
/ 02 апреля 2012

Я бы хотел вызвать функцию в представлении для разрешения виртуального столбца. Расчет зависит от данных в фактической строке и не нужно многократно выбирать данные. Это правильно?? И как бонус, возможна ли функция звонка внутри звонка другому?

CREATE VIEW my_view AS SELECT c.column1,c.columns2,... my_function(c) FROM my_table c

CREATE VIEW my_view AS SELECT c.money, c.quantity,... my_ratio_function(c.money,c.quantity,select sum_all_pays(my_view)) FROM my_table c

примечание. Я здесь, потому что когда искал, не могу найти это. Если у вас есть какие-то другие идеи, сформулируйте их. Вторая команда не уверена в правильности.

1 Ответ

1 голос
/ 02 апреля 2012

Можно использовать функции в определении представления.Единственное ограничение - вы должны всегда давать явное имя столбцу, который на самом деле является вызовом функции, в противном случае PostgreSQL не знает, как представить определение представления.

Тем не менее, вы не можете ссылаться на представление изнутриПосмотреть.Вместо этого вы можете создать 2 вида, тогда вы можете ссылаться на внутренний вид снаружи.Другой подход заключается в использовании конструкции WITH , которая мне очень удобна и используется очень часто.

Обратите внимание, что представление - это просто хранимый на сервере SQL, и для него будут вызваны функциикаждый ряд каждый раз, когда вы будете запрашивать представление.Чтобы получить некоторые улучшения производительности, вы можете определить свои функции либо как IMMUTABLE, либо как STABLE .

И я согласен с Фрэнком - продолжайте и протестируйте свои представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...