PostgreSQL: Почему подзапросы как выражения не могут возвращать более одной строки, а функции могут?

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

=> select (select 1 union select 2);
ERROR:  more than one row returned by a subquery used as an expression

Но если я создам

=> create or replace function onetwo() returns setof integer as $$
$> select 1 union select 2 
$> $$ language 'sql' strict immutable;
CREATE FUNCTION
=> select onetwo();
 onetwo 
--------
      1
      2

Почему разница?

6
задан OMG Ponies 16 September 2010 в 16:02
поделиться