SQL Portal | Базы Данных
14.3K subscribers
888 photos
121 videos
49 files
689 links
Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных

Связь: @devmangx

РКН: https://clck.ru/3H4Wo3
Download Telegram
Интегрированное рабочее окружение для инженеров баз данных с поддержкой ИИ: написание SQL, отладка и сопровождение.

Dory объединяет SQL-редактор, ИИ-ассистента и инструменты для эксплуатации и сопровождения баз данных в одном десктопном приложении. Есть глубокая интеграция с ClickHouse (мониторинг + управление правами), также поддерживаются популярные базы вроде PostgreSQL и MySQL.

Поддерживает локальную установку и развёртывание через Docker, данные хранятся локально — в облако через Cloudflare уходят только запросы к ИИ.

https://github.com/dorylab/dory

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21
Термины в Data engineering, которые нужно знать

ETL — извлечение, трансформация, загрузка. Очистка до сохранения.
ELT — извлечение, загрузка, трансформация. Очистка внутри хранилища.
CDC — отслеживание изменений данных. Перенос только новых изменений.
DAG — граф воркфлоу. Задачи + зависимости.
OLAP — системы, ориентированные на аналитику. Оптимизированы под инсайты.
SLA — соглашение об уровне сервиса. Доступность и производительность.
Data Lake — хранилище сырых данных. Любой формат, любой объем.
Medallion Architecture — Bronze → Silver → Gold. Слои качества данных.
Reverse ETL — хранилище → бизнес-инструменты. Данные обратно в приложения.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53😁1
Расширение Postgres, которое у вас уже есть: pg_visibility.

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

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

Какой процент страниц видим и заморожен

SELECT
c.relpages AS total_pages,
s.all_visible,
s.all_frozen,
round(100.0 * s.all_visible / NULLIF(c.relpages, 0), 1) AS pct_visible,
round(100.0 * s.all_frozen / NULLIF(c.relpages, 0), 1) AS pct_frozen
FROM pg_class c
CROSS JOIN LATERAL pg_visibility_map_summary(c.oid) s
WHERE c.relname = 'employees';


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
В SQL есть разные уровни

📍Стиль 1

SELECT
COUNT(CASE
WHEN days_lost = 1 THEN NULL
ELSE days_lost
END
) AS count_of_days_lost
FROM safety;


Преимущества
— Явно видно, что происходит
— Очень гибкий, подходит для сложной логики

Недостатки
— Многословный, добавляет шум
— Часто используется там, где можно проще

📍Стиль 2

SELECT
COUNT(NULLIF(days_lost, 1)) AS count_of_days_lost
FROM safety;


Преимущества
— Коротко и аккуратно для простых условий
— Меньше шаблонного кода по сравнению с CASE

Недостатки
— Хуже читается для новичков
— Ограничен простыми проверками на равенство

📍Стиль 3

SELECT
COUNT(*) FILTER (WHERE days_lost != 1) AS count_of_days_lost
FROM safety;


Преимущества
— Читаемо, намерение выражено напрямую
— Логика отделена от агрегации
— Удобно при нескольких условиях

Недостатки
— Поддерживается не во всех диалектах SQL
— Менее распространен среди разработчиков

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Современный редактор SQL и баз данных PostgreSQL

https://github.com/cin12211/orca-q

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
pgstattuple - Расширения Postgres, которые у тебя уже есть

Что делает: проверяет раздувание таблиц и индексов

Как включить:

CREATE EXTENSION pgstattuple;


Как использовать:
select * from pgstattuple или писать свои запросы, чтобы смотреть таблицы, количество «живых» и «мертвых» строк и процент.

Процент «мертвых» и свободных строк в таблицах Postgres

SELECT
relname AS table_name,
pg_size_pretty(pg_relation_size(relid)) AS table_size,
(pgstattuple(relid)).dead_tuple_percent AS dead_pct,
(pgstattuple(relid)).free_percent AS free_pct
FROM pg_catalog.pg_stat_user_tables
ORDER BY dead_pct DESC;


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
SQL Joins cheatsheet

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🚫 Никогда не используй COUNT для проверки существования

Если нужно просто проверить, существует ли запись, не используй COUNT() с фильтром (WHERE)

SELECT COUNT(*)
FROM users
WHERE email = 'http://thisemaildontexist.com';


Проблема в том, что COUNT(*) отвечает на другой вопрос — считает количество строк, подходящих под условие, хотя нужна только проверка наличия хотя бы одной.

При использовании COUNT(*) база может просканировать все подходящие строки, чтобы посчитать итог. Даже если совпадение найдено сразу, выполнение может продолжиться, потому что запрошен полный подсчёт. На больших таблицах это лишняя работа.

