Этот коммит содержится в:
ihar_hancharenka 2025-10-01 09:47:47 +03:00
родитель 654c78cdd6
Коммит ff40b05ebc
8 изменённых файлов: 76 добавлений и 3 удалений

61
db/sql/postgres/feature/inserg-update.txt Обычный файл
Просмотреть файл

@ -0,0 +1,61 @@
Обращение к предыдущим (OLD) и к текущим (NEW) значениям в предложении RETURNING в PostgreSQL 18.
Всем привет!
Помимо таких ключевых функций в PostgreSQL 18, как асинхронный ввод-вывод и поддержка UUIDv7, мы получили вот такое небольшое, но приятное улучшение.
В этой версии добавлена возможность обращаться как к предыдущим (OLD), так и к текущим (NEW) значениям в предложении RETURNING для команд INSERT, UPDATE, DELETE и MERGE. Суть в том, что теперь доступны два синонима OLD и NEW, с помощью которых мы можем возвращать старые и новые значения в предложении RETURNING.
Это не революционное изменение, как асинхронный ввод-вывод, но это одна из тех небольших функций, которая оказывается просто неоценимой в определённых ситуациях.
Простая демонстрация с UPDATE для получения всех старых и новых значений:
UPDATE fruit
SET quantity = 300
WHERE item = 'Apples'
RETURNING OLD.*, NEW.*;
Вывод:
id|item|quantity|id|item|quantity
——+—-——+————————+——+———+——————
5|Apples| 200 | 5| Apples |300
(1 row)
Получается очень просто, удобно и наглядно! Все как мы любим! ☺️
Вот еще пример.
Допустим, мы выполняем операцию UPSERT (INSERT ... ON CONFLICT ... DO UPDATE) и хотим определить, была ли строка, возвращённая RETURNING, новой вставленной строкой или существующей обновлённой строкой. Это было возможно и раньше, но полагалось на неинтуитивную проверку xmax = 0:
INSERT INTO webhook (
id,
data
) VALUES (
@id,
@data
)
ON CONFLICT (id)
DO UPDATE SET id = webhook.id
RETURNING webhook.*,
(xmax = 0) AS is_new;
Этот оператор полагается на то, что xmax устанавливается в ноль для новой вставки, что является особенностью реализации блокировок в PostgreSQL. Это работает, но не является гарантированной частью API и потенциально может измениться в любой момент.
В PostgreSQL 18 мы можем переписать приведённый выше код так, чтобы он был более понятным и не зависел от деталей реализации. Это также просто - достаточно проверить, является ли OLD значением NULL в предложении RETURNING:
INSERT INTO webhook (
id,
data
) VALUES (
@id,
@data
)
ON CONFLICT (id)
DO UPDATE SET id = webhook.id
RETURNING webhook.*,
(OLD IS NULL)::boolean AS is_new;
Доступ к OLD и NEW, без сомнения, найдёт множество других полезных применений, но этот пример позволяет нам сразу же улучшить код, написанный до 18-й версии.
Переходим на PostgreSQL 18 и пользуемся!

Просмотреть файл

@ -29,6 +29,8 @@ Petkus
2025
Duel - Manucharov - Hazin of 54:43
https://www.youtube.com/watch?v=oLKtrNw2oeg
AlexeyMamontov - Hazin - Trump Won FRS of 43:36
https://www.youtube.com/watch?v=YLttyoh4okA
RadioSputnik - Manucharov - Duel 28:00 of 54:43

Просмотреть файл

@ -1,5 +1,5 @@
2025
USSRHistoryShadows - Bokiy 9:00 of 58:20
USSRHistoryShadows - Bokiy 11:00 of 58:20
https://www.youtube.com/watch?v=ZPjmuaqW3So
! 06:00 - Dvoryanin
! 08:00 - Nastavnik - Pavel Makievskiy

Просмотреть файл

@ -29,6 +29,8 @@ people
! his students - S.S Averintsev, V Bibihin
2025
Mazhuko - Accept Suffering of 12:09
https://www.youtube.com/watch?v=K1wijzldxC8
Mazhuko - Curse of Mother of 11:18
https://www.youtube.com/watch?v=tyO3okqb8G4
Mazhuko - Holly Culinar of 18:23

Просмотреть файл

@ -152,6 +152,9 @@ Seminar - Rest House 23.03.2017 of p7
https://www.youtube.com/playlist?list=PLflQtqFMbdFPBQDZNz8GutPFsc8HnLTHO
Irina - 03.25.2017 - Miroustroitelnye Osnovy Roda 0:00 of 1:45:37
https://www.youtube.com/watch?v=IIwzdk7nx8Y
! 05:30 - Ideally Svaha podbiraet nevest pod zadachu, kotoruyu stavit rod svoemu synu i roda sgovarivayutsya
! Sgovor 2-h rodov kotorye dayut dobro na sovmestnuyu zhizn molodyh
! Inache zhenschina prihodit tuda, gde eyo ne zhdut
Intro - Politinfo of 17:44
https://www.youtube.com/watch?v=Ph__IhLyuAs
! Svyazka 3-h sil !!!

Просмотреть файл

@ -1,4 +1,4 @@
03.01 2020-10-10 - Rode - Language of Elites 46:00 of 1:44:45
03.01 2020-10-10 - Rode - Language of Elites 1:04:00 of 1:44:45
! 03:00 Alexey Nikolaevich - not a descendant
! Dmitry Palych (killed Rasputin) - dublyor
! Mihail ... morganoticheskiy brak
@ -68,7 +68,8 @@
37:00 Myod (honey) - money, ulii (soviet system: zavody, fabriki, accii), bees/pchyoly (literature: voyna i mir, mertvye dushi, skolko lyudey na vas rabotayut)
01.1 2020-07-03 - Rode 1 of 1:12:38
Vayno Anton Eduardovich - dissertation
Vayno Anton Eduardovich - dissertation (with Kobyakov, Saraiv - Image of Victory)
https://drive.google.com/file/d/1RrmlE6EBFhEIYDuGVi6ArapP_4uRwz53/view
https://ru.wikipedia.org/wiki/%D0%92%D0%B0%D0%B9%D0%BD%D0%BE,_%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%AD%D0%B4%D1%83%D0%B0%D1%80%D0%B4%D0%BE%D0%B2%D0%B8%D1%87
notion of superclass
https://search.rsl.ru/ru/record/01005049616

Просмотреть файл

@ -14,6 +14,8 @@ https://www.baeldung.com/java-liquibase-list-sql-types
https://www.baeldung.com/java-postgresql-create-schema-before-liquibase
2025
MihailKiselyov - Liquibase Quick Start 0:00 of 28:00
https://www.youtube.com/watch?v=_c9Eo1heLjg
https://bell-sw.com/blog/how-to-use-liquibase-with-spring-boot/
https://www.youtube.com/watch?v=a1vGvdYKP2Y
https://github.com/code-with-bellsoft/liquibase-demo

Просмотреть файл

@ -1,4 +1,6 @@
2024
MihailKiselyov - Testcontainers 0:00 of 15:38
https://www.youtube.com/watch?v=bB5TR_xdJ94
Jacov - Testcontainers best practices. Anna Chernysheva, Docker (JAVA ON 2024) 0:00 of 1:06:26
https://www.youtube.com/watch?v=BV2D5HrUv0A
Javapro - Making Your Testcontainers Experience Smoother | Piotr Przybyl (EN) 0:00 of 47:52