Совместимость версий и платформ
Эта страница переведена при помощи нейросети GigaChat.
Предыдущие версии PostgreSQL
array_nulls
(boolean
)
Этот параметр контролирует, распознает ли анализатор ввода массива нецитируемые NULL
как указывающие на пустой элемент массива. По умолчанию это on
, что позволяет вводить массивы значений, содержащие пустые значения. Однако версии PostgreSQL до 8.2 не поддерживали нулевые значения в массивах и поэтому рассматривали бы NULL
как указание на обычный элемент массива со значением строки «NULL». Для обеспечения обратной совместимости с приложениями, требующими старого поведения, эту переменную можно отключить off
.
Обратите внимание, что возможно создать массивы значений, содержащие нулевые значения даже тогда, когда эта переменная установлена на off
.
backslash_quote
(enum
)
Этот параметр управляет тем, может ли кавычка быть представлена \'
в строке литерала. Предпочтительный способ представления кавычки, соответствующий стандарту SQL, заключается в удвоении ее (''
) но PostgreSQL исторически также принимал \'
. Однако использование \'
создает риски безопасности, поскольку в некоторых кодировках символов клиента есть многобайтовые символы, последний байт которых численно эквивалентен символу ASCII \
. Если клиентский код выполняет экранирование неправильно, возможна атака типа SQL-инъекция. Этот риск можно предотвратить, заставив сервер отклонять запросы, в которых кавычка кажется экранированной обратным слешем. Допустимые значения для backslash_quote
- это on
(разрешить \'
всегда), off
(всегда отклонять) и safe_encoding
(разрешать только в том случае, если кодировка клиента не допускает ASCII \
внутри многобайтового символа). safe_encoding
является настройкой по умолчанию.
Обратите внимание, что в стандартной строке литерала \
просто означает \
в любом случае. Этот параметр влияет только на обработку не соответствующих стандарту литералов, включая синтаксис строки с экранированием (E'...'
).
escape_string_warning
(boolean
)
Когда включено, выдается предупреждение, если обратная косая черта (\
) появляется в обычной строке-литерале ('...'
синтаксиса) и standard_conforming_strings
выключено. По умолчанию установлено значение on
.
Приложения, которые хотят использовать обратную косую черту для экранирования, должны быть изменены для использования синтаксиса строки с экранированием (E'...'
), потому что теперь обычное поведение обычных строк заключается в том, чтобы рассматривать обратную косую черту как обычный символ, согласно стандарту SQL. Эта переменная может быть включена, чтобы помочь найти код, который необходимо изменить.
lo_compat_privileges
(boolean
)
В версиях PostgreSQL до 9.0 большие объекты не имели привилегий доступа и поэтому всегда были читаемыми и записываемыми всеми пользователями. Установка этой переменной на on
отключает новые проверки привилегий для совместимости с предыдущими выпусками. Значение по умолчанию равно off
. Только суперпользователи и пользователи с соответствующим привилегией SET
могут изменять эту настройку.
Установка этой переменной не отключает все проверки безопасности, связанные с большими объектами --- только те, для которых поведение по умолчанию изменилось в PostgreSQL версии 9.0.
quote_all_identifiers
(boolean
)
Когда база данных генерирует SQL, принудительно заключайте все идентификаторы в кавычки, даже если они не являются (в настоящее время) ключевыми словами. Это повлияет на вывод EXPLAIN
и результаты функций, таких как pg_get_viewdef
. См. также опцию --quote-all-identifiers
команды pg_dump и pg_dumpall.
standard_conforming_strings
(boolean
)
Этот параметр контролирует, будут ли обычные строковые литералы ('...'
) трактовать обратные слэши буквально, как указано в стандарте SQL. Начиная с версии PostgreSQL 9.1, значение по умолчанию равно on
(в предыдущих версиях было установлено значение off
). Приложения могут проверить этот параметр для определения того, как будут обрабатываться строковые литералы. Наличие этого параметра также можно рассматривать как указание на то, что поддерживается синтаксис строки эскейпинга (E'...'
. Синтаксис строки эскейпа (Раздел 4.1.2.2) следует использовать, если приложение желает, чтобы обратные слэши рассматривались как символы эскейпа.
synchronize_seqscans
(boolean
)
Это позволяет последовательным сканированиям больших таблиц синхронизироваться друг с другом, так что одновременные сканирования читают один и тот же блок примерно в одно и то же время и тем самым распределяют нагрузку ввода-вывода. Когда это разрешено, сканирование может начаться в середине таблицы, а затем «обернуть вокруг» конец, чтобы охватить все строки, таким образом синхронизируясь с активностью уже выполняемых сканирований. Это может привести к непредсказуемым изменениям порядка строк, возвращаемых запросами, которые не имеют ORDER BY
предложения. Установка этого параметра на off
гарантирует поведение до версии 8.3, при котором последовательное сканирование всегда начинается с начала таблицы. Значение по умолчанию - on
.
Совместимость платформы и клиента
transform_null_equals
(boolean
)
Когда включено, выражения вида expr
= NULL
(или NULL =
expr
) обрабатываются как expr
IS NULL
, то есть они возвращают истинное значение, если expr
оценивается как нулевое значение, и ложь в противном случае. Правильное поведение expr
= NULL
в соответствии со спецификацией SQL заключается в том, чтобы всегда возвращать пустое значение (неизвестно). Поэтому этот параметр по умолчанию равен off
.
Однако отфильтрованные формы в Microsoft Access генерируют запросы, которые, похоже, используют expr
= NULL
для проверки значений NULL, поэтому, если используется этот интерфейс для доступа к базе данных, возможно, потребуется включить эту опцию. Поскольку выражения вида expr
= NULL
всегда возвращают пустое значение (используя стандартную интерпретацию SQL), они не очень полезны и редко встречаются в обычных приложениях, так что эта опция практически безвредна. Но новые пользователи часто смущаются семантикой выражений, включающих значения NULL, поэтому эта опция отключена по умолчанию.
Обратите внимание, что эта опция влияет только на точную форму = NULL
, а не на другие операторы сравнения или другие выражения, которые вычислительно эквивалентны некоторому выражению, включающему оператор равенства (например, IN
). Таким образом, эта опция не является общим решением проблемы плохого программирования.
allow_alter_system
(boolean
)
Если для allow_alter_system
установлено значение off
, при выполнении команды ALTER SYSTEM
возвращается ошибка. Этот параметр можно задать только в postgresql.conf
или в командной строке при запуске сервера. Значение по умолчанию — on
.
Обратите внимание, что этот параметр не следует рассматривать как средство защиты. Он отключает только команду ALTER SYSTEM
, но не мешает суперпользователю изменять конфигурацию с помощью других команд SQL. Суперпользователю доступно множество способов выполнения команд оболочки на уровне операционной системы, поэтому он может изменять postgresql.auto.conf
независимо от значения этого параметра.
Отключение этого параметра предназначено для сред, где конфигурация PostgreSQL управляется внешними инструментами. В таких условиях суперпользователь, действующий из лучших побуждений, может по ошибке изменить конфигурацию с помощью ALTER SYSTEM
вместо использования внешнего инструмента. Это может привести к непредвиденным последствиям, например, внешний инструмент может позднее перезаписать изменение при обновлении конфигурации. Установка для этого параметра значения off
может помочь избежать подобных ошибок.
Этот параметр управляет только использованием команды ALTER SYSTEM
. Параметры в postgresql.auto.conf
применяются, даже если для allow_alter_system
установлено значение off
.