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

Связь: @devmangx

РКН: https://clck.ru/3H4Wo3
Download Telegram
Если вы работаете с JSON в Postgres, вы, вероятно, заметили, что для этого существуют два отдельных типа данных. Так в чём разница между json и jsonb?

> json — лёгкое, необработанное хранение

> jsonb — структурированное, индексируемое и производительное

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

◘ jsonb сохраняет данные в бинарном формате, при этом данные разбираются заранее при сохранении. jsonb обладает большей структурой (например, отсутствуют дублирующиеся ключи), может индексироваться и обеспечивает более быструю работу при выполнении запросов. Подавляющее большинство разработчиков, использующих JSON в Postgres, работают именно с jsonb.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Нашёл ресурс для создания SQL-баз данных:

✓ Генерируй таблицы и данные с помощью ИИ
✓ Визуализируй диаграммы и связи
✓ Деплой в Supabase в один клик

И главное — бесплатно → https://database.build/

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое векторная база данных?

От базовых понятий, таких как что такое вектор?, до продвинутых возможностей: настройка payload'ов, гибридный поиск, шардинг, мультитенантность, квантизация, RBAC и многое другое.

Эта статья охватывает всё, что нужно знать о векторных базах данных 🌹

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Краткая и точная шпаргалка по SQL.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
В Postgres есть удобные команды psql, начинающиеся на \d, для получения информации о таблицах. Вот полезные примеры:

Таблицы


\d — список всех объектов (таблиц, вьюх, индексов и т.п.)
\d <table_name> — описание конкретной таблицы
\dt — список только таблиц
\dti+ — таблицы с информацией о размере и типе
\dp — права доступа к таблицам

Индексы

\di — список всех индексов
\di <index_name> — описание конкретного индекса

Представления (views)

\dv — список всех вьюх
\dv <view_name> — описание конкретной вьюхи

Эти команды экономят время при анализе схемы БД прямо из psql.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
B-деревья — самая распространённая структура данных для индексов в базах данных.

Но как они работают?

Попробуй этот интерактивный онлайн-инструмент, чтобы увидеть это на практике:

> Дерево остаётся сбалансированным при добавлении новых значений
> Поиск ключей происходит путём обхода дерева

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Избегай ошибок при приведении значений к другому типу данных в Oracle SQL с помощью:

CAST ( ... AS <data type> DEFAULT [ NULL | <val> ] ON CONVERSION ERROR )


Если значение не может быть преобразовано, будет возвращено [ NULL | <val> ] вместо ошибки.

Это также работает в функциях, специфичных для типов, например TO_DATE и других.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Используя приведённые выше таблицы, напишите запрос для получения списка пациентов, прикреплённых к конкретному врачу, и количества приёмов, запланированных на каждый день недели.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь меееедленный код для базы данных?

Начни с написания цикла, а внутри него помести SQL-операторы, обрабатывающие по одной строке за итерацию: 😂

FOR i IN 1 .. n LOOP  
[SELECT | UPDATE | DELETE] ... WHERE col = i;
END LOOP;


Чтобы сделать быстро — обрабатывай все данные одним SQL-запросом

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Единственный MCP-сервер, который вам когда-либо понадобится

MindsDB позволяет выполнять запросы к данным из 200+ источников — Slack, Gmail, соцсетей и других — с помощью SQL или естественного языка.

Федеративный движок запросов с встроенным MCP-сервером.

Полностью open-source
⭐️ 31k+ звёзд на GitHub

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
В PostgreSQL есть специальный параметр для логирования долго выполняющихся запросов — log_min_duration_statement.

После установки этого параметра PostgreSQL будет записывать в лог длительность и текст запроса, если он выполняется дольше указанного времени.

ALTER DATABASE postgres SET log_min_duration_statement = '500ms';


Это полезно для того, чтобы:

> определить, какие запросы работают медленно;
> понять, где можно добавить индексы для повышения производительности.

Параметр можно задать и на уровне сессии, если нужно логировать (или, наоборот, исключить из логирования) только конкретные запросы:

SET log_min_duration_statement = '20000ms';


log_min_duration_statement — действительно мощный инструмент, но мы обычно не рекомендуем устанавливать его на очень низкие значения (0, 1 или 5 мс), так как это приведёт к логированию практически всех операций базы данных. Это создаст шум в логах и может занять много места на диске.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Ищешь бесплатную базу данных MongoDB?

