зеркало из
https://github.com/iharh/notes.git
synced 2025-10-30 05:06:05 +02:00
m
Этот коммит содержится в:
родитель
654c78cdd6
Коммит
ff40b05ebc
61
db/sql/postgres/feature/inserg-update.txt
Обычный файл
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
|
2025
|
||||||
|
Duel - Manucharov - Hazin of 54:43
|
||||||
|
https://www.youtube.com/watch?v=oLKtrNw2oeg
|
||||||
AlexeyMamontov - Hazin - Trump Won FRS of 43:36
|
AlexeyMamontov - Hazin - Trump Won FRS of 43:36
|
||||||
https://www.youtube.com/watch?v=YLttyoh4okA
|
https://www.youtube.com/watch?v=YLttyoh4okA
|
||||||
RadioSputnik - Manucharov - Duel 28:00 of 54:43
|
RadioSputnik - Manucharov - Duel 28:00 of 54:43
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
2025
|
2025
|
||||||
USSRHistoryShadows - Bokiy 9:00 of 58:20
|
USSRHistoryShadows - Bokiy 11:00 of 58:20
|
||||||
https://www.youtube.com/watch?v=ZPjmuaqW3So
|
https://www.youtube.com/watch?v=ZPjmuaqW3So
|
||||||
! 06:00 - Dvoryanin
|
! 06:00 - Dvoryanin
|
||||||
! 08:00 - Nastavnik - Pavel Makievskiy
|
! 08:00 - Nastavnik - Pavel Makievskiy
|
||||||
|
|||||||
@ -29,6 +29,8 @@ people
|
|||||||
! his students - S.S Averintsev, V Bibihin
|
! his students - S.S Averintsev, V Bibihin
|
||||||
|
|
||||||
2025
|
2025
|
||||||
|
Mazhuko - Accept Suffering of 12:09
|
||||||
|
https://www.youtube.com/watch?v=K1wijzldxC8
|
||||||
Mazhuko - Curse of Mother of 11:18
|
Mazhuko - Curse of Mother of 11:18
|
||||||
https://www.youtube.com/watch?v=tyO3okqb8G4
|
https://www.youtube.com/watch?v=tyO3okqb8G4
|
||||||
Mazhuko - Holly Culinar of 18:23
|
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
|
https://www.youtube.com/playlist?list=PLflQtqFMbdFPBQDZNz8GutPFsc8HnLTHO
|
||||||
Irina - 03.25.2017 - Miroustroitelnye Osnovy Roda 0:00 of 1:45:37
|
Irina - 03.25.2017 - Miroustroitelnye Osnovy Roda 0:00 of 1:45:37
|
||||||
https://www.youtube.com/watch?v=IIwzdk7nx8Y
|
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
|
Intro - Politinfo of 17:44
|
||||||
https://www.youtube.com/watch?v=Ph__IhLyuAs
|
https://www.youtube.com/watch?v=Ph__IhLyuAs
|
||||||
! Svyazka 3-h sil !!!
|
! 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
|
! 03:00 Alexey Nikolaevich - not a descendant
|
||||||
! Dmitry Palych (killed Rasputin) - dublyor
|
! Dmitry Palych (killed Rasputin) - dublyor
|
||||||
! Mihail ... morganoticheskiy brak
|
! 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)
|
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
|
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
|
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
|
notion of superclass
|
||||||
https://search.rsl.ru/ru/record/01005049616
|
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
|
https://www.baeldung.com/java-postgresql-create-schema-before-liquibase
|
||||||
|
|
||||||
2025
|
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://bell-sw.com/blog/how-to-use-liquibase-with-spring-boot/
|
||||||
https://www.youtube.com/watch?v=a1vGvdYKP2Y
|
https://www.youtube.com/watch?v=a1vGvdYKP2Y
|
||||||
https://github.com/code-with-bellsoft/liquibase-demo
|
https://github.com/code-with-bellsoft/liquibase-demo
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
2024
|
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
|
Jacov - Testcontainers best practices. Anna Chernysheva, Docker (JAVA ON 2024) 0:00 of 1:06:26
|
||||||
https://www.youtube.com/watch?v=BV2D5HrUv0A
|
https://www.youtube.com/watch?v=BV2D5HrUv0A
|
||||||
Javapro - Making Your Testcontainers Experience Smoother | Piotr Przybyl (EN) 0:00 of 47:52
|
Javapro - Making Your Testcontainers Experience Smoother | Piotr Przybyl (EN) 0:00 of 47:52
|
||||||
|
|||||||
Загрузка…
x
Ссылка в новой задаче
Block a user