Вместо COUNT() используй EXISTS

SELECT EXISTS (
SELECT 1
FROM users
WHERE email = 'http://thisemaildontexist.com'
);


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83
JSON и JSONB удобны, когда нужно просто складывать схемно-нефиксированные данные, но иногда требуется добавить контроль структуры.

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

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
LangChain Community Spotlight: text2sql

Агентный text-to-SQL SDK, построенный на Deep Agents из LangChain, который автономно исследует схемы, пишет запросы и сам себя корректирует — достигая 100% точности на бенчмарке Spider без использования извлечения с дополнением генерации или предрассчитанных схем.

Посмотреть: https://github.com/Text2SqlAgent/text2sql-framework

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
В копилку тренажёров: sqltutor.ru

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

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
2
This media is not supported in your browser
VIEW IN TELEGRAM
Аналог DBeaver: https://tableplus.com/

Тот же клиент для работы с базами данных с графическим интерфейсом.

По сути, это инструмент, который позволяет:

подключаться к разным СУБД (MySQL, PostgreSQL, SQLite, SQL Server и др.)
писать и выполнять SQL-запросы
смотреть и редактировать данные в таблицах
управлять схемой базы (таблицы, индексы и т.д.)


Кстати, скоро туда завезут прикольную фичу: возможность перетаскивать столбцы из левой панели прямо в редактор SQL-запросов. 🫡

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Совет по продуктивной работе с Postgres: шаблонные базы данных

Многие разработчики используют шаблонные базы данных для настройки дев-окружений. Суть подхода в следующем: вы запускаете один экземпляр Postgres для разработки и при необходимости создаёте/удаляете базы данных. При этом база данных для разработки создаётся на основе шаблона, который синхронизирован со схемой продакшена.

Для распределённых команд, использующих облачные решения, шаблонная база — это экономичный и безопасный способ работы.

Преимущества использования шаблонной базы данных для разработки:

● Упрощает работу с расширениями, конфигурацией Postgres, управлением версиями и установкой зависимостей — всё, что обычно замедляет локальную разработку
● Обеспечивает соответствие схемы продакшену, так как шаблон можно быстро создать из полной копии базы без данных
● Сокращает время на развёртывание и удаление дев-машин
● Позволяет использовать анонимизированные тестовые данные, подходящие для разработки

Подробнее о шаблонных базах данных


➡️ Создайте шаблон на основе продакшена, выгрузив только схему и расширения:

pg_dump -U my_user -h my_host -p 5432 -d my_database --exclude-table-data --no-owner --no-privileges > template.sql


Флаг --exclude-table-data исключает данные, но сохраняет полную схему и все расширения.

➡️ Создайте базу и восстановите в неё шаблон:

-- создаём базу
CREATE DATABASE my_template_db OWNER postgres;


-- восстанавливаем из дампа
psql -U my_user -h my_host -p 5432 -d my_template_db -f template.sql


Добавьте сид-данные на этом этапе. Это позволит быстро клонировать шаблон без необходимости повторного восстановления.

➡️ Разрешите использовать базу как шаблон:

ALTER DATABASE my_template_db IS_TEMPLATE TRUE;


Важно: использовать шаблонные базы можно только от имени суперпользователя Postgres. На платформе Crunchy Bridge это поддерживается, но не все облачные провайдеры предоставляют доступ к суперюзеру.

➡️ Создайте новую базу на основе шаблона:

CREATE DATABASE new_db WITH TEMPLATE my_template_db OWNER my_user;


Это создаст копию my_template_db под именем new_db

➡️ Обновите строку подключения, чтобы использовать новую базу в разработке — и можно начинать писать код.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤️ Конференция Backend Talks от Яндекс 360 — место встречи опытных бэкенд-разработчиков

Обсудим лучшие практики в разработке высоконагруженных систем и разберём реальные рабочие кейсы на примере сервисов с аудиторией в 100+ миллионов пользователей.

Когда: 16 мая, 12:00 мск
Где: офлайн в Москве и онлайн

В программе — два зала с докладами и решением практических задач.

🈲 Расписание зала №1:

«Направленный ациклический граф в PostgreSQL: как мы научили реляционную базу хранить оргструктуру на 500 тыс. пользователей»
//Спикер: Малик Минубаев, разработчик в B2B-платформе

«Как Яндекс Диск выдерживает сотни гигабит входящего трафика: устройство балансировки загрузок»
//Спикер: Илья Абрамов, разработчик в Диске

«Как формировать технологический стек и не погибнуть в священных войнах: от хаоса к процессам и техрадару»
//Спикер: Дмитрий Сафонов, руководитель команды разработки платформы микросервисов