✓ Трафик включён
✓ 512 МБ хранилища
✓ 3000 операций в секунду

Без ограничения по времени использования — идеально для практики

> free-mongo-db

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Для фоновых задач, таких как vacuum и создание индексов, Postgres использует специальное выделение памяти под названием maintenance_work_mem. Обычные запросы используют work_mem, чтобы определить, сколько памяти может быть выделено на одну операцию или соединение.

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

> выполнение vacuum,
> создание индексов,
> создание индексов для материализованных представлений,

используйте:

SET maintenance_work_mem = '8GB';


Установите значение, которое предоставит вашим операциям больше памяти. По умолчанию используется 64MB. Этот параметр можно задать как глобально на уровне системы, так и локально для одной сессии.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Если у вас есть пространственные данные, которые вы хотите визуализировать на карте, этот блог показывает, как подключить QGIS — инструмент с открытым исходным кодом для картографии — к базе данных PostgreSQL/PostGIS

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
При разработке приложений для бронирования Postgres значительно упрощает задачу предотвращения перекрытия бронирований.

С помощью ограничения EXCLUDE можно гарантировать, что не будет создано двух бронирований с одинаковым room_id на пересекающиеся временные интервалы, обеспечивая целостность данных на уровне базы данных

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Мониторинг IOPS в Postgres

Для оценки производительности базы данных стоит обращать внимание на iowait как часть метрик CPU.

Iowait — это время, когда процессы ожидают завершения операций ввода-вывода. При этом процессор не загружен, но простаивает, потому что ждет отклика от дисковой подсистемы.

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

Iowait можно измерять через большинство инструментов мониторинга CPU, а также прямо в Postgres с помощью расширения pg_proctab.

Если вы видите небольшие пики iowait (как на диаграмме), скорее всего, идет бэкап или плановая операция.
Если пики значительные — возможно, база данных недополучает ресурсы, или требуется работа по оптимизации производительности.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Базы данных PostgreSQL с высокой нагрузкой на запись могут исчерпать идентификаторы транзакций (transaction IDs). Обычно это становится проблемой при достижении около 2 миллиардов транзакций. В критический момент PostgreSQL завершает работу, чтобы предотвратить повреждение данных.

Для большинства приложений это никогда не вызывает проблем. Но для систем с очень интенсивной записью за этим нужно следить. 🤵

Обычно решение заключается в выполнении VACUUM или настройке параметров автovacuum, чтобы строки и транзакции корректно очищались.

Если вы хотите проверить, насколько вы близки к wraparound (переполнению XID), вот запрос для диагностики:

WITH max_age AS (
SELECT
2000000000 AS max_old_xid,
setting AS autovacuum_freeze_max_age
FROM pg_catalog.pg_settings
WHERE name = 'autovacuum_freeze_max_age'
),
per_database_stats AS (
SELECT
datname,
m.max_old_xid::int,
m.autovacuum_freeze_max_age::int,
age(d.datfrozenxid) AS oldest_current_xid
FROM pg_catalog.pg_database d
JOIN max_age m ON (true)
WHERE d.datallowconn
)
SELECT
MAX(oldest_current_xid) AS oldest_current_xid,
MAX(ROUND(100 * (oldest_current_xid / max_old_xid::float))) AS percent_towards_wraparound,
MAX(ROUND(100 * (oldest_current_xid / autovacuum_freeze_max_age::float))) AS percent_towards_emergency_autovac
FROM per_database_stats;


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🌐 WAICORE — хостинг, за который не надо переживать

Устали от лагов, сложных панелей и переплат? Переходите на VPS с AMD Ryzen 9 — быстро, просто, без нервов.

💬 Почему клиенты выбирают нас:
— Цена начинается от 2€
— Скорость канала до 10 Гбит/с
— Поддержка 24/7 — отвечаем быстро и без шаблонов

Приятный бонус: Бесплатный VPN — расширение для браузера в подарок каждому нашему юзеру

VPN | Расширение для браузера

📍 Локации: Германия (Франкфурт), Москва, Нидерланды (уже скоро) — стабильный пинг, DDoS-защита.

🔥 Успейте сегодня
Выбрать сервер | 💬 Наш канал
Please open Telegram to view this post
VIEW IN TELEGRAM
Давайте попрактикуемся в SQL

Из приведённых выше таблиц напишите SQL-запрос, который находит продавцов (salespeople) и клиентов (customers), проживающих в одном городе

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