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

Связь: @devmangx

РКН: https://clck.ru/3H4Wo3
Download Telegram
Функция NVL в Oracle SQL возвращает:

первый аргумент, если он не NULL

иначе — второй аргумент

Пример использования:

WHERE col = NVL(:var, col)


План выполнения может использовать индекс, если :var не NULL,
и full table scan, если :var равен NULL.

Демо у Monika Mitura

@SQLPortal
👍6
Полный курс по SQL от основ до продвинутого уровня

Репозиторий SQL-Tutorials от разработчика GowthamRaj K представляет собой обширный ресурс для изучения SQL, идеально подходящий для начинающих и тех, кто хочет систематизировать свои знания.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73
Новый уровень облачного администрирования

Команда Yandex Cloud запустила AI-ассистентов для работы с базами данных. Теперь можно управлять базами данных YDB, Trino, ClickHouse, PostgreSQL и другими с помощью AI-ассистентов.

ИИ-ассистент в YDB поможет провести диагностику, оптимизировать работу с базами данных и предложить варианты более эффективной работы с БД. Также для других задач можно подключить к YDB нейросети через MCP-сервер.

В WebSQL ИИ-помощник может генерировать запросы к базам данных по запросу пользователя на естественном языке. Также на платформе можно автоматически разметить метаданные через Data Catalog.

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

@SQLPortal
4👍3
PostgreSQL испытывает трудности при росте числа подключений

Даже умеренное количество клиентов может «сломать» PostgreSQL. Причина в том, как СУБД обрабатывает каждое соединение.

При подключении нового клиента процесс postmaster создаёт отдельный бэкенд-процесс (не поток) для работы с сессией. Этот процесс поддерживает соединение до отключения клиента или потери соединения.

С ростом числа клиентов сервер создаёт всё больше процессов. Каждый из них кеширует системные таблицы, подготовленные выражения, промежуточные результаты запросов и другие данные, что резко увеличивает потребление памяти.

Решение — использовать пул соединений, например, pg_bouncer. Менеджер пула держит заранее созданные соединения с базой и выдаёт их клиентам по мере необходимости, вместо того чтобы создавать новое соединение для каждого запроса. Это позволяет обслуживать больше клиентов при меньшем количестве соединений к базе.

Интересный факт, существует предложение перевести PostgreSQL на многопоточную модель вместо текущей многопроцессной, что потенциально могло бы решить проблему масштабируемости.

Детальный разбор того, как PostgreSQL управляет соединениями

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥42
Создавайте blockchain-таблицы в Oracle Database с помощью

CREATE BLOCKCHAIN TABLE ... ( ... )
NO DROP UNTIL n DAYS IDLE
NO DELETE UNTIL n DAYS AFTER INSERT
HASHING USING SHA2_512 VERSION "v1"


Эти параметры:

- разрешают INSERT,
- запрещают UPDATE,
- запрещают DELETE/DROP до истечения заданного количества дней (N).

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
4
This media is not supported in your browser
VIEW IN TELEGRAM
Postgres: процесс-на-соединение

MySQL: поток-на-соединение

Узнайте больше о процессах, потоках, пуле соединений и о том, как они влияют на производительность базы данных — читать

@SQLPortal
8
На GitHub появился новый проект SQLBot — база данных без SQL. 😱

Всего за несколько дней он собрал 1.5K ★

SQLBot умеет отвечать на вопросы на естественном языке, поддерживает MySQL, SQL Server, ClickHouse, RedShift и даже Excel/CSV.

Встроена авто-визуализация, прогнозы и простая установка через Docker.

SQLBot на GitHub

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Индексирование полнотекстового поиска с подстановочными символами в Postgres? Вот практическое видео, которое показывает, как использовать pg_trgm и GIN-индексы

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4
Бесплатный курс по SQL от Baraa Khatib Salkini, известного как DataWithBaraa. Курс охватывает всё от основ до сложных запросов и реальных проектов. 🤑

В GitHub-репозитории есть datasets/ с реальными данными из ERP и CRM, scripts/ с готовыми SQL-скриптами для практики и docs/ с документацией и материалами курса.

Ссылка на курс

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥3
Совет для Postgres: используйте jsonb_pretty, чтобы выводить JSON в удобочитаемом вертикальном виде.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3
Типы связей в базах данных:

Связи показывают, как данные между собой связаны.

Три основных типа связей:

Один к одному (One-to-One) —> запись в одной таблице связана с одной записью в другой таблице.

