Postgres Guru | Базы данных 💐
前往频道在 Telegram
Все о самой популярной СУБД PostgreSQL: технические статьи, новости и немного юмора. Сотрудничество: @Sferg007 Ссылка для друзей: https://t.me/+NRjYf8gGR3RmYmMy Сайт: https://ibtorg.ru Postgres Guru в VK https://vk.com/pg_guru
显示更多2 892
订阅者
+124 小时
+17 天
+130 天
数据加载中...
相似频道
标签云
进出提及
---
---
---
---
---
---
吸引订阅者
六月 '26
六月 '26
+7
在0个频道中
五月 '26
+15
在0个频道中
Get PRO
四月 '26
+24
在0个频道中
Get PRO
三月 '26
+28
在0个频道中
Get PRO
二月 '26
+42
在0个频道中
Get PRO
一月 '26
+34
在0个频道中
Get PRO
十二月 '25
+41
在0个频道中
Get PRO
十一月 '25
+46
在1个频道中
Get PRO
十月 '25
+39
在0个频道中
Get PRO
九月 '25
+34
在0个频道中
Get PRO
八月 '25
+29
在0个频道中
Get PRO
七月 '25
+46
在0个频道中
Get PRO
六月 '25
+28
在0个频道中
Get PRO
五月 '25
+37
在0个频道中
Get PRO
四月 '25
+55
在0个频道中
Get PRO
三月 '25
+93
在0个频道中
Get PRO
二月 '25
+60
在0个频道中
Get PRO
一月 '25
+70
在1个频道中
Get PRO
十二月 '24
+64
在0个频道中
Get PRO
十一月 '24
+68
在0个频道中
Get PRO
十月 '24
+86
在0个频道中
Get PRO
九月 '24
+92
在0个频道中
Get PRO
八月 '24
+99
在0个频道中
Get PRO
七月 '24
+90
在1个频道中
Get PRO
六月 '24
+149
在1个频道中
Get PRO
五月 '24
+86
在0个频道中
Get PRO
四月 '24
+205
在1个频道中
Get PRO
三月 '24
+121
在3个频道中
Get PRO
二月 '24
+111
在1个频道中
Get PRO
一月 '24
+85
在0个频道中
Get PRO
十二月 '23
+438
在4个频道中
Get PRO
十一月 '23
+100
在2个频道中
Get PRO
十月 '23
+56
在0个频道中
Get PRO
九月 '23
+89
在0个频道中
Get PRO
八月 '23
+137
在0个频道中
Get PRO
七月 '23
+62
在0个频道中
Get PRO
六月 '23
+908
在0个频道中
| 日期 | 订阅者增长 | 提及 | 频道 | |
| 14 六月 | +1 | |||
| 13 六月 | 0 | |||
| 12 六月 | 0 | |||
| 11 六月 | +1 | |||
| 10 六月 | 0 | |||
| 09 六月 | +1 | |||
| 08 六月 | 0 | |||
| 07 六月 | 0 | |||
| 06 六月 | +1 | |||
| 05 六月 | +1 | |||
| 04 六月 | +1 | |||
| 03 六月 | 0 | |||
| 02 六月 | 0 | |||
| 01 六月 | +1 |
频道帖子
🛠️ Мало известные параметры команды EXPLAIN.
Про команду EXPLAIN мы писали в канале много раз. И как про нее писать, если это один из основных инструментов оптимизации запросов? Но у этой команды есть еще несколько полезных параметров, о которых не все знают, а один из параметров появился не так давно.
📌 MEMORY: сколько памяти использовал запрос
Это новая возможность, появившаяся в версии 18. Она отличается от знакомого BUFFERS тем, что отслеживает объём памяти, потреблённый на этапе планирования запроса, а не его выполнения. Вывод появляется внизу результата EXPLAIN, например:
EXPLAIN (ANALYZE, TIMING OFF)
SELECT * FROM mytable WHERE id = 123;
Planning:
Buffers: shared hit=36 read=1
Memory: used=63kB allocated=64kB
📌 WAL: насколько активно логирование?
Ещё одна полезная опция, которую многие упускают из виду - WAL:
EXPLAIN (ANALYZE, WAL)
INSERT INTO mytable SELECT * FROM staging_table;
WAL: records=100, fpi=5, bytes=45000
В примере выше records - это количество сгенерированных записей WAL, fpi (full-page images) - количество записанных образов целых страниц (страницы, изменённые впервые после последней контрольной точки), а bytes - общий объём данных WAL, созданный запросом. Это может быть полезно при исследовании нагрузок, интенсивно работающих с записью: массовые вставки, большие обновления, создание индексов и высокая нагрузка репликации.
📌 SETTINGS: в каком окружении выполнялся запрос?
Иногда один и тот же SQL-запрос ведёт себя по-разному на двух серверах, или вы могли временно изменить некоторые параметры локально (например, work_mem). Чтобы правильно понять, как на запрос влияют различия в окружении, может быть полезна опция SETTINGS:
EXPLAIN (SETTINGS)
SELECT * FROM mytable WHERE id = 123;
Settings: effective_cache_size = '48GB', effective_io_concurrency = '200', enable_partitionwise_aggregate = 'on', enable_partitionwise_join = 'on', max_parallel_workers = '16', max_parallel_workers_per_gather = '4', temp_buffers = '1MB', search_path = 'public'
📌 VERBOSE: вся история планировщика.
Ещё одна полезная опция - VERBOSE. Она выводит дополнительную информацию: внутренние ссылки на столбцы, развёрнутые списки целевых столбцов и объекты со схемами.
Хотя вывод с этим параметром будет выглядеть немного перегруженным, VERBOSE помогает при диагностике:
✅ разворачивания представлений (view expansion);
✅ перезаписи правил (rule rewriting);
✅ сложных преобразований запросов.
Ну и конечно, мы можем комбинировать в EXPLAIN все выше приведенные параметры, для вывода более детельной информации по интересующим нас вопросам.
На этом все! До связи!
#queries
| 2 | 🌐 PostgreSQL 19 - самые заметные нововведения (ч. 2)
Всем привет! Продолжаем знакомить вас с новшествами и улучшениями, которые будут в PostgreSQL 19.
📊 Производительность:
1. Значительное ускорение работы функции jsonb_agg, особенно для типов integer и numeric;
2. Оптимизация LISTEN/NOTIFY:
- Добавлена хеш-таблица для хранения соответствия каналов и получателей;
- Увеличена производительность доставки уведомлений в несколько раз.
3. Оптимизация функций ICU для преобразования регистра:
- Ускорение функций upper, lower для баз данных с кодировкой UTF-8 и правилами сортировки ICU.
🧾 Работа с секционированными таблицами:
1. Команды MERGE PARTITIONS и SPLIT PARTITION:
- Позволяют объединять и разделять секции секционированных таблиц;
- Ограничение: Получают исключительную блокировку на всё время выполнения.
2. Поддержка COPY ... TO для секционированных таблиц:
- Теперь можно использовать команду COPY ... TO напрямую с секционированными таблицами;
- Также используется для начальной синхронизации в логической репликации.
3. Сбор статистики для секционированных таблиц в vacuumdb:
- Утилита vacuumdb с параметрами --analyze-only и --analyze-in-stages теперь собирает статистику и для секционированных таблиц.
🎚 Мониторинг и отладка:
1. Мониторинг задержек синхронизации слотов логической репликации:
- Добавлены столбцы slotsync_skip_reason, slotsync_skip_count и slotsync_last_skip в представления pg_replication_slots и pg_stat_replication_slots.
2. Улучшения в мониторинге выполнения VACUUM и ANALYZE:
- В pg_stat_progress_vacuum добавлены столбцы mode (normal/aggressive/failsafe) и started_by (manual/autovacuum/autovacuum_wraparound);
- В pg_stat_progress_analyze добавлен столбец started_by.
3. Статистика использования мультитранзакций:
- Новая функция pg_get_multixact_stats() возвращает агрегированную статистику по мультитранзакциям.
4. Мониторинг объема записанных в WAL полных образов страниц:
- Добавлен столбец wal_full_images в представление pg_stat_wal.
5. Новый параметр log_autoanalyze_min_duration:
• Позволяет журналировать длительные операции автоматического анализа таблиц.
🔃 Логическая репликация:
1. Синхронизация последовательностей:
- Подписчики логической репликации теперь могут синхронизировать значения последовательностей с сервером публикации;
- Управляется вручную с помощью команды ALTER SUBSCRIPTION ... REFRESH SEQUENCES.
2. Динамическое управление уровнем логического декодирования WAL:
- Уровень записи в WAL (wal_level) теперь определяется динамически в зависимости от наличия слотов логической репликации;
- Текущий фактический уровень показывает параметр effective_wal_level.
3. Команда WAIT FOR LSN:
- Позволяет дождаться применения заданной позиции LSN на реплике;
- Полезно для гарантии актуальности данных на реплике перед чтением.
⚒️ Утилиты и инструменты:
1. Параметр --dry-run в vacuumdb:
- Показывает, какие команды очистки и анализа будут выполнены, не отправляя их на сервер.
2. Параметр FLUSH_UNLOGGED в CHECKPOINT:
- Позволяет сбрасывать на диск изменённые буферы нежурналируемых объектов;
- Ускоряет перезагрузку сервера с нежурналируемыми таблицами.
3. Параметр MODE в CHECKPOINT:
- Поддерживает режимы FAST и SPREAD для управления нагрузкой на систему;
- SPREAD позволяет выполнять контрольную точку растянуто, учитывая checkpoint_completion_target.
♻️ Буферный кеш и память:
1. Отказ от списка свободных буферов:
- Для поиска свободных буферов теперь используется алгоритм clock-sweep;
- Упрощает последующие оптимизации для поддержки NUMA.
2. Представление pg_buffercache:
- Добавлен столбец os_page_num, показывающий распределение буферов по страницам ОС.
3. Мониторинг использования памяти в VACUUM:
- Команда VACUUM (VERBOSE) теперь выводит информацию об использовании памяти для хранения идентификаторов мёртвых строк.
#pgnews | 977 |
| 3 | 🌐 PostgreSQL 19 - самые заметные нововведения.
Пока мы тут неизвестно чем занимались, рабочая группа PostgreSQL уже закончила четыре комитфеста и пятый в самом разгаре 😱 Мы собрали самые значительные (на наш взгляд) нововведения из этих комитфестов.
Если вы хотите более подробно почитать о новинках PostgreSQL 19, то можете обратиться к замечательным статьям Павла Лузанова из компании Postgres Pro:
1️⃣https://habr.com/ru/companies/postgrespro/articles/984580/
2️⃣https://habr.com/ru/companies/postgrespro/articles/986694/
3️⃣https://habr.com/ru/companies/postgrespro/articles/992426/
4️⃣https://habr.com/ru/companies/postgrespro/articles/996010/
Нововведений много, по этому в один пост все не поместиться, продолжаем в следующем.
🔧 Подключение и удобство работы
📌 servicefile в libpq и переменная :SERVICEFILE в psql - имя файла служб соединения можно указывать непосредственно в строке подключения; в psql переменная возвращает текущий файл службы;
📌 Тип‑псевдоним regdatabase – преобразует имя базы данных в её OID и обратно (как regclass, regtype и др.);
📌 Группировка GROUP BY ALL - ключевое слово ALL автоматически включает в GROUP BY все неагрегированные выражения из SELECT; добавляя новое выражение в SELECT больше не нужно править GROUP BY;
📌 Случайная дата/время в заданном диапазоне - функция random() теперь принимает два значения типа date, time, timestamp/timestamptz и возвращает равномерно распределённое значение в этом интервале;
📌 file_fdw: пропуск начальных строк - аналогично опции header в COPY, внешняя таблица file_fdw получила параметр header = N, указывающий сколько первых строк файла пропустить перед загрузкой данных.
📊 Мониторинг, статистика и отладка
📌 Расширенная статистика в pg_stat_statements
• новые счётчики generic_plan_calls / custom_plan_calls - показывают, сколько раз использовался общий и индивидуальный план;
• нормализация команды FETCH (размер выборки заменяется константой) - разные FETCH N попадают в одну строку статистики;
• нормализация IN со списком параметров - запросы WHERE col IN ($1,$2,…) получают одинаковый идентификатор;
📌 Оценки планировщика для узла Memoize в EXPLAIN - строка Estimates (capacity, distinct keys, lookups, hit %) позволяет сравнить планировщику прогноз с фактическими показателями (Hits/Misses и т.д.) при EXPLAIN ANALYZE;
📌 Функция error_on_null - полиморфная функция, возвращающая свой агрумент, если он не равен NULL, иначе генерирующая ошибку «null value not allowed»;
📌 pg_dsm_registry_allocations - новое системное представление, показывающее содержимое динамической общей памяти (DSM): имя, тип, размер сегментов;
📌 pg_available_extensions (столбец location) - в представлениях pg_available_extensions и pg_available_extension_versions добавлен столбец, показывающий каталог установки каждого расширения (значение $system - каталог по умолчанию).
До встречи в будущих постах ☺️
#pgnews | 1 391 |
| 4 | 🌐 PostgreSQL 14 мая 2026 г.: обновления и исправления безопасности.
Всем привет! Надеюсь вы как и мы соскучились 😁
14 мая 2026 года PostgreSQL Global Development Group выпустила экстренное обновление для всех поддерживаемых веток СУБД, а также напомнила о скором прекращении поддержки PostgreSQL версии 14. Поддержка этой версии закончится 12 ноября 2026 года.
Что вошло в релиз:
⚠️ 11 уязвимостей (CVE), исправлено в этом обновлении. Четыре из них получили оценку CVSS 8.8 и допускают практическую эксплуатацию:
1️⃣ CVE‑2026‑6473 - сервер PostgreSQL занижает размер выделяемых ресурсов с помощью целочисленного обхода.
Целочисленный обход в нескольких функциях сервера PostgreSQL позволяет поставщику входных данных приложения заставлять сервер занижать размер выделяемых ресурсов и выводить данные за пределы допустимых значений.
2️⃣ CVE‑2026‑6475 - PostgreSQL pg_base backup и pg_rewind могут перезаписывать несвязанные файлы по выбору суперпользователя.
Символическая ссылка в PostgreSQL pg_basebackup в обычном формате и в pg_rewind позволяет суперпользователю перезаписывать локальные файлы, например /var/lib/postgres/.bashrc, которые перехватывают учетную запись операционной системы.
3️⃣ CVE‑2026‑6477 - функции PostgreSQL libpq lo_* позволяют суперпользователю сервера перезаписывать память клиентского стека.
Использование потенциально опасной функции PQfn(..., result_is_int=0, ...) в функциях PostgreSQL libpq lo_export(), lo_read(), lo_lseek64() и lo_tell64() позволяет суперпользователю сервера перезаписывать клиентский буфер стека с помощью ответа произвольного размера.
4️⃣ CVE‑2026‑6477- PostgreSQL refint допускает переполнение стекового буфера и SQL-инъекцию.
Переполнение стекового буфера в модуле PostgreSQL refint позволяет непривилегированному пользователю базы данных выполнять произвольный код в качестве пользователя операционной системы, запускающей базу данных.
Оставшиеся 8 CVE охватывают:
📌 несколько случаев раскрытия информации (memory disclosure);
📌 уязвимости типа denial‑of‑service (DoS), связанные с некорректной обработкой сложных запросов и слотов репликации;
📌 проблемы с проверкой прав доступа при работе с логическими слотами репликации и временными таблицами.
Помимо исправлений безопасности, релиз включает более 60 баг‑фиксов, затрагивающих:
📌 планировщик запросов (улучшена оценка стоимости для сложных JOIN‑ов);
📌 репликацию (исправлена проблема при переключении лидерa в потоковой репликации, когда реплика могла читать старые данные);
📌 VACUUM и autovacuum (повышена эффективность очистки больших таблиц);
📌 работу с JSONB и массивами (исправлены редкие случаи повреждения данных при конкурентном обновлении данных).
Рекомендуется применить обновление как можно скорее, так как три из уязвимостей имеют высокую степень критичности и допускают удалённое выполнение кода без аутентификации.
В итоге выпуск от 14 мая 2026 года является одним из самых крупных пакетов безопасности в истории PostgreSQL: кроме критических исправлений, он привносит значительные улучшения производительности и стабильности во всех поддерживаемых версиях. Обновление рекомендуется к незамедлительному применению на всех рабочих и тестовых кластерах.
Более подробно об обновлении читаем на официальном сайте:
➡️ https://www.postgresql.org/about/news/postgresql-184-1710-1614-1518-and-1423-released-3297/
Постараемся выходить более регулярно, несуни на что! 😁💪
#pgnews | 1 647 |
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
