19.13. Совместимость версий и платформы#
19.13. Совместимость версий и платформы #
19.13.1. Предыдущие версии PostgreSQL #
array_nulls
(boolean
) #Это управляет тем, распознает ли парсер ввода массива
NULL
без кавычек как указание нулевого элемента массива. По умолчанию это включено (on
), что позволяет вводить массивы, содержащие нулевые значения. Однако в версиях PostgreSQL до 8.2 нулевые значения в массивах не поддерживались, и поэтомуNULL
рассматривался как обычный элемент массива со строковым значением “NULL”. Для обратной совместимости с приложениями, требующими старого поведения, эту переменную можно отключить (off
).Обратите внимание, что возможно создание массивов, содержащих значения null, даже когда эта переменная установлена в
off
.backslash_quote
(enum
) #Это управляет тем, может ли кавычка быть представлена как
\'
в строковом литерале. Предпочтительным, стандартным способом представления кавычки является удвоение ее (''
), но Tantor SE исторически также принимал\'
. Однако использование\'
создает угрозы безопасности, потому что в некоторых клиентских кодировках набора символов есть многобайтовые символы, в которых последний байт численно эквивалентен 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
) #В релизах Tantor SE до 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
.
19.13.2. Совместимость платформы и клиента #
transform_null_equals
(boolean
) #Когда включено, выражения вида
(илиexpr
= NULLNULL =
) рассматриваются какexpr
, то есть они возвращают true, еслиexpr
IS NULLexpr
вычисляется в значение null, и false в противном случае. Правильное соответствие стандарту SQL поведение
всегда возвращает null (неизвестно). Поэтому этот параметр по умолчанию установлен вexpr
= NULLoff
.Однако, отфильтрованные формы в Microsoft Access генерируют запросы, которые, кажется, используют
для проверки наличия пустых значений, поэтому, если вы используете этот интерфейс для доступа к базе данных, вам может потребоваться включить эту опцию. Поскольку выражения видаexpr
= NULL
всегда возвращают пустое значение (с использованием стандартной интерпретации SQL), они не очень полезны и редко встречаются в обычных приложениях, поэтому эта опция практически не вредит. Однако новые пользователи часто путаются в семантике выражений, связанных с пустыми значениями, поэтому эта опция по умолчанию отключена.expr
= NULLОбратите внимание, что эта опция влияет только на точную форму
= NULL
, а не на другие операторы сравнения или другие выражения, которые вычислительно эквивалентны некоторому выражению, включающему оператор равенства (например,IN
). Таким образом, эта опция не является общим решением для плохого программирования.Ссылка на Раздел 9.2 содержит связанную информацию.