SQL Portal | Базы Данных
14.9K subscribers
731 photos
100 videos
41 files
586 links
Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных

Связь: @devmangx

РКН: https://clck.ru/3H4Wo3
Download Telegram
PostgreSQL Anonymizer 2.1 — теперь с размытием изображений

Команда PostgreSQL выпустила обновление расширения Anonymizer до версии 2.1, и теперь оно умеет не только маскировать текстовые данные, но и размывать изображения прямо в базе данных

Это полезно для защиты таких данных, как фото профилей, сканы документов, QR-коды и др. Вместо удаления — просто размытие:

SECURITY LABEL FOR anon ON COLUMN user.photo
IS 'MASKED WITH FUNCTION anon.image_blur(photo, 5.0)';


Поддерживаются все стратегии маскирования: динамическое, статическое, анонимные дампы и др.

Доступно для установки через Docker, Ansible, RPM/DEB и работает на многих DBaaS.

Идеальный инструмент для тех, кто работает с прод-данными в тестах и не хочет нарушать приватность.

📎 Подробнее: postgresql.org/news/postgresql-anonymizer-21-blurring-images-3061

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62
Шардировать или не шардировать

📖 Читать: ссылка

👉 @SQLPortal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Ключевое слово WITH позволяет создавать именованные подзапросы.

В Oracle Database также можно создавать локальные функции, например:

WITH FUNCTION fn 
RETURN ... IS BEGIN ... RETURN ...; END;
SELECT fn FROM ...
WHERE fn = ...


Полезно для форматирования строк или другой логики, используемой в запросе

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Ты можешь форматировать даты прямо в PostgreSQL во время выборки!

С помощью функции to_char можно задать любой нужный формат для даты или временной метки — она даёт очень гибкие возможности форматирования 💖

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍134
This media is not supported in your browser
VIEW IN TELEGRAM
Ищем внутри массивов JSON в Oracle SQL с помощью:

JSON_EXISTS(
json_data, '$.path.to.array?(@ == $var)'
PASSING 'val' AS $var
)


?(@ == $var) — ищет элементы массива, совпадающие со значением переменной $var

PASSING 'val' AS $var — устанавливает значение переменной $var равным 'val'

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Вышел pgAdmin 4 v9.3 — свежий релиз удобнейшего инструмента для работы с PostgreSQL

Вот что завезли в этой версии:

> Поддержка пространственных типов PostGIS — теперь ещё удобнее работать с геоданными
> SQL в поле ограничения БД — можно задавать ограничения через SQL
> Улучшено управление ролями и правами
> Поддержка лигатур в шрифтах — код стал ещё читаемее

А ещё исправили кучу багов

🔗 Подробнее: https://www.postgresql.org/about/news/pgadmin-4-v93-released-3068/

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
А вы когда-нибудь задумывались использовать Postgres для выполнения домашки по математике?

В виде SQL-запросов всё выглядит куда проще 😁

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15😁14🤔4🌚1
Преобразуй строки в столбцы в Oracle SQL с помощью:

PIVOT ( agg_fn FOR col IN ( 'val1', 'val2', ... ) )


А столбцы обратно в строки — с помощью:

UNPIVOT ( val FOR col IN ( col1, col2, ... ) )


Киллиан Линч разбирает детали 🤍

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1
3 шага для оптимизации многоколончатых индексов

Порядок колонок в индексе имеет решающее значение:

1. Найдите колонки, сравниваемые через = в ваших WHERE-условиях
2. Расположите их по убыванию количества уникальных значений (от большего к меньшему)
3. Колонки, используемые с <, >, или BETWEEN, поместите в конец

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🤯1
Вышла PostgreSQL 18 Beta 1 — можно начинать тестить ✍️

— Асинхронный I/O через io_uring → до 3x быстрее на Linux
— Виртуальные вычисляемые колонки (как в Oracle/MySQL)
— Skip scan в B-деревьях
— Параллельное построение GIN-индексов
— Улучшения в OR, IN, MERGE, репликации, логах и конфиге

Финальный релиз ожидается осенью, сейчас — лучшее время гонять бенчмарки и готовить миграции.

> Подробнее:
https://www.postgresql.org/about/news/postgresql-18-beta-1-released-3070/

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
MongoDB в основном написан на C++, но использует JavaScript для своей оболочки и Python — для некоторых инструментов и драйверов.

📌Разберёмся — MongoDB

✰ В основе MongoDB — это NoSQL, документно-ориентированная база данных.

✰ Традиционные реляционные базы хранят данные в таблицах и строках.

Но,

✰ MongoDB внутренне хранит данные в бинарном формате BSON (Binary JSON).

✰ BSON — это надмножество JSON.

✰ Он может представлять всё, что умеет JSON, и дополнительно — типы вроде дат и бинарных данных.

✰ BSON более компактный, чем JSON, что уменьшает объём хранения и повышает производительность.

✰ Такая структура позволяет естественнее представлять реальные объекты и их связи

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
Совет по Postgres: используйте filter вместо case when для условных агрегатных функций

Такой код читается лучше, соответствует идиомам SQL и часто работает быстрее 🤍

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍6
Вышли обновления PostgreSQL: 17.5, 16.9, 15.13, 14.18 и 13.21

Исправлена уязвимость (CVE-2025-4207) — баг в проверке кодировки GB18030 мог крашить процесс.

