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

Связь: @devmangx

РКН: https://clck.ru/3H4Wo3
Download Telegram
Добавь автодополнение в своё приложение с помощью pg_trgm

Модуль pg_trgm + индекс GIN ускоряет iLIKE-поиск даже на миллионах строк — идеально подходит для type-ahead (поиска по мере ввода).

Мгновенный отклик + минимум усилий — максимум пользы

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2
Давайте попрактикуемся в SQL

Вопрос: Используя таблицу Order, напишите запрос, чтобы найти общую сумму продаж (amount) за февраль 2025 года

Ответ:
SELECT SUM(total_amount) AS total_sales
FROM orders
WHERE MONTH(order_date) = 2 AND YEAR(order_date) = 2025;


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥31
В PostgreSQL 18 поле Buffers появится в стандартном EXPLAIN-выводе

Теперь при выполнении EXPLAIN ANALYZE вы сразу увидите информацию о буферах:

EXPLAIN ANALYZE SELECT * FROM orders;

QUERY PLAN
--------------------------------------------------------------------------------
Seq Scan on orders (cost=0.00..1.02 rows=2 width=90) (actual time=0.012..0.013 rows=2 loops=1)
Buffers: shared hit=5
Planning Time: 0.055 ms
Execution Time: 0.023 ms


> Buffers: shared hit=5 означает, что данные были считаны из кэша (shared buffers), то есть из оперативной памяти.
> А если бы пришлось читать с диска, строка выглядела бы так:

Buffers: shared hit=5, shared read=3


Почему это важно? 🤔

Показатель cache hit ratio — отличный индикатор производительности работы с памятью в Postgres.
Чем больше данных берётся из буфера, тем быстрее работает запрос.

А если читается с диска — это значит:

> больше нагрузки на I/O

> выше потребление CPU

> возможно, нужна настройка конфигурации или больше памяти

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1
Excel-Fundamentals-Manual.pdf
10.1 MB
Excel с нуля — в одном файле

"Excel Fundamentals Manual" — PDF-гайд, где пошагово разобрано всё, что нужно новичку

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥1
Создавай приватные временные таблицы в Oracle Database 18c с помощью:

CREATE PRIVATE TEMPORARY TABLE ... ( ... )


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

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1😁1
Media is too big
VIEW IN TELEGRAM
Встречайте новое расширение Microsoft для PostgreSQL в VScode

Оно напичкано мощными инструментами, которые ускорят вашу работу с Postgres:

> Интеграция с Agent Mode
> Визуализация схем
> Мгновенный запуск PostgreSQL в Docker
> Запросы с поддержкой IntelliSense

читать больше 😎

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥91🤔1
Совет по Postgres на сегодня: используйте lock_timeout

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

ALTER SYSTEM SET lock_timeout = '10s';


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

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
Команда Pgpool выпустила срочные обновления для всех актуальных веток:

> 4.6.1
> 4.5.7
> 4.4.12
> 4.3.15
> 4.2.22

Этот релиз содержит исправление уязвимости безопасности.

В механизме аутентификации клиентов Pgpool-II обнаружена уязвимость, позволяющая обойти аутентификацию. В результате злоумышленник может войти под любым пользователем, что может привести к утечке данных, их подмене или даже полной остановке базы данных.
(CVE-2025-46801)

Уязвимость затрагивает:

> Все версии Pgpool-II 4.0 и 4.1
> Версии с 4.2.0 по 4.2.21
> С 4.3.0 по 4.3.14
> С 4.4.0 по 4.4.11
> С 4.5.0 по 4.5.6
> Версию 4.6.0

Рекомендуется срочно обновиться до: 4.6.1, 4.5.7, 4.4.12, 4.3.15 или 4.2.22 — или изменить конфигурации, чтобы они не попадали под уязвимые шаблоны 😡

> Подробности

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥2
Хочешь узнать, когда та или иная фича появилась в Oracle Database?

Зацени Oracle Database Features & Licensing:

> https://apex.oracle.com/pls/apex/r/features/dbfeatures/home

Там можно посмотреть, в каких версиях доступна нужная функциональность.

А во вкладке Licensing — в каких редакциях Oracle её можно легально использовать 🔗

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Нашёл крутейший сайт для тех, кто хочет с нуля вкатиться в SQL. Там всё по полочкам: SELECT, JOIN, WHERE и даже про подзапросы есть. Прям интерактивно учишься — пишешь код, сразу видишь результат.

