19.13. Совместимость версий и платформы#

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 = NULL (или NULL = expr) рассматриваются как expr IS NULL, то есть они возвращают true, если expr вычисляется в значение null, и false в противном случае. Правильное соответствие стандарту SQL поведение expr = NULL всегда возвращает null (неизвестно). Поэтому этот параметр по умолчанию установлен в off.

Однако, отфильтрованные формы в Microsoft Access генерируют запросы, которые, кажется, используют expr = NULL для проверки наличия пустых значений, поэтому, если вы используете этот интерфейс для доступа к базе данных, вам может потребоваться включить эту опцию. Поскольку выражения вида expr = NULL всегда возвращают пустое значение (с использованием стандартной интерпретации SQL), они не очень полезны и редко встречаются в обычных приложениях, поэтому эта опция практически не вредит. Однако новые пользователи часто путаются в семантике выражений, связанных с пустыми значениями, поэтому эта опция по умолчанию отключена.

Обратите внимание, что эта опция влияет только на точную форму = NULL, а не на другие операторы сравнения или другие выражения, которые вычислительно эквивалентны некоторому выражению, включающему оператор равенства (например, IN). Таким образом, эта опция не является общим решением для плохого программирования.

Ссылка на Раздел 9.2 содержит связанную информацию.