Плюс 60+ фиксов:
— Фикс MERGE с DO NOTHING
— Правки BRIN bloom-индексов
— Улучшения в планировщике и логической репликации
— Обновлены часовые пояса (tzdata 2025b)

📌Поддержка 13-й версии заканчивается 13 ноября — пора планировать апгрейд.

Детали и список изменений:
https://www.postgresql.org/about/news/postgresql-175-169-1513-1418-and-1321-released-3072/

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Новичок в базах данных и ищешь увлекательный способ изучения?

Лови -> «Манга-гид по базам данных» 😁

Узнай о нормализации и SQL, следуя за принцессой Руруной, которая использует базы данных для управления фруктовой империей Королевства Код!

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Одноразовая загрузка данных с использованием встроенных внешних таблиц в Oracle Database

Этот запрос использует функцию EXTERNAL, содержащую определение внешней таблицы:

SELECT ... FROM EXTERNAL (
COLUMNS ( ... )
DEFAULT DIRECTORY ...
LOCATION ( '<имя_файла>' )
);


То есть, вы можете выполнить одноразовую загрузку данных из файла, находящегося на сервере базы данных, без создания постоянной внешней таблицы — прямо в SQL-запросе 😍

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
Глубокие SQL-вопросы, которые ты боялся задать

1. WHERE против HAVING

WHERE фильтрует строки до группировки,
а HAVING — после неё.

HAVING используют с агрегатами, например, SUM(), чтобы фильтровать уже сгруппированные данные.

2. Что такое "оконные функции" и чем они отличаются от групповых?

Оконные функции (ROW_NUMBER(), SUM() OVER() и др.) работают с набором строк, связанных с текущей, не объединяя их, как GROUP BY

Это позволяет одновременно видеть и отдельные строки, и агрегаты.

3. Что такое CTE и чем они отличаются от подзапросов?

CTE (Common Table Expressions) — это временные именованные результаты, создаваемые с помощью WITH, которые можно использовать в основном запросе.

В отличие от подзапросов, CTE:
• читаются легче,
• могут быть рекурсивными,
• можно использовать несколько раз в одном запросе.

4. Что такое "взаимная блокировка" (Deadlock) и как её избежать?

Deadlock — это когда две транзакции блокируют друг друга, не давая завершиться

Избежать можно так:
• Держите транзакции короткими.
• Всегда обращайтесь к таблицам в одном порядке.
• Добавьте повторные попытки при сбоях.

5. Что такое "секционированные таблицы" и как они ускоряют запросы?

Секционирование делит большую таблицу на части (например, по дате или региону).

Если запрос фильтрует по секционированному столбцу, он пропустит нерелевантные части — это ускоряет выполнение.

6. Что такое "материализованные представления" и чем они отличаются от обычных?

Материализованные представления хранят результаты запроса физически, поэтому читаются быстрее — но могут устаревать.

Обычные представления данные не хранят, это просто сохранённые запросы

7. Что такое "покрывающий индекс" и зачем он нужен?

Покрывающий индекс содержит все столбцы, нужные для запроса

База может ответить на такой запрос только по индексу, не заглядывая в таблицу — это сильно ускоряет чтение.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥2🏆2
Совет по psql: настройте файл psqlrc

Если вы часто работаете с psql, создайте файл-шаблон psqlrc с любимыми настройками форматирования и командами. В него можно даже сохранить часто используемые SQL-запросы как пользовательские команды.

Например, чтобы создать команду для просмотра медленных запросов:

\set long_running 'SELECT pid, now() - pg_stat_activity.xact_start AS duration, query, state FROM pg_stat_activity WHERE (now() - pg_stat_activity.x...'


Теперь, когда этот запрос сохранён в psqlrc, достаточно ввести :long_running, чтобы выполнить его и сразу получить результат 😮

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Раньше я слишком много думал, какую базу данных выбрать.

Тонул в бенчмарках, блогах и маркетинговых обещаниях. 💩 Пока не нашёл эту простую блок-схему.

Она отсекает лишнее и помогает выбрать всего по двум вопросам:

> Какие у тебя данные?
> Что ты с ними делаешь?

Суть такая:

-> Структурированные + OLTP → реляционная БД
-> Структурированные + OLAP → колоночная БД
-> Неструктурированные → объектное хранилище

Полуструктурированные?

> В формате словаря? → Key-Value или In-memory
> Много связей? → графовая БД
> По времени? → time-series БД
> Геоданные? → геопространственная БД
> Вложенный JSON? → документная БД
> Много поиска? → поисковая БД

Эта схема сэкономила мне кучу времени. Возможно, поможет и тебе 💖

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥5🤯2
Совет по SQL:

Всегда следи за индексами и поддерживай их в порядке.
Неиспользуемые или дублирующие индексы = медленные записи и зря занятое место.

Почему это важно?
– Чистые индексы = быстрее вставки и обновления
– Меньше I/O → выше производительность

Используй этот запрос, чтобы найти неиспользуемые индексы в SQL Server 🔍

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83
This media is not supported in your browser
VIEW IN TELEGRAM
PostgreSQL в Kubernetes

На экране — живая база Postgres, счётчик строк в левом верхнем углу

Сначала мы останавливаем основной pod и удаляем primary — происходит автоматический failover, и выбирается новый лидер через Patroni. Затем мы удаляем каталог PGDATA у текущего Primary — и снова failover.

Хаоса явно недостаточно? 😈

На правой панели видно, как маршрутизация и сетевой трафик автоматически подстраиваются под сбои

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3