Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SELECT без FROM / 2 сообщений из 2, страница 1 из 1
20.06.2019, 09:39
    #39828659
Сисдба Мастеркеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT без FROM
Всем привет.

Подскажите, как PG понимает, что надо делать, если пишем SELECT без части FROM ?

Например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Одна запись:
SELECT 1;

Одна запись (!??):
SELECT row_number() OVER ();

3 записи (?):
SELECT unnest(ARRAY[4,5,6]);



И самый интересный пример:
Код: sql
1.
SELECT row_number() OVER (), unnest(ARRAY[4,5,6]);


row_numberunnest141516

Если написать по-человечески, то будет ожидаемо:
Код: sql
1.
SELECT row_number() OVER (), unnest FROM unnest(ARRAY[4,5,6]);


row_numberunnest142536

Такое ощущение, что
Код: sql
1.
SELECT row_number() OVER (), unnest(ARRAY[1,2,3]);

неявно переделывается в что-то типа:
Код: sql
1.
WITH rn (n) AS (SELECT row_number() OVER ()) SELECT n, unnest FROM rn JOIN unnest(ARRAY[4,5,6]) ON 1=1
...
Рейтинг: 0 / 0
20.06.2019, 11:20
    #39828697
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT без FROM
Сисдба Мастеркеевич,

по возможности избегайте старого синтаксиса для лейтералов--таб-ф-ций (т.е. сет--ретёрнинг ф-ии в перечеслениях листа селекта, а не во фроме). оно плохо совместимо с ?"новой" техникой оптимизации вызова ф-й.

и проверяйте как оно на деле , если рискуете
в т.ч. проверяйте что не отоптимизирован рендом и прочие волатили в том же стиле. (один раз на все строки а не по разу на строку)

зато скаляры тоже можно во фром. с обратным эффектом

Код: sql
1.
SELECT row_number() OVER (), random(), random, unnest(ARRAY[4,5,6]) from random();



из схожих неприятностей -- модифицирующая(пишущая) ф-я в селект-- CTE может не вызываться, в отличие от "явно пишущих" CTE-ветвей (insert/update/delete) -- т.к. оптимизатор не увидит необходимости выполнения селект--CTE для конечного предложения запроса.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SELECT без FROM / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]