Re: View efficiency questions

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: View efficiency questions
Дата
Msg-id 16552.1095006860@sss.pgh.pa.us
обсуждение исходный текст
Ответ на View efficiency questions  (Phil Endecott <spam_from_postgresql_general@chezphil.org>)
Ответы Re: View efficiency questions  (Phil Endecott <spam_from_postgresql_general@chezphil.org>)
Список pgsql-general
Phil Endecott <spam_from_postgresql_general@chezphil.org> writes:
> Instead it looks as if the functions are applied to every row, i.e. V is
> completely built, and then the one row is selected.

This would depend very largely on the details of V and on the details of
the calling query ... not to mention which Postgres version you are using.
In general I would not expect a trivial case to act that way (see
attached counterexample), so I suspect you haven't told us everything.
Give us a concrete example, please ...

            regards, tom lane

regression=# create function f1(int) returns int language plpgsql as '
regression'# begin
regression'#   raise notice ''f1: %'', $1;
regression'#   return $1;
regression'# end';
CREATE FUNCTION
regression=# select * from int4_tbl;
     f1
-------------
           0
      123456
     -123456
  2147483647
 -2147483647
(5 rows)

regression=# create view v1 as select *,f1(f1) as func from int4_tbl;
CREATE VIEW
regression=# select * from v1;
NOTICE:  f1: 0
NOTICE:  f1: 123456
NOTICE:  f1: -123456
NOTICE:  f1: 2147483647
NOTICE:  f1: -2147483647
     f1      |    func
-------------+-------------
           0 |           0
      123456 |      123456
     -123456 |     -123456
  2147483647 |  2147483647
 -2147483647 | -2147483647
(5 rows)

regression=# select * from v1 where f1 = 0;
NOTICE:  f1: 0
 f1 | func
----+------
  0 |    0
(1 row)

regression=#

В списке pgsql-general по дате отправления:

Предыдущее
От: Michael Fuhr
Дата:
Сообщение: LOG: failed to commit transaction_isolation
Следующее
От: Devrim GUNDUZ
Дата:
Сообщение: Re: Clustering postgresql