Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / postgres 9.5 / 14 сообщений из 14, страница 1 из 1
13.01.2016, 22:09
    #39146811
PCContra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
7 января этого года вышел постгре 9.5

Предлагаю поделиться всеми изменениями, с которыми столкнулись или которых ждали именно Вы.

Для меня настоящим сюрпризом стала возможность делать SELECT внутри команды UPDATE
http://www.postgresql.org/docs/9.5/static/sql-update.html
которой не было еще в версии 9.4.5
9.4Compatibility

This command conforms to the SQL standard, except that the FROM and RETURNING clauses are PostgreSQL extensions, as is the ability to use WITH with UPDATE.

According to the standard, the column-list syntax should allow a list of columns to be assigned from a single row-valued expression, such as a sub-select:

Код: sql
1.
2.
3.
UPDATE accounts SET (contact_last_name, contact_first_name) =
    (SELECT last_name, first_name FROM salesmen
     WHERE salesmen.id = accounts.sales_id);



This is not currently implemented — the source must be a list of independent expressions.

Some other database systems offer a FROM option in which the target table is supposed to be listed again within FROM. That is not how PostgreSQL interprets FROM. Be careful when porting applications that use this extension.


Хотя в стандарте такая возможность описана.

Наконец-то заработал один их моих запросов, написанный 4 года назад ))))
Код: sql
1.
2.
3.
UPDATE accounts SET (contact_first_name, contact_last_name) =
    (SELECT first_name, last_name FROM salesmen
     WHERE salesmen.id = accounts.sales_id);



Ура, товарищи!

--
Россия - отличная страна!
...
Рейтинг: 0 / 0
14.01.2016, 14:25
    #39147348
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
PCContra,
JSONB,
Блокировки с возможностью SKIP LOCKED,
UPSERT,
BRIN индексы
+ всякая админская всячина по мелочи
...
Рейтинг: 0 / 0
14.01.2016, 14:26
    #39147350
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
ОКТОГЕНPCContra,
JSONB
правда, это появилось раньше, но всё равно это клёвая фича
...
Рейтинг: 0 / 0
14.01.2016, 14:46
    #39147378
tadmin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
jsonb_set
BRIN индексы
...
Рейтинг: 0 / 0
14.01.2016, 15:01
    #39147399
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
PCContraДля меня настоящим сюрпризом стала возможность делать SELECT внутри команды UPDATEВ чем сюрпризность? Селект-выражение в качестве источника можно использовать издревна. Функционально отличается от update from, только односторонностью корреляции. То есть, изменение сводится к очередной вариации синтаксиса.

По теме - распечатай релиз-ноты, проставь галочки, что понравилось и повесь в многостраничной рамке над рабочим местом.

Не по теме -
PCContraРоссия - отличная страна!отличная от чего?
...
Рейтинг: 0 / 0
14.01.2016, 15:14
    #39147409
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
SKIP LOCKED

(y)
...
Рейтинг: 0 / 0
15.01.2016, 09:39
    #39147935
Владимир П.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
- GROUPING SETS, CUBE, ROLLUP
- INSERT ... ON CONFLICT

В предыдущих релизах больше всего порадовали:
- частичные агрегаты FILTER (WHERE condition)
- LATERAL JOIN
- тип данных "Range"
...
Рейтинг: 0 / 0
15.01.2016, 11:37
    #39148072
PCContra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
Хотя бы один практичный пример хотелось бы услышать по каждой из Ваших любимых новинок...
Ну, с upsert все ясно, про него можно не писать))
...
Рейтинг: 0 / 0
15.01.2016, 11:59
    #39148106
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
PCContra,

человек, не всосавший выгоды LATERAL (для всех СУБД) должен страдать
//хотя бы для исп--я table--returning functions.

если бы я писал нормальные учётные БД с нормальными констрейнтами -- то же бы утверждал про range-ы и exclude--ы

фильтры всегда делались руками -- т.е. разновидность синтаксиса, т.ч. тут шликать излишне. думается

вот там ещё что--то было (склероз) для потолочных оценок статистики новенькое -- скорее всего интересно под определённый круг задач. но опять пока не мне.
...
Рейтинг: 0 / 0
15.01.2016, 12:48
    #39148158
Andrey Sribnyak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
PCContra
Код: sql
1.
2.
3.
UPDATE accounts SET (contact_last_name, contact_first_name) =
    (SELECT last_name, first_name FROM salesmen
     WHERE salesmen.id = accounts.sales_id);





Мне кажется это просто синтексический сахар... никто не мешал раньше сделать примерно так:

Код: sql
1.
2.
3.
4.
UPDATE accounts 
SET contact_first_name = first_name, contact_last_name =last_name
FROM accounts, salesmen
WHERE salesmen.id = accounts.sales_id;
...
Рейтинг: 0 / 0
15.01.2016, 13:40
    #39148216
Andrey Sribnyak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
Код: sql
1.
2.
3.
4.
UPDATE accounts 
SET contact_first_name = first_name, contact_last_name =last_name
FROM salesmen
WHERE salesmen.id = accounts.sales_id;
...
Рейтинг: 0 / 0
15.01.2016, 14:49
    #39148281
Владимир П.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
qwwqфильтры всегда делались руками -- т.е. разновидность синтаксиса, т.ч. тут шликать излишне.
Зато с ними теперь можно в одном запросе сделать несколько агрегатов по разным критериям. Без этой фичи пришлось бы делать столько самосоединений (иногда можно выкрутиться с помощью CASE, но только в простых случаях), сколько у нас различных условий для агрегатов:

Код: sql
1.
2.
3.
SELECT SUM( T.data ), SUM( T.data ) FILTER( WHERE T.criteria = 4 )
FROM T
WHERE T.category = 18



Ну-ка, сформулируйте то же самое без фильтров ;)
...
Рейтинг: 0 / 0
15.01.2016, 15:01
    #39148293
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
Владимир П.
Код: sql
1.
2.
3.
SELECT SUM( T.data ), SUM( T.data ) FILTER( WHERE T.criteria = 4 )
FROM T
WHERE T.category = 18

Ну-ка, сформулируйте то же самое без фильтров ;)чем приведенный пример отличается от "только в простых случаях", применимых для case?
...
Рейтинг: 0 / 0
15.01.2016, 15:27
    #39148310
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
postgres 9.5
Владимир П.,

не нукай, не запряг.

если посмотреть
Код: sql
1.
aggregate_name (expression [ , ... ] [ order_by_clause ] )  FILTER ( WHERE filter_clause ) 



эквивалентен

Код: sql
1.
aggregate_name (CASE WHEN filter_clause THEN expression END [ , ... ] [ order_by_clause ] )




по крайней мере для STRICT агрегатов. (о существовании иных надо много медитировать)

и выигрыш (по крайней мере в написании/синтакс--анализе) только для многопараметрических -- т.к. в них фильтр можно задать один раз, а case придется писать/разбирать в каждом параметре. а был бы ли выигрыш при выполнении -- вопрос. ничто не мешает оптимайзеру соптимайзить одинаковые кейсы.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / postgres 9.5 / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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