«Зачем и как бэкендеру расти в карьере в 2026 году»
//Спикер: Дмитрий Соломонов, руководитель группы B2B-разработки бэкенда Диска

«Семь раз подумай, один раз пошардируй: как мы начали горизонтально масштабировать метаданные чатов Телемоста»
//Спикер: Никита Звонарев, разработчик в Мессенджере

🚀«Марс: великое противостояние»
//Спикер: Владимир Сурдин, астроном, кандидат физико-математических наук, доцент


Параллельно будут работать зоны открытого общения — можно в любой момент подключиться к обсуждениям с инженерами Яндекс 360 и провести время с пользой!

📌 Узнать подробнее и зарегистрироваться можно на сайте мероприятия
Please open Telegram to view this post
VIEW IN TELEGRAM
13 типов баз данных :

1. Реляционные
↳ хранят структурированные данные в таблицах с фиксированной схемой и доступом через SQL-запросы.

2. Ключ-значение
↳ хранят простые пары ключ–значение для сверхбыстрого поиска и кэширования.

3. Колонночные
↳ хранят данные по колонкам вместо строк для оптимизации аналитических запросов.

4. Wide-column (ширококолонночные)
↳ используют семейства колонок для гибкого хранения в распределённых системах большого масштаба.

5. Документные
↳ хранят данные как JSON-подобные документы с вложенной и гибкой структурой.

6. Векторные
↳ хранят эмбеддинги для поиска похожих объектов и задач ИИ-извлечения.

7. Временных рядов
↳ хранят данные с метками времени для метрик, логов и событий.

8. Неизменяемые реестры
↳ фиксируют записи без возможности изменения или удаления для защиты от подмены данных.

9. Графовые
↳ хранят связи между сущностями и оптимизируют запросы по отношениям.

10. Геопространственные
↳ работают с координатами и геоданными для карт и пространственных запросов.

11. В памяти
↳ держат данные в ОЗУ для минимальной задержки доступа.

12. BLOB-хранилища
↳ предназначены для больших бинарных объектов: изображения, видео, файлы.

13. Полнотекстовый поиск
↳ индексируют текст для быстрого поиска по содержимому.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2
image_2026-04-29_10-55-35.png
297.6 KB
Роадмэп по SQL

SQL MASTER TREE

├── 1. Database Fundamentals
│ ├── What is DB / DBMS / RDBMS
│ ├── Tables, Rows, Columns
│ ├── Primary Key
│ ├── Foreign Key
│ ├── Candidate Key
│ ├── Composite Key
│ ├── Constraints
│ │ ├── NOT NULL
│ │ ├── UNIQUE
│ │ ├── PRIMARY KEY
│ │ ├── FOREIGN KEY
│ │ ├── CHECK
│ │ └── DEFAULT
│ └── Data Integrity

├── 2. SQL Data Types
│ ├── Numeric
│ │ ├── INT
│ │ ├── BIGINT
│ │ ├── DECIMAL
│ │ └── FLOAT
│ ├── String
│ │ ├── CHAR
│ │ ├── VARCHAR
│ │ └── TEXT
│ ├── Date & Time
│ │ ├── DATE
│ │ ├── TIME
│ │ ├── DATETIME
│ │ └── TIMESTAMP
│ └── Boolean / Binary

├── 3. DDL (Data Definition Language)
│ ├── CREATE
│ │ ├── DATABASE
│ │ ├── TABLE
│ │ └── INDEX
│ ├── ALTER
│ │ ├── ADD COLUMN
│ │ ├── MODIFY COLUMN
│ │ └── DROP COLUMN
│ ├── DROP
│ │ ├── DATABASE
│ │ └── TABLE
│ └── TRUNCATE

├── 4. DML (Data Manipulation Language)
│ ├── INSERT
│ ├── UPDATE
│ ├── DELETE
│ └── MERGE / UPSERT

├── 5. DQL (Data Query Language)
│ ├── SELECT
│ ├── DISTINCT
│ ├── WHERE
│ │ ├── AND
│ │ ├── OR
│ │ └── NOT
│ ├── ORDER BY
│ ├── GROUP BY
│ ├── HAVING
│ └── LIMIT / OFFSET

├── 6. SQL Operators
│ ├── Arithmetic (+ - * /)
│ ├── Comparison (= != > < >= <=)
│ ├── Logical (AND OR NOT)
│ ├── BETWEEN
│ ├── IN
│ ├── LIKE
│ └── IS NULL

