Skip to content

Всё о GUC по порядку: default_toast_compression

Автор: Christophe Pettus, All Your GUCs in a Row: default_toast_compression


default_toast_compression определяет, какой алгоритм PostgreSQL использует для сжатия значений, направляемых в TOAST — внестрочное хранилище для значений полей, слишком больших, чтобы помещаться непосредственно на странице кучи размером 8 КБ. Доступны варианты pglz и lz4; по умолчанию во всех выпущенных на данный момент версиях используется pglz; контекст — user, и его можно переопределить для каждого столбца с помощью опции COMPRESSION в CREATE TABLE или ALTER TABLE. Параметр существует начиная с PostgreSQL 14, и более интересный факт заключается в том, что его значение по умолчанию, наконец, скоро изменится.

Продолжить чтение "Всё о GUC по порядку: default_toast_compression"

Всё о GUC по порядку: default_text_search_config

Автор: Christophe Pettus, All Your GUCs in a Row: default_text_search_config


default_text_search_config определяет конфигурацию полнотекстового поиска, которую используют функции PostgreSQL для полнотекстового поиска, если вы явно не передаёте им конфигурацию. Значение по умолчанию устанавливается командой initdb на основе локали кластера; контекст — user. Конфигурация полнотекстового поиска связывает парсер (который разбивает текст на токены) с цепочкой словарей (которые преобразуют токены в лексемы — например, приводят «бегущий» к «бежать», отбрасывают стоп-слова вроде «и»), и каждый вызов to_tsvector и to_tsquery нуждается в конфигурации для своей работы. Этот параметр используется теми вызовами, которые опускают явное указание конфигурации.



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

Продолжить чтение "Всё о GUC по порядку: default_text_search_config"

Всё о GUC по порядку: default_tablespace

Автор: Christophe Pettus, All Your GUCs in a Row: default_tablespace


Сначала о механике, поскольку она кратка: когда default_tablespace содержит что-либо, кроме пустой строки, он неявно добавляет предложение TABLESPACE к каждой команде CREATE TABLE и CREATE INDEX, в которой это предложение явно не указано, включая индекс, создаваемый для ограничений UNIQUE или PRIMARY KEY. Значение по умолчанию — пустая строка, что означает «использовать табличное пространство самой базы данных», а контекст — user. Чтобы иметь мнение об этом параметре, нужно иметь мнение о табличных пространствах, и моё, в 2026 году, таково: в основном не используйте. Мы ещё дойдём до этого. Сначала — особенности.

Продолжить чтение "Всё о GUC по порядку: default_tablespace"

Новости за 2026-07-04 - 2026-07-10

§ Лидеры недели

	Участник		w_sel	all_sel	select	dml	Всего	Рейтинг
