18.11. Параметры клиентских сеансов по умолчанию
18.11.1. Поведение команд
client_min_messages
(enum
)Управляет минимальным уровнем сообщений, посылаемых клиенту. Допустимые значения
DEBUG5
,DEBUG4
,DEBUG3
,DEBUG2
,DEBUG1
,LOG
,NOTICE
,WARNING
иERROR
. Каждый из перечисленных уровней включает все идущие после него. Чем дальше в этом списке уровень сообщения, тем меньше сообщений будет посылаться клиенту. По умолчанию используетсяNOTICE
. Обратите внимание, позицияLOG
здесь отличается от принятой в log_min_messages.Сообщения уровня
INFO
передаются клиенту всегда.search_path
(string
)Эта переменная определяет порядок, в котором будут просматриваться схемы при поиске объекта (таблицы, типа данных, функции и т. д.), к которому обращаются просто по имени, без указания схемы. Если объекты с одинаковым именем находятся в нескольких схемах, использоваться будет тот, что встретится первым при просмотре пути поиска. К объекту, который не относится к схемам, перечисленным в пути поиска, можно обратиться только по полному имени (с точкой), с указанием содержащей его схемы.
Значением
search_path
должен быть список имён схем через запятую. Если для имени, указанного в этом списке, не находится существующая схема, либо пользователь не имеет праваUSAGE
для схемы с этим именем, такое имя просто игнорируется.Если список содержит специальный элемент
$user
, вместо него подставляется схема с именем, возвращаемым функциейCURRENT_USER
, если такая схема существует и пользователь имеет правоUSAGE
для неё. (В противном случае элемент$user
игнорируется.)Схема системных каталогов,
pg_catalog
, просматривается всегда, независимо от того, указана она в пути или нет. Если она указана в пути, она просматривается в заданном порядке. Если жеpg_catalog
отсутствует в пути, эта схема будет просматриваться перед остальными элементами пути.Аналогично всегда просматривается схема временных таблиц текущего сеанса,
pg_temp_
, если она существует. Её можно включить в путь поиска, указав её псевдонимnnn
pg_temp
. Если она отсутствует в пути, она будет просматриваться первой (даже передpg_catalog
). Временная схема просматривается только при поиске отношений (таблиц, представлений, последовательностей и т. д.) и типов данных, но никогда при поиске функций и операторов.Когда объекты создаются без указания определённой целевой схемы, они помещаются в первую пригодную схему, указанную в
search_path
. Если путь поиска схем пуст, выдаётся ошибка.По умолчанию этот параметр имеет значение
"$user", public
. При таком значении поддерживается совместное использование базы данных (когда пользователи не имеют личных схем, все используют схемуpublic
), использование личных схем, а также комбинация обоих вариантов. Другие подходы можно реализовать, изменяя значение пути по умолчанию, либо глобально, либо индивидуально для каждого пользователя.Более подробно обработка схем описана в Разделе 5.9. В частности, стандартная конфигурация схем подходит только для баз данных с одним пользователем или с взаимно доверяющими пользователями.
Текущее действующее значение пути поиска можно получить, воспользовавшись SQL-функцией
current_schemas
(см. Раздел 9.26). Это значение может отличаться от значенияsearch_path
, так какcurrent_schemas
показывает, как были преобразованы элементы, фигурирующие вsearch_path
.row_security
(boolean
)Эта переменная определяет, должна ли выдаваться ошибка при применении политик защиты строк. Со значением
on
политики применяются в обычном режиме. Со значениемoff
запросы, ограничиваемые минимум одной политикой, будут выдавать ошибку. Значение по умолчанию —on
. Значениеoff
рекомендуется, когда ограничение видимости строк чревато некорректными результатами; например, pg_dump устанавливает это значение. Эта переменная не влияет на роли, которые обходят все политики защиты строк, а именно, на суперпользователей и роли с атрибутомBYPASSRLS
.Подробнее о политиках защиты строк можно узнать в описании CREATE POLICY.
default_table_access_method
(string
)Этот параметр задаёт табличный метод доступа по умолчанию, который будет использоваться при создании таблиц или материализованных представлений, если в команде
CREATE
не будет явно указан метод доступа, или при выполнении командыSELECT ... INTO
, в которой явно задать метод доступа нельзя. Значение по умолчанию —heap
.default_tablespace
(string
)Эта переменная устанавливает табличное пространство по умолчанию, в котором будут создаваться объекты (таблицы и индексы), когда в команде
CREATE
табличное пространство не указывается явно.Её значением может быть либо имя табличного пространства, либо пустая строка, подразумевающая использование табличного пространства по умолчанию в текущей базе данных. Если табличное пространство с заданным именем не существует, Postgres Pro будет автоматически использовать табличное пространство по умолчанию. Если используется не пространство по умолчанию, пользователь должен иметь право
CREATE
для него, иначе он не сможет создавать объекты.Эта переменная не используется для временных таблиц; для них задействуется temp_tablespaces.
Эта переменная также не используется при создании баз данных. По умолчанию, новая база данных наследует выбор табличного пространства от базы-шаблона, из которой она копируется.
Если на момент создания секционированной таблицы значение этого параметра отлично от пустого, оно задаёт табличное пространство для секционированной таблицы, в котором по умолчанию будут располагаться её секции, создаваемые в дальнейшем, даже если позже значение
default_tablespace
будет изменено.За дополнительными сведениями о табличных пространствах обратитесь к Разделу 21.6.
temp_tablespaces
(string
)Эта переменная задаёт табличные пространства, в которых будут создаваться временные объекты (временные таблицы и индексы временных таблиц), когда в команде
CREATE
табличное пространство не указывается явно. В этих табличных пространствах также создаются временные файлы для внутреннего использования, например, для сортировки больших наборов данных.Её значение содержит список имён табличных пространств. Когда этот список содержит больше одного имени, Postgres Pro выбирает из этого списка случайный элемент при создании каждого временного объекта; однако при создании последующих объектов внутри транзакции табличные пространства перебираются последовательно. Если в этом списке оказывается пустая строка, Postgres Pro будет автоматически использовать вместо этого элемента табличное пространство по умолчанию для текущей базы данных.
Когда
temp_tablespaces
задаётся интерактивно, указание несуществующего табличного пространства считается ошибкой, как и указание табличного пространства, для которого пользователь не имеет праваCREATE
. Однако при использовании значения, заданного ранее, несуществующие табличные пространства и пространства, для которых у пользователя нет праваCREATE
, просто игнорируются. В частности, это касается значения, заданного вpostgresql.conf
.По умолчанию значение этой переменной — пустая строка. С таким значением все временные объекты создаются в табличном пространстве по умолчанию, установленном для текущей базы данных.
См. также default_tablespace.
check_function_bodies
(boolean
)Этот параметр обычно включён. Выключение этого параметра (присваивание ему значения
off
) отключает проверку строки с телом функции, передаваемой команде CREATE FUNCTION. Отключение проверки позволяет избежать побочных эффектов процесса проверки и исключить ложные срабатывания из-за таких проблем, как ссылки вперёд. Этому параметру нужно присваивать значениеoff
перед загрузкой функций от лица других пользователей; pg_dump делает это автоматически.default_transaction_isolation
(enum
)Для каждой транзакции в SQL устанавливается уровень изоляции: «read uncommitted», «read committed», «repeatable read» или «serializable». Этот параметр задаёт уровень изоляции, который будет устанавливаться по умолчанию для новых транзакций. Значение этого параметра по умолчанию — «read committed».
Дополнительную информацию вы можете найти в Главе 13 и SET TRANSACTION.
default_transaction_read_only
(boolean
)SQL-транзакции в режиме «только чтение» не могут модифицировать не временные таблицы. Этот параметр определяет, будут ли новые транзакции по умолчанию иметь характеристику «только чтение». Значение этого параметра по умолчанию —
off
(допускается чтение и запись).За дополнительной информацией обратитесь к SET TRANSACTION.
default_transaction_deferrable
(boolean
)Транзакция, работающая на уровне изоляции
serializable
, в режиме «только чтение» может быть задержана, прежде чем будет разрешено её выполнение. Однако когда она начинает выполняться, для обеспечения сериализуемости не требуется никаких дополнительных усилий, так что коду сериализации ни при каких условиях не придётся прерывать её из-за параллельных изменений, поэтому это вполне подходит для длительных транзакций в режиме «только чтение».Этот параметр определяет, будет ли каждая новая транзакция по умолчанию откладываемой. В настоящее время его действие не распространяется на транзакции, для которых устанавливается режим «чтение/запись» или уровень изоляции ниже
serializable
. Значение по умолчанию —off
(выкл.).За дополнительной информацией обратитесь к SET TRANSACTION.
transaction_isolation
(enum
)Данный параметр отражает уровень изоляции текущей транзакции. В начале каждой транзакции ему присваивается текущее значение default_transaction_isolation. Последующая попытка изменить значение этого параметра равнозначна команде SET TRANSACTION.
transaction_read_only
(boolean
)Данный параметр отражает характеристику «только чтение» для текущей транзакции. В начале каждой транзакции ему присваивается текущее значение default_transaction_read_only. Последующая попытка изменить значение этого параметра равнозначна команде SET TRANSACTION.
transaction_deferrable
(boolean
)Данный параметр отражает характеристику «откладываемости» для текущей транзакции. В начале каждой транзакции ему присваивается текущее значение default_transaction_deferrable. Последующая попытка изменить значение этого параметра равнозначна команде SET TRANSACTION.
session_replication_role
(enum
)Управляет срабатыванием правил и триггеров, связанных с репликацией, в текущем сеансе. Изменение этой переменной требует наличия прав суперпользователя и приводит к сбросу всех ранее кешированных планов запросов. Она может принимать следующие значения:
origin
(значение по умолчанию),replica
иlocal
.Предполагается, что системы логической репликации будут устанавливать для него значение
replica
, применяя реплицированные изменения. В результате триггеры и правила (с конфигурацией по умолчанию) не будут срабатывать в репликах. Подробнее об этом говорится в описании предложенийENABLE TRIGGER
иENABLE RULE
команды ALTER TABLE.Внутри Postgres Pro значения
origin
иlocal
воспринимаются как равнозначные. Сторонние системы репликации могут различать их для своих внутренних целей, например, отмечать значениемlocal
сеанс, изменения в котором не должны реплицироваться.Так как внешние ключи реализованы посредством триггеров, присваивание этому параметру значения
replica
влечёт отключение всех проверок внешних ключей, что может привести к нарушению согласованности данных при некорректном использовании.statement_timeout
(integer
)Задаёт максимальную длительность выполнения оператора, при превышении которой оператор прерывается. Если
log_min_error_statement
имеет значениеERROR
или ниже, оператор, прерванный по тайм-ауту, будет также записан в журнал. Если это значение задаётся без единиц измерения, оно считается заданным в миллисекундах. При значении, равном нулю (по умолчанию), этот контроль длительности отключается.Длительность выполнения отсчитывается с момента получения команды сервером до завершения её выполнения. Если в одном сообщении простого запроса поступает несколько SQL-операторов, ограничение длительности действует на каждый независимо. (До 13 версии PostgreSQL обычно считалось, что этот тайм-аут должен относиться ко всей строке запроса.) В расширенном протоколе запросов таймер запускается с момента получения любого связанного с запросом сообщения (Parse, Bind, Execute, Describe), а останавливается на стадии обработки сообщений Execute или Sync.
Устанавливать значение
statement_timeout
вpostgresql.conf
не рекомендуется, так как это повлияет на все сеансы.lock_timeout
(integer
)Задаёт максимальную длительность ожидания любым оператором получения блокировки таблицы, индекса, строки или другого объекта базы данных. Если ожидание не закончилось за указанное время, оператор прерывается. Это ограничение действует на каждую попытку получения блокировки по отдельности и применяется как к явным запросам блокировки (например,
LOCK TABLE
илиSELECT FOR UPDATE
безNOWAIT
), так и к неявным. Если это значение задаётся без единиц измерения, оно считается заданным в миллисекундах. При значении, равном нулю (по умолчанию), этот контроль длительности отключается.В отличие от
statement_timeout
, этот тайм-аут может произойти только при ожидании блокировки. Заметьте, что при ненулевомstatement_timeout
бессмысленно задавать вlock_timeout
такое же или большее значение, так как тайм-аут оператора всегда будет происходить раньше. Еслиlog_min_error_statement
имеет значениеERROR
или ниже, оператор, прерванный по тайм-ауту, будет записан в журнал.Устанавливать значение
lock_timeout
вpostgresql.conf
не рекомендуется, так как это повлияет на все сеансы.idle_in_transaction_session_timeout
(integer
)Завершать любые сеансы, в которых открытая транзакция простаивает дольше заданного времени. Это позволяет освободить все блокировки сеанса и вновь задействовать слот подключения; также это позволяет очистить кортежи, видимые только для этой транзакции. Подробнее это описано в Разделе 23.1.
Если это значение задаётся без единиц измерения, оно считается заданным в миллисекундах. При значении, равном нулю (по умолчанию), этот контроль длительности отключается.
vacuum_freeze_table_age
(integer
)Задаёт максимальный возраст для поля
pg_class
.relfrozenxid
таблицы, при достижении которогоVACUUM
будет производить агрессивное сканирование. Агрессивное сканирование отличается от обычного сканированияVACUUM
тем, что затрагивает все страницы, которые могут содержать незамороженные XID или MXID, а не только те, что могут содержать мёртвые кортежи. Значение по умолчанию — 150 миллионов транзакций. Хотя пользователи могут задать любое значение от нуля до двух миллиардов, вVACUUM
введён внутренний предел для действующего значения, равный 95% от autovacuum_freeze_max_age, чтобы периодически запускаемая вручную командаVACUUM
имела шансы выполниться, прежде чем для таблицы будет запущена автоочистка для предотвращения зацикливания. За дополнительными сведениями обратитесь к Подразделу 23.1.5.vacuum_freeze_min_age
(integer
)Задаёт возраст для отсечки (в транзакциях), при достижении которого команда
VACUUM
должна замораживать версии строк при сканировании таблицы. Значение по умолчанию — 50 миллионов транзакций. Хотя пользователи могут задать любое значение от нуля до одного миллиарда, вVACUUM
введён внутренний предел для действующего значения, равный половине autovacuum_freeze_max_age, чтобы принудительная автоочистка выполнялась не слишком часто. За дополнительными сведениями обратитесь к Подразделу 23.1.5.vacuum_multixact_freeze_table_age
(integer
)Задаёт максимальный возраст для поля
pg_class
.relminmxid
таблицы, при достижении которого командаVACUUM
будет выполнять агрессивное сканирование. Агрессивное сканирование отличается от обычного сканированияVACUUM
тем, что затрагивает все страницы, которые могут содержать незамороженные XID или MXID, а не только те, что могут содержать мёртвые кортежи. Значение по умолчанию — 150 миллионов мультитранзакций. Хотя пользователи могут задать любое значение от нуля до двух миллиардов, вVACUUM
введён внутренний предел для действующего значения, равный 95% от autovacuum_multixact_freeze_max_age, чтобы периодически запускаемая вручную командаVACUUM
имела шансы выполниться, прежде чем для таблицы будет запущена автоочистка для предотвращения зацикливания. За дополнительными сведениями обратитесь к Подразделу 23.1.5.1.vacuum_multixact_freeze_min_age
(integer
)Задаёт возраст для отсечки (в мультитранзакциях), при достижении которого команда
VACUUM
должна заменять идентификаторы мультитранзакций новыми идентификаторами транзакций или мультитранзакций при сканировании таблицы. Значение по умолчанию — 5 миллионов мультитранзакций. Хотя пользователи могут задать любое значение от нуля до одного миллиарда, вVACUUM
введён внутренний предел для действующего значения, равный половине autovacuum_multixact_freeze_max_age, чтобы принудительная автоочистка не выполнялась слишком часто. За дополнительными сведениями обратитесь к Подразделу 23.1.5.1.bytea_output
(enum
)Задаёт выходной формат для значения типа
bytea
. Это может быть форматhex
(по умолчанию) илиescape
(традиционный формат Postgres Pro). За дополнительными сведениями обратитесь к Разделу 8.4. Входные значенияbytea
воспринимаются в обоих форматах, независимо от данного параметра.xmlbinary
(enum
)Задаёт способ кодирования двоичных данных в XML. Это кодирование применяется, например, когда значения
bytea
преобразуются в XML функциямиxmlelement
илиxmlforest
. Допустимые варианты, определённые в стандарте XML-схем:base64
иhex
. Значение по умолчанию —base64
. Чтобы узнать больше о функциях для работы с XML, обратитесь к Разделу 9.15.Конечный выбор в основном дело вкуса, ограничения могут накладываться только клиентскими приложениями. Оба метода поддерживают все возможные значения, хотя результат кодирования в base64 немного компактнее шестнадцатеричного вида (hex).
xmloption
(enum
)Задаёт подразумеваемый по умолчанию тип преобразования между XML и символьными строками (
DOCUMENT
илиCONTENT
). За описанием этого преобразования обратитесь к Разделу 8.13. Значение по умолчанию —CONTENT
(кроме него допускается значениеDOCUMENT
).Согласно стандарту SQL этот параметр должен задаваться командой
SET XML OPTION { DOCUMENT | CONTENT };
Этот синтаксис тоже поддерживается в Postgres Pro.
gin_pending_list_limit
(integer
)Задаёт максимальный размер очереди записей GIN, которая используется, когда включён режим
fastupdate
. Если размер очереди превышает заданный предел, записи из неё массово переносятся в основную структуру данных индекса GIN, и очередь очищается. Если это значение задаётся без единиц измерения, оно считается заданным в килобайтах. Размер по умолчанию — четыре мегабайта (4MB
). Этот предел можно переопределить для отдельных индексов GIN, изменив их параметры хранения. За дополнительными сведениями обратитесь к Подразделу 62.4.1 и Разделу 62.5.restrict_nonsystem_relation_kind
(string
)Эта переменная определяет вид отношения, к которому ограничивается доступ. Она содержит список видов отношений, разделённый запятыми. В настоящее время поддерживаются отношения видов
view
иforeign-table
.
18.11.2. Языковая среда и форматы
DateStyle
(string
)Задаёт формат вывода значений даты и времени, а также правила интерпретации неоднозначных значений даты. По историческим причинам эта переменная содержит два независимых компонента: указание выходного формата (
ISO
,Postgres
,SQL
иGerman
) и указание порядка год(Y)/месяц(M)/день(D) для вводимых и выводимых значений (DMY
,MDY
илиYMD
). Эти два компонента могут задаваться по отдельности или вместе. Ключевые словаEuro
иEuropean
являются синонимамиDMY
, а ключевые словаUS
,NonEuro
иNonEuropean
— синонимыMDY
. За дополнительными сведениями обратитесь к Разделу 8.5. Встроенное значение по умолчанию —ISO, MDY
, но initdb при инициализации записывает в файл конфигурации значение, соответствующее выбранной локалиlc_time
.IntervalStyle
(enum
)Задаёт формат вывода для значений-интервалов. В формате
sql_standard
интервал выводится в виде, установленном стандартом SQL. В форматеpostgres
(выбранном по умолчанию) интервал выводится в виде, применявшемся в PostgreSQL до версии 8.4, когда параметр DateStyle имел значениеISO
. В форматеpostgres_verbose
интервал выводится в виде, применявшемся в PostgreSQL до версии 8.4, когда параметрDateStyle
имел значение неISO
. В форматеiso_8601
выводимая строка будет соответствовать «формату с кодами», определённому в разделе 4.4.3.2 стандарта ISO 8601.На интерпретацию неоднозначных вводимых данных также влияет параметр
IntervalStyle
. За дополнительными сведениями обратитесь к Подразделу 8.5.4.TimeZone
(string
)Задаёт часовой пояс для вывода и ввода значений времени. Встроенное значение по умолчанию —
GMT
, но обычно оно переопределяется вpostgresql.conf
; initdb устанавливает в нём значение, соответствующее системному окружению. За дополнительными сведениями обратитесь к Подразделу 8.5.3.timezone_abbreviations
(string
)Задаёт набор сокращений часовых поясов, которые будут приниматься сервером во вводимых значениях даты и времени. Значение по умолчанию —
'Default'
, которое представляет набор основных сокращений, принятых в мире; допускаются также значения'Australia'
и'India'
, кроме них для конкретной инсталляции можно определить и другие наборы. За дополнительными сведениями обратитесь к Разделу B.4.extra_float_digits
(integer
)Этот параметр корректирует число цифр в текстовом представлении чисел с плавающей точкой, включая значения
float4
,float8
и геометрических типов.Если его значение равно 1 (по умолчанию) или больше, числа с плавающей точкой выводятся в кратчайшем точном виде; см. Подраздел 8.1.3. Выводимое фактически количество цифр зависит от выводимого числа, а не от значения данного параметра. Для значений
float8
может потребоваться максимум 17 цифр, а для значенийfloat4
— максимум 9. Данное представление является и быстрым, и точным, так как оно позволяет при правильном прочтении в точности восстановить двоичное число с плавающей точкой. Ради исторической совместимости этот параметр принимает значения до 3 включительно.Если его значение равно нулю или отрицательно, выводимое число округляется до заданной десятичной точности. Точность в данном случае определяется обычным количеством цифр для типа (
FLT_DIG
илиDBL_DIG
), уменьшенным на значение этого параметра. (Например, со значением -1 числа типаfloat4
будут выводиться округлёнными до 5 значащих цифр, а числа типаfloat8
— до 14). Преобразование в такой вид выполняется медленнее и не сохраняет все биты двоичного числа с плавающей точкой, но он может быть более удобным для человека.Примечание
Поведение этого параметра, а также его значение по умолчанию, изменилось в Postgres Pro 12; подробнее это описывается в Подразделе 8.1.3.
client_encoding
(string
)Задаёт кодировку (набор символов) на стороне клиента. По умолчанию выбирается кодировка базы данных. Наборы символов, которые поддерживает сервер Postgres Pro, перечислены в Подразделе 22.3.1.
lc_messages
(string
)Устанавливает язык выводимых сообщений. Набор допустимых значений зависит от системы; за дополнительными сведениями обратитесь к Разделу 22.1. Если эта переменная определена как пустая строка (по умолчанию), то действующее значение получается из среды выполнения сервера, в зависимости от системы.
В некоторых системах такая категория локали отсутствует, так что даже если задать значение этой переменной, действовать оно не будет. Также может оказаться, что переведённые сообщения для запрошенного языка отсутствуют. В этих случаях вы по-прежнему будете получать сообщения на английском языке.
Изменить этот параметр могут только суперпользователи. Он влияет и на сообщения, которые сервер передаёт клиентам, и на те, что записываются в журнал, поэтому неподходящее значение может сделать серверные журналы нечитаемыми.
lc_monetary
(string
)Устанавливает локаль для форматирования денежных сумм, например с использованием функций семейства
to_char
. Набор допустимых значений зависит от системы; за дополнительными сведениями обратитесь к Разделу 22.1. Если эта переменная определена как пустая строка (по умолчанию), то действующее значение получается из среды выполнения сервера, в зависимости от системы.lc_numeric
(string
)Устанавливает локаль для форматирования чисел, например с использованием функций семейства
to_char
. Набор допустимых значений зависит от системы; за дополнительными сведениями обратитесь к Разделу 22.1. Если эта переменная определена как пустая строка (по умолчанию), то действующее значение получается из среды выполнения сервера, в зависимости от системы.lc_time
(string
)Устанавливает локаль для форматирования даты и времени, например с использованием функций семейства
to_char
. Набор допустимых значений зависит от системы; за дополнительными сведениями обратитесь к Разделу 22.1. Если эта переменная определена как пустая строка (по умолчанию), то действующее значение получается из среды выполнения сервера, в зависимости от системы.default_text_search_config
(string
)Выбирает конфигурацию текстового поиска для тех функций текстового поиска, которым не передаётся аргумент, явно указывающий конфигурацию. За дополнительной информацией обратитесь к Главе 12. Встроенное значение по умолчанию —
pg_catalog.simple
, но initdb при инициализации записывает в файл конфигурации сервера значение, соответствующее выбранной локалиlc_ctype
, если удастся найти такую конфигурацию текстового поиска.
18.11.3. Предзагрузка разделяемых библиотек
Для настройки предварительной загрузки разделяемых библиотек в память сервера, в целях подключения дополнительной функциональности или увеличения быстродействия, предназначены несколько параметров. Значения этих параметров задаются однотипно, например, со значением '$libdir/mylib'
в память будет загружена mylib.so
(или в некоторых ОС, mylib.sl
) из стандартного каталога библиотек данной инсталляции сервера. Различаются эти параметры тем, когда они вступают в силу и какие права требуются для их изменения.
Таким же образом можно загрузить библиотеки на процедурных языках Postgres Pro, обычно в виде '$libdir/plXXX'
, где XXX
— имя языка: pgsql
, perl
, tcl
или python
.
Этим способом можно загрузить только разделяемые библиотеки, предназначенные специально для использования с Postgres Pro. Postgres Pro при загрузке библиотеки проверяет наличие «отличительного блока» для гарантии совместимости. Поэтому загрузить библиотеки не для Postgres Pro таким образом нельзя. Для этого вы можете воспользоваться средствами операционной системы, например, переменной окружения LD_PRELOAD
.
В общем случае, чтобы узнать, какой способ рекомендуется для загрузки модуля, следует обратиться к документации этого модуля.
local_preload_libraries
(string
)В этом параметре задаются одна или несколько разделяемых библиотек, которые будут загружаться при установлении соединения. Он содержит разделённый запятыми список имён библиотек, и каждое имя в нём должно восприниматься командой LOAD. Пробельные символы между именами игнорируются; если в имя нужно включить пробелы или запятые, заключите его в двойные кавычки. Заданное значение параметра действует только в начале соединения, так что последующие изменения ни на что не влияют. Если указанная в нём библиотека не найдена, установить подключение не удастся.
Этот параметр разрешено устанавливать всем пользователям. Поэтому библиотеки, которые так можно загрузить, ограничиваются теми, что находятся в подкаталоге
plugins
стандартного каталога библиотек установленного сервера. (Ответственность за то, чтобы в этом подкаталоге находились только «безопасные» библиотеки, лежит на администраторе.) Вlocal_preload_libraries
этот каталог можно задать явно (например, так:$libdir/plugins/mylib
), либо просто указать имя библиотеки —mylib
(оно будет воспринято как$libdir/plugins/mylib
).Данный механизм предназначен для того, чтобы непривилегированные пользователи могли загружать отладочные или профилирующие библиотеки в избранных сеансах, обходясь без явной команды
LOAD
. Для такого применения этот параметр обычно устанавливается в переменной окруженияPGOPTIONS
на клиенте или с помощью командыALTER ROLE SET
.Обычно этот параметр не следует использовать, если только модуль не предназначен специально для такой загрузки обычными пользователями. Предпочтительная альтернатива ему — session_preload_libraries.
session_preload_libraries
(string
)В этом параметре задаются одна или несколько разделяемых библиотек, которые будут загружаться при установлении соединения. Он содержит разделённый запятыми список имён библиотек, и каждое имя в нём должно восприниматься командой LOAD. Пробельные символы между именами игнорируются; если в имя нужно включить пробелы или запятые, заключите его в двойные кавычки. Заданное значение параметра действует только в начале соединения, так что последующие изменения ни на что не влияют. Если указанная в нём библиотека не найдена, установить подключение не удастся. Изменить его могут только суперпользователи.
Данный параметр предназначен для загрузки отладочных или профилирующих библиотек в избранных сеансах, без явного выполнения команды
LOAD
. Например, можно загрузить модуль auto_explain во всех сеансах пользователя с заданным именем, установив этот параметр командойALTER ROLE SET
. Кроме того, этот параметр можно изменить без перезапуска сервера (хотя изменения вступают в силу только при запуске нового сеанса), так что таким образом проще подгружать новые модули, даже если это нужно сделать для всех сеансов.В отличие от shared_preload_libraries, этот вариант загрузки библиотеки не даёт большого выигрыша в скорости по сравнению с вариантом загрузки при первом использовании. Однако он оказывается выигрышным, когда используется пул соединений.
shared_preload_libraries
(string
)В этом параметре задаются одна или несколько разделяемых библиотек, которые будут загружаться при запуске сервера. Он содержит разделённый запятыми список имён библиотек, и каждое имя в нём должно восприниматься командой LOAD. Пробельные символы между именами игнорируются; если в имя нужно включить пробелы или запятые, заключите его в двойные кавычки. Этот параметр можно задать только при запуске сервера. Если указанная в нём библиотека не будет найдена, сервер не запустится.
Некоторые библиотеки при загрузке должны выполнять операции, которые могут иметь место только при запуске главного процесса, например, выделять разделяемую память, резервировать легковесные блокировки или запускать фоновые рабочие процессы. Такие библиотеки должны загружаться при запуске сервера посредством этого параметра. За подробностями обратитесь к документации библиотек.
Также можно предварительно загрузить и другие библиотеки. Предварительная загрузка позволяет избавиться от задержки, возникающей при первом использовании библиотеки. Однако при этом может несколько увеличиться время запуска каждого нового процесса, даже если он не будет использовать эту библиотеку. Поэтому применять этот параметр рекомендуется только для библиотек, которые будут использоваться большинством сеансов. Кроме того, при изменении этого параметра необходимо перезапускать сервер, так что этот вариант не подходит, например, для краткосрочных задач отладки. В таких случаях используйте вместо него session_preload_libraries.
Примечание
В системе Windows загрузка библиотек при запуске сервера не сокращает время запуска каждого нового серверного процесса; каждый процесс будет заново загружать все библиотеки. Однако параметр
shared_preload_libraries
всё же может быть полезен в Windows для загрузки библиотек, которые должны выполнять некоторые операции при запуске главного процесса.jit_provider
(string
)В этой переменной указывается библиотека провайдера JIT, которая будет использоваться (см. Подраздел 30.4.2). Значение по умолчанию —
llvmjit
. Этот параметр можно задать только при запуске сервера.Если указывается несуществующая библиотека, JIT не будет работать, но это не считается ошибкой. Такое поведение позволяет устанавливать поддержку JIT отдельно от основного пакета Postgres Pro.
18.11.4. Другие параметры по умолчанию
dynamic_library_path
(string
)Когда требуется открыть динамически загружаемый модуль и его имя, заданное в команде
CREATE FUNCTION
илиLOAD
не содержит имён каталогов (т. е. в этом имени нет косой черты), система будет искать запрошенный файл в данном пути.Значением параметра
dynamic_library_path
должен быть список абсолютных путей, разделённых двоеточием (или точкой с запятой в Windows). Если элемент в этом списке начинается со специальной строки$libdir
, вместо неё подставляется заданный при компиляции путь каталога библиотек Postgres Pro; в этот каталог устанавливаются модули, поставляемые в составе стандартного дистрибутива Postgres Pro. (Чтобы узнать имя этого каталога, можно выполнитьpg_config --pkglibdir
.) Например:dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
Или в среде Windows:
dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
Значение по умолчанию этого параметра —
'$libdir'
. Если его значение — пустая строка, автоматический поиск по заданному пути отключается.Суперпользователи могут изменить этот параметр в процессе работы сервера, но такое изменение будет действовать только до завершения клиентского соединения, так что этот вариант следует оставить для целей разработки. Для других целей этот параметр рекомендуется устанавливать в файле конфигурации
postgresql.conf
.gin_fuzzy_search_limit
(integer
)Задаёт мягкий верхний лимит для размера набора, возвращаемого при сканировании индексов GIN. За дополнительными сведениями обратитесь к Разделу 62.5.