From ff40b05ebc4b12aefd69705dc4aa7479af7f0129 Mon Sep 17 00:00:00 2001 From: ihar_hancharenka Date: Wed, 1 Oct 2025 09:47:47 +0300 Subject: [PATCH] m --- db/sql/postgres/feature/inserg-update.txt | 61 +++++++++++++++++++ nontech/economy/people/hazin.txt | 2 + nontech/mistery/countries/ru/bokiy-hleb.txt | 2 +- nontech/ortho/people/mazhuko.txt | 2 + nontech/politics/clubs/kob/kob-minin.txt | 3 + nontech/politics/clubs/streetoftruth/fvu.txt | 5 +- .../spring/data/migration/liquibase.txt | 2 + .../testcontainers/docs/presentations.txt | 2 + 8 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 db/sql/postgres/feature/inserg-update.txt diff --git a/db/sql/postgres/feature/inserg-update.txt b/db/sql/postgres/feature/inserg-update.txt new file mode 100644 index 000000000..ef91f1c13 --- /dev/null +++ b/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 и пользуемся! diff --git a/nontech/economy/people/hazin.txt b/nontech/economy/people/hazin.txt index e8ebb0b3a..c8f9088fc 100644 --- a/nontech/economy/people/hazin.txt +++ b/nontech/economy/people/hazin.txt @@ -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 diff --git a/nontech/mistery/countries/ru/bokiy-hleb.txt b/nontech/mistery/countries/ru/bokiy-hleb.txt index 62f4096cf..4d816ab5b 100644 --- a/nontech/mistery/countries/ru/bokiy-hleb.txt +++ b/nontech/mistery/countries/ru/bokiy-hleb.txt @@ -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 diff --git a/nontech/ortho/people/mazhuko.txt b/nontech/ortho/people/mazhuko.txt index 22500ef59..69551126f 100644 --- a/nontech/ortho/people/mazhuko.txt +++ b/nontech/ortho/people/mazhuko.txt @@ -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 diff --git a/nontech/politics/clubs/kob/kob-minin.txt b/nontech/politics/clubs/kob/kob-minin.txt index 3d0a2035a..b1e001246 100644 --- a/nontech/politics/clubs/kob/kob-minin.txt +++ b/nontech/politics/clubs/kob/kob-minin.txt @@ -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 !!! diff --git a/nontech/politics/clubs/streetoftruth/fvu.txt b/nontech/politics/clubs/streetoftruth/fvu.txt index 44cd4f13c..453271448 100644 --- a/nontech/politics/clubs/streetoftruth/fvu.txt +++ b/nontech/politics/clubs/streetoftruth/fvu.txt @@ -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 diff --git a/pl/java/libfws/spring/data/migration/liquibase.txt b/pl/java/libfws/spring/data/migration/liquibase.txt index cbacfa7fe..311fedc90 100644 --- a/pl/java/libfws/spring/data/migration/liquibase.txt +++ b/pl/java/libfws/spring/data/migration/liquibase.txt @@ -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 diff --git a/pl/java/tools/quality/testing/testcontainers/docs/presentations.txt b/pl/java/tools/quality/testing/testcontainers/docs/presentations.txt index abb9b13d2..70544e6a5 100644 --- a/pl/java/tools/quality/testing/testcontainers/docs/presentations.txt +++ b/pl/java/tools/quality/testing/testcontainers/docs/presentations.txt @@ -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