Багманов Д.Д. (Bagmanov_Dinar 20 20 28 11 39 2643
Шибаев (saah) 7 57 18 0 18 1234
Сафронов П.А. (Paulus73) 5 155 14 0 14 134
Odnokurtsev (AlFochino) 3 127 8 59 67 175
Fom (Kamchatka) 3 9 5 0 5 5634
Smirnov S. (hr) 3 28 4 0 4 1388

§ Претенденты на попадание в TOP 100

Рейтинг	 Участник (решенные задачи, время в днях)
134 Paulus73 (155, 15.028)
140 Rujan (143, 451.925)
169 Tigra1 (138, 24.441)
175 AlFochino (127, 121.400)

Продолжить чтение "Новости за 2026-07-04 - 2026-07-10"

Всё о GUC по порядку: default_table_access_method

Автор: Christophe Pettus, All Your GUCs in a Row: default_table_access_method


Небольшая ручка на очень большой двери. default_table_access_method определяет метод доступа к таблицам — то есть механизм хранения, если использовать слово, которое все на самом деле подразумевают, — который получают новые таблицы, если в CREATE TABLE не указано иное. Значение по умолчанию — heap. Контекст — user. И для подавляющего большинства кластеров это значение никогда не было иным, потому что для подавляющего большинства кластеров никогда не существовало ничего другого, на что можно было бы его установить. Параметр интересен тем, что он подразумевает: уровень хранения PostgreSQL в принципе подключаем (pluggable).

Продолжить чтение "Всё о GUC по порядку: default_table_access_method"

Всё о GUC по порядку: default_statistics_target

Автор: Christophe Pettus, All Your GUCs in a Row: default_statistics_target


default_statistics_target — один из наиболее рекомендуемых и наименее объясняемых параметров в PostgreSQL. Руководства по настройке говорят: «Увеличьте до 500 для хранилищ данных» с уверенностью, подобной Большой Советской Энциклопедии, и редко поясняют, что означает это число. Значение по умолчанию — 100, диапазон — от 1 до 10 000, контекст — user, и то, что это число на самом деле контролирует, — размер трёх структур, которые ANALYZE создаёт для каждого столбца. Давайте посмотрим на эти структуры.

Продолжить чтение "Всё о GUC по порядку: default_statistics_target"

Всё о GUC по порядку: семейство debug_*

Автор: Christophe Pettus, All Your GUCs in a Row: the debug_* family


Двенадцать параметров имеют общий префикс debug_, и этот префикс несёт смысловую нагрузку: это собственные средства разработки и контроля качества PostgreSQL, доступные в виде параметров времени выполнения, чтобы buildfarm и разработчики ядра могли тестировать различные участки кода без перекомпиляции. Павло Голуб (Pavlo Golub), писавший об одном из них, точно сформулировал правильную позицию: «Я никогда-никогда не прикоснусь к параметру времени выполнения с префиксом "debug" в своих производственных кластерах». В основном это правильно. Давайте разберём эти дюжину параметров по тому, что они на самом деле дают, потому что один-два из них тихо полезны, а остальные вы должны разглядывать с безопасного расстояния.

Продолжить чтение "Всё о GUC по порядку: семейство debug_*"

Когда Patroni молча удаляет ваши слоты репликации

Автор: Semab Tariq, When Patroni Silently Deletes Your Replication Slots


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

Продолжить чтение "Когда Patroni молча удаляет ваши слоты репликации"

Всё о GUC по порядку: deadlock_timeout

Автор: Christophe Pettus, All Your GUCs in a Row: deadlock_timeout


Название немного вводит в заблуждение. deadlock_timeout — это не время, в течение которого PostgreSQL терпит взаимоблокировку, прежде чем её разорвать, — взаимоблокировки прерываются в тот же миг, как только они обнаружены. Это время, которое процесс ожидает блокировку, прежде чем PostgreSQL вообще удосужится проверить наличие взаимоблокировки. Значение по умолчанию — 1 с, контекст — superuser, и разрыв между тем, что подразумевает название, и тем, что на самом деле делает параметр, и составляет суть данной статьи.


Продолжить чтение "Всё о GUC по порядку: deadlock_timeout"

Изучаем PostgreSQL вместе с Grant Fritchey: хранилище данных

Пересказ статьи Grant Fritchey. Learning PostgreSQL with Grant: Data Storage


Если вы размещаете свои базы данных на виртуальной машине (ВМ) или на каком-то большом железе, одним из наиболее узких мест, с которым вы, вероятно столкнетесь в кластерах PostgreSQL, является ввод/вывод. Когда ввод/вывод находится в центре потенциальных проблем производительности, очень важно понимать, как PostgreSQL управляет им. Я собираюсь начать прямо сейчас с того, как данные хранятся на диске. В следующей статье мы обсудим, как выполняется запись и чтение.

Прежде чем погрузиться в детали, я хочу затронуть пару вопросов, связанных с хранением данных в PostgreSQL. Во-первых, расширения. Некоторые из наиболее впечатляющих расширений напрямую связаны с хранением данных (глядя на TimeScale). Они могут изменить те основы, которые мы собираемся обсуждать здесь. Коли так, каждое из них требует отдельного обсуждения, чтобы понять, как они влияют на хранение в PostgreSQL.
Продолжить чтение "Изучаем PostgreSQL вместе с Grant Fritchey: хранилище данных"

Всё о GUC по порядку: DateStyle

Автор: Christophe Pettus, All Your GUCs in a Row: DateStyle


После бездны fsync — нечто благодушное. DateStyle управляет тем, как PostgreSQL выводит даты и как разрешает неоднозначный ввод дат, и единственное, что вам действительно нужно знать о нём: оставьте его в значении ISO, а всё остальное — интересные, но маловажные детали.

Продолжить чтение "Всё о GUC по порядку: DateStyle"

Всё о GUC по порядку: data_sync_retry

Автор: Christophe Pettus, All Your GUCs in a Row: data_sync_retry


data_sync_retry — это логический параметр, по умолчанию выключен (off), и его контекст — postmaster, так что для его изменения требуется перезапуск. Вы почти наверняка никогда его не измените. Он существует как видимый рубец от самого тревожного события, которое сообщество PostgreSQL когда-либо узнало о своих собственных допущениях относительно долговечности, и чтобы объяснить этот единственный параметр, нам придётся объяснить fsyncgate.

Продолжить чтение "Всё о GUC по порядку: data_sync_retry"

Всё о GUC по порядку: data_directory_mode

Автор: Christophe Pettus, All Your GUCs in a Row: data_directory


В чём смысл этого параметра? SHOW data_directory_mode сообщает права доступа Unix на каталог данных — 0700 или 0750 — и это всё, что он делает. Он доступен только для чтения; вы не можете его установить. И он сообщает факт, который ls -ld $PGDATA сообщил бы вам не хуже. Так зачем же он нужен как GUC?


Продолжить чтение "Всё о GUC по порядку: data_directory_mode"

Новости за 2026-06-27 - 2026-07-03

§ Изменения среди лидеров рейтинга

Рейтинг	Участник (решенные задачи)
20 Dmitriy Varenikov (251)

§ Лидеры недели

	Участник		w_sel	all_sel	select	dml	Всего	Рейтинг
Никольский И.Ю. (igoryun) 9 63 18 11 29 641
Сафронов П.А. (Paulus73) 7 150 14 0 14 135
Шибаев (saah) 9 50 14 0 14 1452
Gitinomagomedov (gmansur88) 5 64 11 1 12 725
fioletovaya (fioletovaya2) 2 138 9 0 9 144
Palela D. (Davitapalela) 4 4 6 20 26 4132
Скоков Б.С. (leks$$) 2 37 6 0 6 1325
Вареников Д.М. (Dmitriy Varen 2 230 5 0 5 20
P I.*. (IrinaPetr) 2 86 5 0 5 520
Odnokurtsev (AlFochino) 2 124 4 0 4 253
Vladimirovich V.B. (vladimirb 2 5 4 0 4 6573

Продолжить чтение "Новости за 2026-06-27 - 2026-07-03"

Всё о GUC по порядку: data_directory

Автор: Christophe Pettus, All Your GUCs in a Row: data_directory


data_directory указывает расположение каталога данных кластера — того самого каталога, который подразумевают под $PGDATA, содержащего base/, pg_wal/, global/ и всё остальное. Контекст — postmaster: параметр можно задать в postgresql.conf или в командной строке, но никогда во время работы. И, как и небольшое число других параметров, его нельзя установить через ALTER SYSTEM — по очевидной причине: ALTER SYSTEM записывает изменения в postgresql.auto.conf, который находится внутри каталога данных, то есть внутри того самого объекта, который вы пытаетесь указать. Нельзя использовать файл внутри «коробки», чтобы сообщить PostgreSQL, где находится эта коробка.


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

Продолжить чтение "Всё о GUC по порядку: data_directory"