Функция NVL в Oracle SQL возвращает:
первый аргумент, если он не NULL
иначе — второй аргумент
Пример использования:
План выполнения может использовать индекс, если
и
Демо у Monika Mitura
@SQLPortal
первый аргумент, если он не NULL
иначе — второй аргумент
Пример использования:
WHERE col = NVL(:var, col)
План выполнения может использовать индекс, если
:var не NULL,и
full table scan, если :var равен NULL.Демо у Monika Mitura
@SQLPortal
Blogspot
The Magical NVL Function
A while ago, I came across an interesting NVL trick on Connor Mc'Donald's blog . In his example, he compares a query that uses an optiona...
👍6
Полный курс по SQL от основ до продвинутого уровня
Репозиторий SQL-Tutorials от разработчика GowthamRaj K представляет собой обширный ресурс для изучения SQL, идеально подходящий для начинающих и тех, кто хочет систематизировать свои знания.
👉 @SQLPortal
Репозиторий SQL-Tutorials от разработчика GowthamRaj K представляет собой обширный ресурс для изучения SQL, идеально подходящий для начинающих и тех, кто хочет систематизировать свои знания.
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - gowthamrajk/SQL-Tutorials: In this module, I will be updating the topic wise SQL tutorial notes which is very useful for…
In this module, I will be updating the topic wise SQL tutorial notes which is very useful for a fresher to start with MYSQL from basics to advanced. - gowthamrajk/SQL-Tutorials
👍7❤3
Новый уровень облачного администрирования
Команда Yandex Cloud запустила AI-ассистентов для работы с базами данных. Теперь можно управлять базами данных YDB, Trino, ClickHouse, PostgreSQL и другими с помощью AI-ассистентов.
ИИ-ассистент в YDB поможет провести диагностику, оптимизировать работу с базами данных и предложить варианты более эффективной работы с БД. Также для других задач можно подключить к YDB нейросети через MCP-сервер.
В WebSQL ИИ-помощник может генерировать запросы к базам данных по запросу пользователя на естественном языке. Также на платформе можно автоматически разметить метаданные через Data Catalog.
Есть все шансы, что это станет стандартом управления облаком: вместо ручной настройки — диалог в чате с готовой конфигурацией.
@SQLPortal
Команда 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
Даже умеренное количество клиентов может «сломать» PostgreSQL. Причина в том, как СУБД обрабатывает каждое соединение.
При подключении нового клиента процесс postmaster создаёт отдельный бэкенд-процесс (не поток) для работы с сессией. Этот процесс поддерживает соединение до отключения клиента или потери соединения.
С ростом числа клиентов сервер создаёт всё больше процессов. Каждый из них кеширует системные таблицы, подготовленные выражения, промежуточные результаты запросов и другие данные, что резко увеличивает потребление памяти.
Решение — использовать пул соединений, например, pg_bouncer. Менеджер пула держит заранее созданные соединения с базой и выдаёт их клиентам по мере необходимости, вместо того чтобы создавать новое соединение для каждого запроса. Это позволяет обслуживать больше клиентов при меньшем количестве соединений к базе.
Интересный факт, существует предложение перевести PostgreSQL на многопоточную модель вместо текущей многопроцессной, что потенциально могло бы решить проблему масштабируемости.
Детальный разбор того, как PostgreSQL управляет соединениями
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4❤2
Новости: Выпущен PostgreSQL 18!
https://www.postgresql.org/about/news/postgresql-18-released-3142/
👉 @SQLPortal
https://www.postgresql.org/about/news/postgresql-18-released-3142/
Please open Telegram to view this post
VIEW IN TELEGRAM
PostgreSQL News
PostgreSQL 18 Released!
The [PostgreSQL Global Development Group](https://www.postgresql.org) today announced the release of [PostgreSQL 18](https://www.postgresql.org/docs/18/release-18.html), the latest version of the world's most advanced …
🔥10👍6
Создавайте blockchain-таблицы в Oracle Database с помощью
Эти параметры:
- разрешают INSERT,
- запрещают UPDATE,
- запрещают DELETE/DROP до истечения заданного количества дней (N).
👉 @SQLPortal
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).
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
MySQL: поток-на-соединение
Узнайте больше о процессах, потоках, пуле соединений и о том, как они влияют на производительность базы данных — читать
@SQLPortal
❤8
На GitHub появился новый проект SQLBot — база данных без SQL. 😱
Всего за несколько дней он собрал 1.5K ★
SQLBot умеет отвечать на вопросы на естественном языке, поддерживает MySQL, SQL Server, ClickHouse, RedShift и даже Excel/CSV.
Встроена авто-визуализация, прогнозы и простая установка через Docker.
SQLBot на GitHub
👉 @SQLPortal
Всего за несколько дней он собрал 1.5K ★
SQLBot умеет отвечать на вопросы на естественном языке, поддерживает MySQL, SQL Server, ClickHouse, RedShift и даже Excel/CSV.
Встроена авто-визуализация, прогнозы и простая установка через Docker.
SQLBot на GitHub
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
В GitHub-репозитории есть datasets/ с реальными данными из ERP и CRM, scripts/ с готовыми SQL-скриптами для практики и docs/ с документацией и материалами курса.
Ссылка на курс
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - DataWithBaraa/sql-ultimate-course: The most comprehensive SQL guide from a real-world expert! Learn everything from basics…
The most comprehensive SQL guide from a real-world expert! Learn everything from basics to advanced queries, optimizations, and real-world SQL - DataWithBaraa/sql-ultimate-course
❤6🔥3
Совет для Postgres: используйте
👉 @SQLPortal
jsonb_pretty, чтобы выводить JSON в удобочитаемом вертикальном виде.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3
Типы связей в базах данных:
Связи показывают, как данные между собой связаны.
Три основных типа связей:
Один к одному (One-to-One) —> запись в одной таблице связана с одной записью в другой таблице.
Один ко многим (One-to-Many) —> запись в одной таблице связана с несколькими записями в другой таблице.
Многие ко многим (Many-to-Many) —> записи в обеих таблицах могут быть связаны с несколькими записями в другой таблице.
👉 @SQLPortal
Связи показывают, как данные между собой связаны.
Три основных типа связей:
Один к одному (One-to-One) —> запись в одной таблице связана с одной записью в другой таблице.
Один ко многим (One-to-Many) —> запись в одной таблице связана с несколькими записями в другой таблице.
Многие ко многим (Many-to-Many) —> записи в обеих таблицах могут быть связаны с несколькими записями в другой таблице.
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
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 соединяет связанные данные между таблицами.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤5
В Postgres 18 появились виртуальные вычисляемые колонки
Если убрать ключевое слово stored в определении, колонка не будет храниться на диске, а будет вычисляться на лету.
Это экономит место и не замедляет записи, но может замедлять чтение, так что использовать стоит с умом.
👉 @SQLPortal
Если убрать ключевое слово stored в определении, колонка не будет храниться на диске, а будет вычисляться на лету.
Это экономит место и не замедляет записи, но может замедлять чтение, так что использовать стоит с умом.
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
FIRST_VALUE ⇒ первая
NTH_VALUE ⇒ N-я
LAST_VALUE ⇒ последняя
По умолчанию окно заканчивается на текущей строке ⇒
NTH_VALUE(v, N) возвращает NULL для строк до N
LAST_VALUE возвращает последнее значение с тем же sort key, а не из самой последней строки
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
Ранее она выступила с этим докладом на Euroko, а теперь опубликовала подробный блог с разбором примера и практическими рекомендациями по эффективному использованию партиционирования.
https://karenjex.blogspot.com/2025/09/postgres-partitioning-best-practices.html
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Pro-tip по дизайну БД: Soft Deletes
Soft delete — вместо того чтобы физически удалять строку, мы помечаем её как удалённую (например,
Плюсы:
- удобно для undo (отката);
- хранение истории ;
- не ломаются внешние ключи.
Но!🚬
Если напрямую писать запросы к таблице, половина кода будет забывать исключать «удалённые» строки. В итоге поведение приложения становится непредсказуемым и разъезжается в разных местах.
Решение
Всегда создавай view, которое сразу фильтрует «живые» строки.
Разработчики по умолчанию работают именно с view, а к базовой таблице обращаются только когда реально нужны «удалённые» данные.
Делай «безопасный путь» простым и привычным.
👉 @SQLPortal
Soft delete — вместо того чтобы физически удалять строку, мы помечаем её как удалённую (например,
deleted_at TIMESTAMP). Плюсы:
- удобно для undo (отката);
- хранение истории ;
- не ломаются внешние ключи.
Но!
Если напрямую писать запросы к таблице, половина кода будет забывать исключать «удалённые» строки. В итоге поведение приложения становится непредсказуемым и разъезжается в разных местах.
Решение
Всегда создавай view, которое сразу фильтрует «живые» строки.
CREATE VIEW users_active AS
SELECT * FROM users WHERE deleted_at IS NULL;
Разработчики по умолчанию работают именно с view, а к базовой таблице обращаются только когда реально нужны «удалённые» данные.
Делай «безопасный путь» простым и привычным.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥5❤2
Автоматизируйте задачи в 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
DETERMINISTIC ⇒ кеширование в пределах одного SQL-выражения
RESULT_CACHE ⇒ кеширование между сессиями
Перед использованием убедитесь, что функции имеют ограниченное количество уникальных входных данных и действительно являются детерминированными.
https://mikesmithers.wordpress.com/2022/10/16/deterministic-and-result_cache-pl-sql-functions/
Please open Telegram to view this post
VIEW IN TELEGRAM
The Anti-Kyte
DETERMINISTIC and RESULT_CACHE PL/SQL functions
Recent events here in the UK have once again emphasised the value of being careful with your “cache”. To this end, I’m going to take a look at how PL/SQL functions defined using t…
👍4❤2
Совет по Postgres для тестирования расширений:
Можно использовать команду LOAD, чтобы подгрузить общие библиотеки только в рамках текущей сессии, вместо изменения shared_preload_libraries и перезапуска Postgres.
👉 @SQLPortal
Можно использовать команду LOAD, чтобы подгрузить общие библиотеки только в рамках текущей сессии, вместо изменения shared_preload_libraries и перезапуска Postgres.
LOAD 'auto_explain';
LOAD 'pg_stat_statements';
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3
Индексируйте скалярные значения в массивах JSON, хранящихся в Oracle Database, с помощью
Оптимизатор может использовать такие индексы при поиске по массиву с помощью
👉 @SQLPortal
CREATE MULTIVALUE INDEX ... ON t ( t.json_data.array.<type> )
Оптимизатор может использовать такие индексы при поиске по массиву с помощью
JSON_EXISTS ( t.json_data, '$.array?(@.<type> == ... )' )
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3