мелкое — крупно,
в глубоком разговоре
мудрость приходит
по вопросам сюда: @aigul_sea
Post #520
1.94K
Advent of SQL. Day 10
🏰 Вот такую конструкцию я 200% ни разу не встречала и не подозревала о ней! В задаче нужно было перенести данные из таблицы1 в таблицу2 и вывести только перенесенные строчки. Но обязательно в одном запросе - эммм... а как?
Дали подсказку - использовать по максимуму возможности постгри. Что ж, по первой ссылке я нашла тред на stackoverflow
С помощью CTE и RETURNING можно возвращать вставленные/удаленные/обновленные строки и передавать их в следующий запрос. Наверное, можно навешивать несколько cte, строить цепочки таких перемещений и даже ETL из raw в витрину, но звучит как мазохизм 😁
В финальном запросе получилось так:
Мы из delete передаем строки в insert, а из insert выводим на экран - это мэджик какой-то 😍
🏴 Фразы дня
I'm feeling stingy - ощущаю себя скупым
inexplicably - необъяснимо
issue an edict - издать указ
meddle in - вмешиваться
muck it up - все испортить
plop - плюхнуться
sleigh is airborne - сани находятся в воздухе
volcano rim - край вулкана
📍 Advent of SQL (с впн)
📍 SQL Advent Calendar (с впн)
📍 Мои решения
@data_engineerette
Stack Overflow move data from one table to another, postgresql edition I'd like to move some data from one table to another (with a possibly different schema). Straightforward solution that comes into mind is -
start a transaction with serializable isolation level;
I... 🏰 Вот такую конструкцию я 200% ни разу не встречала и не подозревала о ней! В задаче нужно было перенести данные из таблицы1 в таблицу2 и вывести только перенесенные строчки. Но обязательно в одном запросе - эммм... а как?
Дали подсказку - использовать по максимуму возможности постгри. Что ж, по первой ссылке я нашла тред на stackoverflow
С помощью CTE и RETURNING можно возвращать вставленные/удаленные/обновленные строки и передавать их в следующий запрос. Наверное, можно навешивать несколько cte, строить цепочки таких перемещений и даже ETL из raw в витрину, но звучит как мазохизм 😁
В финальном запросе получилось так:
with moved_rows as (
delete from deliveries
where ...
returning *
)
insert into misdelivered_presents
select
*,
date_trunc('second', LOCALTIMESTAMP) as flagged_at,
'Invalid delivery location' as reason
from moved_rows
returning *
Мы из delete передаем строки в insert, а из insert выводим на экран - это мэджик какой-то 😍
🏴 Фразы дня
I'm feeling stingy - ощущаю себя скупым
inexplicably - необъяснимо
issue an edict - издать указ
meddle in - вмешиваться
muck it up - все испортить
plop - плюхнуться
sleigh is airborne - сани находятся в воздухе
volcano rim - край вулкана
📍 Advent of SQL (с впн)
📍 SQL Advent Calendar (с впн)
📍 Мои решения
@data_engineerette
- 🔥 8
- ❤ 4
- 🤔 1










