RETURNING
Возвращает строки после INSERT, UPDATE или DELETE без дополнительного SELECT.
INSERT INTO table (...) VALUES (...) RETURNING id; UPDATE table SET ... WHERE ... RETURNING *; DELETE FROM table WHERE ... RETURNING id;
Объяснение
Пример
-- Получить id после вставки INSERT INTO orders (user_id, total) VALUES (1, 999) RETURNING id, created_at; -- Обновить и получить обновлённые строки UPDATE users SET last_seen = NOW() WHERE id = ANY($1) RETURNING id, last_seen;
Связанные термины
Анекдоты по теме
— Чем JSONB отличается от JSON в PostgreSQL? — JSON хранит текст как есть. JSONB парсит и хранит бинарно. — Что быстрее? — JSONB быстрее читать и индексировать. JSON быстрее записывать и сохраняет порядок ключей. — Что выбрать? — Почти всегда JSONB.
— Почему UUID медленнее INT как первичный ключ? — UUID случайный — вставки разбросаны по всему индексу. — INT последовательный — всегда в конец. — Насколько медленнее? — На больших таблицах B-tree страницы постоянно разбиваются. В разы медленнее INSERT. — Решение? — UUID v7 (упорядоченный по времени) или ULID — случайные, но монотонные.
— Что такое materialized path для деревьев? — Храним путь от корня в строке: '1/4/7/12' — Поиск всех потомков: WHERE path LIKE '1/4/%' — Плюсы? — Простота. Быстрый поиск поддерева. — Минусы? — Перемещение узла — обновить все потомки. — Альтернативы? — nested sets, closure table, рекурсивный CTE.