Если хочешь разобраться в базах — w3schools.com/sql 😡

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍3🤯2
Совет по Postgres: создавайте индексы с опцией CONCURRENTLY. Это позволяет строить индекс в фоне, пока продолжаются обычные операции чтения и записи. Без этой опции таблица блокируется на запись на всё время построения индекса. Однако CONCURRENTLY работает дольше и не может использоваться внутри транзакции.

Пример:

CREATE INDEX CONCURRENTLY foobar ON foo (bar);


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥2
Вышло pg_ivm 1.1.1 — расширение для инкрементального обновления материализованных представлений в PostgreSQL!

Теперь можно обновлять только изменённые данные, не пересоздавая всё представление целиком

Команда: REFRESH MATERIALIZED VIEW больше не будет тормозить всё на свете

Инкрементальное обновление происходит автоматически при изменении базовых таблиц.

Подробнее: https://www.postgresql.org/about/news/pg_ivm-111-released-3079/ 😎

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Когда вы используете столбцы в формулах, например:

WHERE quantity * unit_price > ...


оптимизатору может быть сложно точно оценить, сколько строк будет возвращено.

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

ALTER SESSION SET optimizer_dynamic_sampling = 11;


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

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Теперь можно скопировать схему таблицы прямо из редактора Supabase и использовать её как контекст для вашего любимого ИИ-инструмента

Просто нажмите на три точки рядом с названием таблицы и выберите Copy — в буфер попадут типы данных, ограничения и значения по умолчанию 😡

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2🔥2
Удобная фишка в psql:

Получение CSV из SQL-запроса:

SELECT * FROM customers \g (format=csv) ~/Downloads/clients.csv


Команда \g (format=...) сохраняет результаты запроса в указанном формате — в данном случае CSV.

Также поддерживаются форматы html и (для любителей математики) latex:

SELECT * FROM customers \g (format=html) ~/Downloads/clients.html


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥1
Практика SQL

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

Можно сделать так: (смотри после того как сделал сам) 😘

SELECT u.user_id, username, training_id, training_date, count( user_training_id ) AS count
FROM users u JOIN training_details t ON t.user_id = u.user_id
GROUP BY u.user_id, username, training_id, training_date
HAVING count( user_training_id ) > 1
ORDER BY training_date DESC;


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥4
Совет по Postgres на сегодня: Покрывающие индексы

Индексы позволяют создавать как ключевые (индексируемые) столбцы, так и дополнительные столбцы с помощью INCLUDE. Эти INCLUDE-столбцы не входят в ключ индекса, но их данные сохраняются вместе с индексом, благодаря чему некоторые запросы могут быть обработаны исключительно за счёт индекса.

Ключевые столбцы индекса используются для сортировки и поиска. INCLUDE-столбцы «покрывают» дополнительные запросы, поэтому такие индексы часто называют покрывающими (covering indexes). Покрывающие индексы позволяют оптимизировать запросы, чтобы использовать только сканирование индекса (index-only scan) вместо полного сканирования таблицы.

Пример покрывающего индекса:

CREATE INDEX idx_orders_customer_date_include_total
ON orders (customer_id, order_date)
INCLUDE (total_amount);


> customer_id, order_date входят в ключ индекса и участвуют в поиске и сортировке
> total_amount включён, чтобы избежать обращения к таблице, если он требуется в запросе

Этот запрос может быть полностью выполнен с использованием только индекса:

SELECT customer_id, order_date, total_amount
FROM orders
WHERE customer_id = 123
ORDER BY order_date;


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥72👍2
В версии Postgres 15, спустя многие годы ожидания, наконец появилась команда MERGE

MERGE объединяет несколько операций с данными (INSERT, UPDATE, DELETE) в один атомарный оператор.
До этого подобное поведение приходилось реализовывать через INSERT ... ON CONFLICT или с помощью SELECT + UPDATE + INSERT в связке с CTE и функциями.

MERGE особенно полезен при работе с крупными объёмами данных — например, при объединении батчей или стримов данных.

А вот статья, где Жан-Поль Аргюдо делится полезными примерами кода и советами по внедрению MERGE в ваши Postgres-процессы: тык

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥1
Оконные функции в Postgres полезны, когда нужно выполнять вычисления по нескольким строкам, не объединяя их в одну. Такой набор строк называется "frame" (окно).

Именно конструкция OVER определяет границы этого окна.

Пример: накопительный итог продаж.

В этом случае для каждой строки окно будет включать текущую дату и все предыдущие строки. То есть для каждой строки формируется своё окно, и итог считается по нему.

Результат: ты получаешь сумму продаж на каждый день с учётом всех предыдущих.
Это мощный способ анализировать тренды без подзапросов и JOIN

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥2