This media is not supported in your browser
VIEW IN TELEGRAM
Команда \watch {n} в Postgres повторно выполняет тот же запрос каждые n секунд.
Например, можно мониторить таблицу pg_stat_activity каждые 3 секунды так:
@SQLPortal
Например, можно мониторить таблицу pg_stat_activity каждые 3 секунды так:
select * from pg_stat_activity; \watch 3
@SQLPortal
👍7
Сокращение в Postgres:
👉 @SQLPortal
USING можно использовать вместо JOIN ... ON a.id = b.idSELECT DISTINCT
t.amount AS transaction_amount
FROM
accounts a
JOIN
transactions t USING (account_id)
WHERE
a.account_id = 1;
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Перестаньте гадать, какие запросы тормозят вашу БД. В этом разборе разработчик показывает, как с помощью
{ автор: Labeeb Ahmad }
👉 @SQLPortal
pg_stat_statements определить, какие запросы потребляют больше всего суммарного CPU-времени — и как отличить действительно медленный запрос от того, который просто слишком часто вызывается.{ автор: Labeeb Ahmad }
Please open Telegram to view this post
VIEW IN TELEGRAM
DEV Community
Finding Slow Queries in PostgreSQL (Without Guessing)
Here’s the quantitative method used by DBAs and tools like pganalyze and AWS Performance...
5 мифов о SQL. Что часто неправильно понимают новички
SQL — это мощный инструмент, но некоторые мифы о нем могут сбить с толку новичков.
Давайте разберем пять распространенных заблуждений и развеем их:👇
Миф 1: SQL — это только для извлечения данных.
✦ Реальность: Нет, это не так! SQL также может создавать, изменять и управлять базами данных, контролировать доступ и поддерживать консистентность данных.
✦ Как исправить: Изучите все возможности SQL, такие как DDL (для проектирования баз данных), DCL (для управления доступом) и TCL (для транзакций). SQL — это не только SELECT!
Миф 2: Использование SELECT * — это нормально.
✦ Реальность: Это может быть легко, но неэффективно. Извлечение всех колонок расходует память и замедляет производительность.
✦ Как исправить: Выбирайте только те колонки, которые вам действительно нужны. Это быстрее и чище. Не очень хорошо - SELECT * FROM employees; Лучше - SELECT employee_id, name, department FROM employees;
Миф 3: SQL не может обрабатывать сложный анализ данных.
✦ Реальность: SQL может делать гораздо больше, чем простые запросы! С такими концепциями, как оконные функции и CTE, вы можете обрабатывать действительно сложный анализ данных.
✦ Как исправить: Изучите продвинутые возможности SQL, такие как оконные функции (ROW_NUMBER(), RANK()) и CTE, чтобы улучшить свои навыки. Пример - Ранжирование сотрудников по зарплате в пределах их отдела
WITH ranked_salaries AS (SELECT employee_id, salary, department, ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rank FROM employees) SELECT * FROM ranked_salaries WHERE rank = 1;
Миф 4: Медленные запросы — всегда вина базы данных.
✦ Реальность: Обычно замедление происходит из-за неэффективных запросов. Причиной могут быть, например, отсутствующие индексы или неоптимизированный код.
✦ Как исправить: Правильно используйте индексы, избегайте сложных вычислений в условиях WHERE и проверяйте план выполнения запроса для выявления узких мест.
Миф 5: SQL устарел и скоро будет заменен.
✦ Реальность: SQL останется! Несмотря на рост популярности NoSQL, SQL по-прежнему является основой для структурированных данных.
✦ Как исправить: Следите за новыми тенденциями и исследуйте, как SQL интегрируется с платформами для больших данных и облачными базами данных. SQL актуален как никогда.
Не позволяйте этим мифам останавливать вас. SQL — это мощный инструмент, и когда вы освоите его в полной мере, вы сможете делать потрясающие вещи с вашими данными.❤️
👉 @SQLPortal
SQL — это мощный инструмент, но некоторые мифы о нем могут сбить с толку новичков.
Давайте разберем пять распространенных заблуждений и развеем их:
Миф 1: SQL — это только для извлечения данных.
✦ Реальность: Нет, это не так! SQL также может создавать, изменять и управлять базами данных, контролировать доступ и поддерживать консистентность данных.
✦ Как исправить: Изучите все возможности SQL, такие как DDL (для проектирования баз данных), DCL (для управления доступом) и TCL (для транзакций). SQL — это не только SELECT!
Миф 2: Использование SELECT * — это нормально.
✦ Реальность: Это может быть легко, но неэффективно. Извлечение всех колонок расходует память и замедляет производительность.
✦ Как исправить: Выбирайте только те колонки, которые вам действительно нужны. Это быстрее и чище. Не очень хорошо - SELECT * FROM employees; Лучше - SELECT employee_id, name, department FROM employees;
Миф 3: SQL не может обрабатывать сложный анализ данных.
✦ Реальность: SQL может делать гораздо больше, чем простые запросы! С такими концепциями, как оконные функции и CTE, вы можете обрабатывать действительно сложный анализ данных.
✦ Как исправить: Изучите продвинутые возможности SQL, такие как оконные функции (ROW_NUMBER(), RANK()) и CTE, чтобы улучшить свои навыки. Пример - Ранжирование сотрудников по зарплате в пределах их отдела
WITH ranked_salaries AS (SELECT employee_id, salary, department, ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rank FROM employees) SELECT * FROM ranked_salaries WHERE rank = 1;
Миф 4: Медленные запросы — всегда вина базы данных.
✦ Реальность: Обычно замедление происходит из-за неэффективных запросов. Причиной могут быть, например, отсутствующие индексы или неоптимизированный код.
✦ Как исправить: Правильно используйте индексы, избегайте сложных вычислений в условиях WHERE и проверяйте план выполнения запроса для выявления узких мест.
Миф 5: SQL устарел и скоро будет заменен.
✦ Реальность: SQL останется! Несмотря на рост популярности NoSQL, SQL по-прежнему является основой для структурированных данных.
✦ Как исправить: Следите за новыми тенденциями и исследуйте, как SQL интегрируется с платформами для больших данных и облачными базами данных. SQL актуален как никогда.
Не позволяйте этим мифам останавливать вас. SQL — это мощный инструмент, и когда вы освоите его в полной мере, вы сможете делать потрясающие вещи с вашими данными.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Практически каждая операция, даже базовые запросы в Postgres, использует блокировки для управления доступом к ресурсам. Существует несколько типов блокировок, многие из которых не блокируют чтение или запись, но могут блокировать DDL-операции, изменяющие схему. Некоторые основные моменты.
👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня мы изучим хранимые процедуры и функции:
Хранимые процедуры и функции — это предварительно скомпилированные объекты, хранящиеся в базе данных, которые позволяют инкапсулировать и повторно использовать логику на серверной стороне.
Хранимые процедуры:
Хранимая процедура — это набор SQL-операторов, которые могут быть выполнены как единое целое.
Выполнение хранимой процедуры:
Функции:
Функция возвращает значение на основе входных параметров. Существуют два типа: скалярные функции и функции, возвращающие таблицы.
Вызов функции:
Хранимые процедуры и функции повышают модульность и поддерживаемость кода. Они полезны для реализации бизнес-логики на стороне базы данных.
👉 @SQLPortal
Хранимые процедуры и функции — это предварительно скомпилированные объекты, хранящиеся в базе данных, которые позволяют инкапсулировать и повторно использовать логику на серверной стороне.
Хранимые процедуры:
Хранимая процедура — это набор SQL-операторов, которые могут быть выполнены как единое целое.
CREATE PROCEDURE procedure_name
AS
BEGIN
-- SQL-операторы
END;
Выполнение хранимой процедуры:
EXEC procedure_name;
Функции:
Функция возвращает значение на основе входных параметров. Существуют два типа: скалярные функции и функции, возвращающие таблицы.
CREATE FUNCTION function_name (@param1 INT, @param2 VARCHAR(50))
RETURNS INT
AS
BEGIN
-- SQL-операторы
RETURN some_value;
END;
Вызов функции:
SELECT dbo.function_name(param1, param2);
Хранимые процедуры и функции повышают модульность и поддерживаемость кода. Они полезны для реализации бизнес-логики на стороне базы данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Совет по Postgres: настройте префикс строки лога (
Например:
Новое в Postgres 18:
👉 @SQLPortal
log_line_prefix), чтобы при последующей фильтрации логов было больше контекста. По умолчанию там есть таймстамп и ID процесса, но можно добавить гораздо больше.Например:
user=%u, db=%d.Новое в Postgres 18:
%L — локальный IP-адрес сервера.Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Существует множество способов выполнить один и тот же запрос в Postgres.
- Делать поиск через последовательное сканирование (sequential scan) или по индексу?
- Какие индексы использовать?
- В каком порядке лучше джойнить таблицы?
- Какой алгоритм сортировки выбрать?
Все эти решения принимает query planner. Его задача — принять запрос, определить оптимальный план выполнения, а затем передать его в execution engine.
Postgres собирает статистику по каждой таблице (размер, оценка кардинальности колонок и т.д.), и эти данные используются планировщиком, помогая ему принимать более точные решения.
Однако здесь есть риск: по мере обновления статистики планировщик может изменить план выполнения для уже существующих запросов. Обычно он принимает правильные решения, но иногда может выбрать новый план, который ухудшит производительность.
В таких случаях можно:
- настраивать параметры, например
- вручную обновлять статистику
- или использовать расширения вроде pg_hint_plan, чтобы подсказать планировщику более подходящий вариант выполнения
👉 @SQLPortal
- Делать поиск через последовательное сканирование (sequential scan) или по индексу?
- Какие индексы использовать?
- В каком порядке лучше джойнить таблицы?
- Какой алгоритм сортировки выбрать?
Все эти решения принимает query planner. Его задача — принять запрос, определить оптимальный план выполнения, а затем передать его в execution engine.
Postgres собирает статистику по каждой таблице (размер, оценка кардинальности колонок и т.д.), и эти данные используются планировщиком, помогая ему принимать более точные решения.
Однако здесь есть риск: по мере обновления статистики планировщик может изменить план выполнения для уже существующих запросов. Обычно он принимает правильные решения, но иногда может выбрать новый план, который ухудшит производительность.
В таких случаях можно:
- настраивать параметры, например
enable_seqscan=off- вручную обновлять статистику
- или использовать расширения вроде pg_hint_plan, чтобы подсказать планировщику более подходящий вариант выполнения
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
ORM обычно по умолчанию используют
Для действительно крупных батчей стоит использовать
Postgres: INSERT vs COPY
INSERT
- построчно (row by row), идеально для транзакций
- можно использовать
- подходит для нескольких тысяч строк, но
COPY
- быстрее
- принцип «всё или ничего» (all-or-nothing)
- нужен для загрузки данных в больших объёмах
- можно запускать из
👉 @SQLPortal
INSERT, но это не всегда лучший вариант — особенно если нужно загружать большие объёмы данных.Для действительно крупных батчей стоит использовать
COPY в PostgreSQL или \copy из командной строки.Postgres: INSERT vs COPY
INSERT
- построчно (row by row), идеально для транзакций
- можно использовать
ON CONFLICT- подходит для нескольких тысяч строк, но
COPY быстрееCOPY
- быстрее
- принцип «всё или ничего» (all-or-nothing)
- нужен для загрузки данных в больших объёмах
- можно запускать из
psql через \copyPlease open Telegram to view this post
VIEW IN TELEGRAM
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Совет по PostgreSQL:
Если у вас есть результат из 3 столбцов, PostgreSQL может преобразовать его в сводную таблицу с помощью команды
Для более сложных наборов данных используйте функцию
👉 @SQLPortal
\crosstabviewЕсли у вас есть результат из 3 столбцов, PostgreSQL может преобразовать его в сводную таблицу с помощью команды
\crosstabview (в psql).Для более сложных наборов данных используйте функцию
crosstab()из расширения tablefunc — она требует более точной настройки с помощью SQL-запросовPlease open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Нашёл коллекцию 100+ SQL-скриптов
Они могут помочь в управлении базами данных, оптимизации запросов и выполнении различных операций с данными.
Сохраняй если хочешь улучшить свои навыки работы с SQL.👍
👉 @SQLPortal
Они могут помочь в управлении базами данных, оптимизации запросов и выполнении различных операций с данными.
Сохраняй если хочешь улучшить свои навыки работы с SQL.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Ищешь игры, которые помогут тебе выучить и практиковать SQL? 🤔
Попробуй SQL Noir — детективная игра по SQL
Пиши запросы, анализируй данные и раскрывай дела
Попробовать - https://www.sqlnoir.com/
👉 @SQLPortal
Попробуй SQL Noir — детективная игра по SQL
Пиши запросы, анализируй данные и раскрывай дела
Попробовать - https://www.sqlnoir.com/
Please open Telegram to view this post
VIEW IN TELEGRAM
SQL-собеседования ОБОЖАЮТ проверять вас на оконные функции.
Вот список из 7 самых популярных оконных функций:
7 самых часто проверяемых оконных функций👇
🟡 RANK() – присваивает ранг каждой строке в разделе на основе указанного столбца или значения.
🟡 DENSE_RANK() – присваивает ранг каждой строке, но не пропускает значения ранга.
🟡 ROW_NUMBER() – присваивает каждой строке уникальный порядковый номер в разделе на основе порядка строк.
🟡 LEAD() – извлекает значение из следующей строки в разделе на основе указанного столбца или выражения.
🟡 LAG() – извлекает значение из предыдущей строки в разделе на основе указанного столбца или выражения.
🟡 NTH_VALUE() – извлекает n-е значение в разделе.
👉 @SQLPortal
Вот список из 7 самых популярных оконных функций:
7 самых часто проверяемых оконных функций
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Изучайте SQL быстрее
Этот сайт объясняет ключевые понятия с помощью аналогий
- SQL, JavaScript, CSS, Git и многое другое
С интерактивными учебниками
→ http://codeanalogies.com
👉 @SQLPortal
Этот сайт объясняет ключевые понятия с помощью аналогий
- SQL, JavaScript, CSS, Git и многое другое
С интерактивными учебниками
→ http://codeanalogies.com
Please open Telegram to view this post
VIEW IN TELEGRAM
15🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
Одна из N причин, почему шардинг — отличный способ масштабировать базу данных:
Скорость резервного копирования.
👉 @SQLPortal
Скорость резервного копирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Известная компания Postgres Professional выпустила свой обновлённый базовый курс DBA-1 по администрированию свободно распространяемой СУБД PostgreSQL.
Курс доступен для самостоятельного изучения на сайте, а также в авторизованных учебных центрах.
Основные изменения:
- Добавлена информация про версии PostgreSQL 14, 15 и 16.
- Заменены четыре темы раздела «Управление доступом», по которым в дальнейшем появится отдельный подробный курс;
- Частично изменена структура: изложение стало более логичным и последовательным;
- Физическая и логическая репликации теперь рассматриваются в отдельных темах.
- Исправлены недочёты в изложении, ошибки в скриптах демонстраций и практических заданий.
Cам курс: тут
👉 @SQLPortal
Курс доступен для самостоятельного изучения на сайте, а также в авторизованных учебных центрах.
Основные изменения:
- Добавлена информация про версии PostgreSQL 14, 15 и 16.
- Заменены четыре темы раздела «Управление доступом», по которым в дальнейшем появится отдельный подробный курс;
- Частично изменена структура: изложение стало более логичным и последовательным;
- Физическая и логическая репликации теперь рассматриваются в отдельных темах.
- Исправлены недочёты в изложении, ошибки в скриптах демонстраций и практических заданий.
Cам курс: тут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
postgres-A4.pdf
16.3 MB
Полный перевод документации PostgreSQL на русский язык
Оригинальная англоязычная документация PostgreSQL и документация к СУБД Postgres Pro в вариантах Standard и Enterprise.
⛓ Ссылка: тык
👉 @SQLPortal
Оригинальная англоязычная документация PostgreSQL и документация к СУБД Postgres Pro в вариантах Standard и Enterprise.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4😁1
Игры, которые помогают изучать и практиковать SQL | Аналитика данных
Ссылки для доступа к играм:
1. SQL Island: https://sql-island.informatik.uni-kl.de/
2. SQL Murder Mystery: https://mystery.knightlab.com/
3. Полицейский департамент SQL: https://sqlpd.com/
4. The Schemaverse: https://schemaverse.com/
👉 @SQLPortal
Ссылки для доступа к играм:
1. SQL Island: https://sql-island.informatik.uni-kl.de/
2. SQL Murder Mystery: https://mystery.knightlab.com/
3. Полицейский департамент SQL: https://sqlpd.com/
4. The Schemaverse: https://schemaverse.com/
Please open Telegram to view this post
VIEW IN TELEGRAM
Knight Lab's SQL Murder Mystery
Use SQL queries to solve the murder mystery. Suitable for beginners or experienced SQL sleuths.
❤3
Совет по Postgres: используйте
Общий размер таблицы, включая индексы и TOAST:
32 kB
👉 @SQLPortal
pretty, чтобы видеть размеры таблиц в человекочитаемом формате; без него вы получите значения в байтах.Общий размер таблицы, включая индексы и TOAST:
SELECT pg_size_pretty(pg_total_relation_size('my_table'));32 kB
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Список с задачами для подготовки к SQL-интервью с различными базами данных:
1. [Database Basics](https://bit.ly/3zGK6S7)
2. [SQL Queries](https://bit.ly/3bGzN8r)
3. [MSSQL](https://bit.ly/3A5qIj0)
4. [MySQL](https://bit.ly/3bFkhtE)
5. [Postgres](https://bit.ly/3BOLLHP)
6. [Oracle](https://bit.ly/3zF2WsH)
👉 @SQLPortal
1. [Database Basics](https://bit.ly/3zGK6S7)
2. [SQL Queries](https://bit.ly/3bGzN8r)
3. [MSSQL](https://bit.ly/3A5qIj0)
4. [MySQL](https://bit.ly/3bFkhtE)
5. [Postgres](https://bit.ly/3BOLLHP)
6. [Oracle](https://bit.ly/3zF2WsH)
Please open Telegram to view this post
VIEW IN TELEGRAM
Функции
👉 @SQLPortal
pg_get_* — это встроенные функции интроспекции в Postgres.pg_get_viewdef — «Покажи SQL, лежащий за этим представлением»pg_get_indexdef — «Покажи CREATE INDEX для этого индекса»pg_get_constraintdef — «Покажи, как определён этот внешний ключ / check-ограничение»Please open Telegram to view this post
VIEW IN TELEGRAM
👍5