Один ко многим (One-to-Many) —> запись в одной таблице связана с несколькими записями в другой таблице.

Многие ко многим (Many-to-Many) —> записи в обеих таблицах могут быть связаны с несколькими записями в другой таблице.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍3
Простое объяснение Primary Key и Foreign Key в SQL:

Primary Key (PK) это уникальный идентификатор записи в таблице. В таблице customers поле customer_id является первичным ключом. Каждому клиенту присваивается уникальный номер, и два клиента не могут иметь одинаковый ID. Sarah Johnson всегда будет клиентом с ID 1001, а если завтра зарегистрируется другая Sarah Johnson, ей дадут другой ID. Это помогает организовать данные и избежать путаницы.

Foreign Key (FK) это связь между таблицами, как мост. В таблице orders поле customer_id является внешним ключом. Здесь он не уникален, потому что один клиент может сделать несколько заказов. Например, Sarah (customer 1001) сделала два заказа — на ноутбук и на клавиатуру. Внешний ключ customer_id в таблице orders ссылается на первичный ключ в таблице customers.

Без внешнего ключа пришлось бы хранить имя и email Сары в каждой записи заказа, что создаёт хаос и занимает лишнее место. Используя FK, данные клиента хранятся один раз в таблице customers, а в таблице orders просто ссылаются на него через ID. Это делает систему чистой, эффективной и масштабируемой.

PK уникально идентифицирует запись, а FK соединяет связанные данные между таблицами.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95
В Postgres 18 появились виртуальные вычисляемые колонки

Если убрать ключевое слово stored в определении, колонка не будет храниться на диске, а будет вычисляться на лету.

Это экономит место и не замедляет записи, но может замедлять чтение, так что использовать стоит с умом.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍4
Получение значений из первой, N-й и последней строки:

FIRST_VALUE ⇒ первая
NTH_VALUE ⇒ N-я
LAST_VALUE ⇒ последняя

По умолчанию окно заканчивается на текущей строке ⇒

NTH_VALUE(v, N) возвращает NULL для строк до N
LAST_VALUE возвращает последнее значение с тем же sort key, а не из самой последней строки

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
5
Карен Джекс поделилась свежим материалом о партиционировании в Postgres.

Ранее она выступила с этим докладом на Euroko, а теперь опубликовала подробный блог с разбором примера и практическими рекомендациями по эффективному использованию партиционирования.

https://karenjex.blogspot.com/2025/09/postgres-partitioning-best-practices.html

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
5
Pro-tip по дизайну БД: Soft Deletes

Soft delete — вместо того чтобы физически удалять строку, мы помечаем её как удалённую (например, deleted_at TIMESTAMP).

Плюсы:
- удобно для undo (отката);
- хранение истории ;
- не ломаются внешние ключи.

Но! 🚬

Если напрямую писать запросы к таблице, половина кода будет забывать исключать «удалённые» строки. В итоге поведение приложения становится непредсказуемым и разъезжается в разных местах.

Решение

Всегда создавай view, которое сразу фильтрует «живые» строки.

CREATE VIEW users_active AS
SELECT * FROM users WHERE deleted_at IS NULL;


Разработчики по умолчанию работают именно с view, а к базовой таблице обращаются только когда реально нужны «удалённые» данные.

Делай «безопасный путь» простым и привычным.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥52
Автоматизируйте задачи в Postgres с помощью pg_cron. Этот инструмент позволяет по расписанию запускать простые задачи, например VACUUM или пересборку материализованных представлений.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍4🔥3
Чтобы кешировать результаты вызовов функций в PL/SQL, объявляйте их с модификаторами:

DETERMINISTIC ⇒ кеширование в пределах одного SQL-выражения

RESULT_CACHE ⇒ кеширование между сессиями

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

https://mikesmithers.wordpress.com/2022/10/16/deterministic-and-result_cache-pl-sql-functions/

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
Совет по Postgres для тестирования расширений:

Можно использовать команду LOAD, чтобы подгрузить общие библиотеки только в рамках текущей сессии, вместо изменения shared_preload_libraries и перезапуска Postgres.

LOAD 'auto_explain';
LOAD 'pg_stat_statements';


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53
Индексируйте скалярные значения в массивах JSON, хранящихся в Oracle Database, с помощью

CREATE MULTIVALUE INDEX ... ON t ( t.json_data.array.<type> )


Оптимизатор может использовать такие индексы при поиске по массиву с помощью

JSON_EXISTS ( t.json_data, '$.array?(@.<type> == ... )' )


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