JSON — это гибкий формат, который отлично подходит для хранения вложенных структур прямо в базе данных. Современные СУБД поддерживают разнообразные функции для работы с JSON: можно извлекать отдельные значения, фильтровать по ним, разворачивать массивы и объекты.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍7❤5
SELECT FOR UPDATE SKIP LOCKED — распределяем задачи без гонок!
Иногда нужно, чтобы несколько воркеров одновременно обрабатывали очередь задач, не мешая друг другу. Чтобы избежать гонок и блокировок, используется
Представим, что у нас есть таблица задач:
Если несколько процессов попытаются взять одну и ту же задачу — возможна гонка или блокировка.
Используем безопасный способ:
🔥 Каждый воркер получает только одну *свободную* задачу. Если задача уже заблокирована другим процессом — она просто пропускается.
➡️ SQL Ready | #практика
Иногда нужно, чтобы несколько воркеров одновременно обрабатывали очередь задач, не мешая друг другу. Чтобы избежать гонок и блокировок, используется
SELECT … FOR UPDATE SKIP LOCKED
.Представим, что у нас есть таблица задач:
SELECT id, status
FROM tasks
WHERE status = 'pending';
Если несколько процессов попытаются взять одну и ту же задачу — возможна гонка или блокировка.
Используем безопасный способ:
BEGIN;
SELECT id
FROM tasks
WHERE status = 'pending'
FOR UPDATE SKIP LOCKED
LIMIT 1;
-- UPDATE tasks SET status = 'processing' WHERE id = …
COMMIT;
🔥 Каждый воркер получает только одну *свободную* задачу. Если задача уже заблокирована другим процессом — она просто пропускается.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍7🔥5
Например,
код 200
означает, что всё прошло успешно, а 404
сообщает, что страница не найдена.Очень полезно держать под рукой, когда работаешь с API или отлаживаешь backend.
На картинке показаны самые часто используемые статусы от 100 до 599.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤9🔥5
Создаем таблицу для централизованного хранения метаданных изображений с помощью JSONB. Операции JSONB занимают значительно меньше времени, чем операции с JSON, полезно знать, что это такое.
В этом гайде:
• Создаем таблицу метаданных — разрабатываем структуру и связываем с таблицей изображений.
• INSERT JSONB-метаданных — продумываем вставку метаданных при загрузке изображений.
• SELECT JSONB-метаданных — рассматриваем методы выборки и фильтрации JSONB-элементов.
🔥 — если узнал что-то новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤7👍4🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
Простой, понятный и без лишнего шума — сайт предлагает мини-уроки с живыми примерами, которые можно сразу же опробовать в онлайн-редакторе. Никаких установок и лишних шагов — всё обучение происходит в браузере.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6🔥5
Сегодня разбираем SQL-задачу: как найти заказы, сумма которых превышает среднюю по всем заказам.
Ключевые моменты:
• Вычисляем среднюю сумму заказов с помощью SELECT AVG(...).
• Сравниваем каждую строку с этим средним значением в WHERE
• Возвращаем только интересные заказы: order_id, customer_id, total_amount.
Подходит как для новичков, так и для тех, кто хочет отточить работу с подзапросами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥9👍7
WINDOW FUNCTIONS — сравниваем строки без джойнов!
Когда нужно показать, как изменилась цена по сравнению со вчерашним днём — часто пишут
Вместо этого используем оконную функцию
Один проход по таблице, без соединений. План часто использует
Нужен топ-3 товаров по продажам в каждой категории? Используем
🔥 Не забывайте
➡️ SQL Ready | #практика
Когда нужно показать, как изменилась цена по сравнению со вчерашним днём — часто пишут
JOIN
таблицы самой с собой. Но это сложно, медленно и плохо масштабируется при работе с большими таблицами.Вместо этого используем оконную функцию
LAG()
— она возвращает значение из предыдущей строки:SELECT
date,
price AS today,
LAG(price) OVER (
PARTITION BY product_id
ORDER BY date
) AS yesterday
FROM prices
WHERE product_id = 42;
Один проход по таблице, без соединений. План часто использует
Index Only Scan
, особенно при хороших индексах. Это делает запросы заметно быстрее и эффективнее.Нужен топ-3 товаров по продажам в каждой категории? Используем
ROW_NUMBER()
:SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY category
ORDER BY sales DESC
) AS rn
FROM products
) AS ranked
WHERE rn <= 3;
🔥 Не забывайте
ORDER BY
внутри окна — он определяет порядок, по которому сравниваются строки. Без него результаты могут быть непредсказуемыми.Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍6🔥5👎1
❤8👍4👎1🔥1