├── 7. SQL Functions
│ ├── Aggregate
│ │ ├── COUNT
│ │ ├── SUM
│ │ ├── AVG
│ │ ├── MIN
│ │ └── MAX
│ ├── String
│ │ ├── CONCAT
│ │ ├── SUBSTRING
│ │ ├── LENGTH
│ │ └── TRIM
│ ├── Numeric
│ │ ├── ROUND
│ │ └── ABS
│ └── Date
│ ├── NOW
│ ├── DATEADD
│ └── DATEDIFF

├── 8. Joins
│ ├── INNER JOIN
│ ├── LEFT JOIN
│ ├── RIGHT JOIN
│ ├── FULL JOIN
│ ├── CROSS JOIN
│ └── SELF JOIN

├── 9. Subqueries
│ ├── Scalar Subquery
│ ├── Correlated Subquery
│ └── Nested Subquery

├── 10. Views
│ ├── CREATE VIEW
│ ├── UPDATE VIEW
│ └── MATERIALIZED VIEW

├── 11. Indexing
│ ├── Clustered Index
│ ├── Non-Clustered Index
│ ├── Composite Index
│ └── Index Optimization

├── 12. Transactions
│ ├── BEGIN
│ ├── COMMIT
│ ├── ROLLBACK
│ └── SAVEPOINT

├── 13. ACID Properties
│ ├── Atomicity
│ ├── Consistency
│ ├── Isolation
│ └── Durability

├── 14. Normalization
│ ├── 1NF
│ ├── 2NF
│ ├── 3NF
│ ├── BCNF
│ └── Denormalization

├── 15. Advanced SQL
│ ├── Stored Procedures
│ ├── Triggers
│ ├── CTE (WITH)
│ ├── Window Functions
│ │ ├── ROW_NUMBER
│ │ ├── RANK
│ │ ├── DENSE_RANK
│ │ └── PARTITION BY
│ └── Recursive Queries

├── 16. Performance Optimization
│ ├── Query Optimization
│ ├── Execution Plan
│ ├── Index Tuning
│ └── Query Caching

├── 17. SQL Ecosystem
│ ├── MySQL
│ ├── PostgreSQL
│ ├── SQLite
│ ├── SQL Server
│ └── Oracle DB

└── 18. Real-World Usage
├── Backend APIs
├── Data Analytics
├── Reporting Systems
├── ETL Pipelines
└── Data Warehousing

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥82👍2
Нашёл удобный сервис для быстрого запуска SQL-запросов онлайн — RunSQL

> Мгновенно пишешь и выполняешь SQL без установки ПО
> Поддержка PostgreSQL
> Можно быстро делиться своими запросами через ссылку
> Подходит для тестов, демонстраций и обучения

Просто открыл сайт — и сразу работаешь с базой. Минимализм и скорость

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
2
В Oracle SQL можно проверить, получится ли привести выражение к нужному типу данных, с помощью функции

VALIDATE_CONVERSION ( <expr> AS <datatype>, <fmt> )


Она пытается преобразовать выражение в указанный тип

Если формат не указан, используется формат сеанса (настройки NLS)

Возвращает 1, если преобразование удалось, и 0, если нет

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Превратите PostgreSQL в тайм-серверную СУБД с помощью одного расширения

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

TimescaleDB решает это через гипертаблицы, которые автоматически разбивают данные на временные чанки.

Запросы затрагивают только нужные чанки, остальная часть данных не участвует в чтении.

Другие возможности:
• уменьшение объёма хранения до 95% за счёт колоночного сжатия с полной поддержкой запросов
• ускорение запросов через непрерывные агрегаты, которые обновляются только новыми данными
• встроенные политики хранения для автоматического удаления старых данных

Плюс TimescaleDB — это open source. Достаточно установить расширение и продолжать использовать PostgreSQL.

Ссылка: https://tsdb.co/ktran-x

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Лёгковесный настольный клиент с открытым исходным кодом, который позволяет подключаться к разным базам данных через единый инструмент: MySQL, PostgreSQL, SQLite, Redis, MongoDB, ClickHouse и другие. Не нужно ставить отдельные клиенты под каждую СУБД.

DBX собран на Tauri 2 + Vue.js 3 + Rust, размер установщика около 15 МБ, без бандла Chromium.

Поддерживает подключение к десяткам баз данных, включая OceanBase и openGauss. SQL-редактор содержит AI-ассистента для генерации и оптимизации запросов на естественном языке; таблицы поддерживают inline-редактирование, сортировку и поиск; для Redis и MongoDB есть отдельные браузеры.

https://github.com/t8y2/dbx

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Появилась новая игра для изучения SQL — SQL Protocol.

Она сделана в стиле «Матрицы». Внутри надо играть за агента, идти по сюжету и решать множество SQL-задач от простых к сложным. Также есть PvP Arena 🤑

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