18.13. Совместимость с разными версиями и платформами
18.13.1. Предыдущие версии Postgres Pro
- array_nulls(- boolean)
- Этот параметр определяет, будет ли при разборе вводимого массива распознаваться строка - NULLбез кавычек как элемент массива, равный NULL. Значение по умолчанию,- on, позволяет задавать NULL в качестве элементов вводимого массива. Однако до версии 8.2 PostgreSQL не поддерживал ввод элементов NULL в массивах, а воспринимал- NULLкак обычный элемент массива со строковым значением «NULL». Для обратной совместимости с приложениями, зависящими от старого поведения, эту переменную можно отключить (присвоив ей- off).- Заметьте, что массивы, содержащие NULL, можно создать, даже когда эта переменная имеет значение - off.
- backslash_quote(- enum)
- Этот параметр определяет, можно ли будет представить знак апострофа в строковой константе в виде - \'. В стандарте SQL определён другой, предпочитаемый вариант передачи апострофа, дублированием (- ''), но Postgres Pro исторически также принимал вариант- \'. Однако применение варианта- \'сопряжено с угрозами безопасности, так как в некоторых клиентских кодировках существуют многобайтные символы, последний байт которых численно равен 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.
- nul_byte_replacement_on_import(- string)
- Заменять нулевые байты ( - '\0') ASCII-символом с указанным десятичным кодом при загрузке данных с использованием команды- COPY FROM. Такая замена может потребоваться при загрузке данных из другой СУБД, так как Postgres Pro не принимает нулевые байты в данных. ASCII-символ замены должен отличаться от символов- QUOTEи- DELIMITER, применяемых при выполнении- COPY FROM; в противном случае результат может быть неожиданным. Значение по умолчанию —- '\0', то есть замена не производится.
- standard_conforming_strings(- boolean)
- Этот параметр определяет, будет ли обратная косая черта в обычных строковых константах ( - '...') восприниматься буквально, как того требует стандарт SQL. Начиная с версии PostgreSQL 9.1, он имеет значение- on(в предыдущих версиях значение по умолчанию было- off). Приложения могут выяснить, как обрабатываются строковые константы, проверив этот параметр. Наличие этого параметра может также быть признаком того, что поддерживается синтаксис спецпоследовательностей (- E'...'). Этот синтаксис (Подраздел 4.1.2.2) следует использовать, если приложению нужно, чтобы обратная косая воспринималась как спецсимвол.
- synchronize_seqscans(- boolean)
- Этот параметр включает синхронизацию обращений при последовательном сканировании больших таблиц, чтобы эти операции читали один блок примерно в одно и то же время, и, таким образом, нагрузка разделялась между ними. Когда он включён, сканирование может начаться в середине таблицы, чтобы синхронизироваться со сканированием, которое уже выполняется. По достижении конца таблицы сканирование «заворачивается» к началу и завершает обработку пропущенных строк. Это может привести к непредсказуемому изменению порядка строк, возвращаемых запросами, в которых отсутствует предложение - ORDER BY. Когда этот параметр выключен (имеет значение- off), реализуется поведение, принятое до версии 8.3, когда последовательное сканирование всегда начиналось с начала таблицы. Значение по умолчанию —- on.
18.13.2. Совместимость с разными платформами и клиентами
- transform_null_equals(- boolean)
- Когда этот параметр включён, проверки вида - выражение= NULL- NULL =) воспринимаются как- выражение- выражениеIS NULL- выражениедаёт значение NULL, и ложны в противном случае. Согласно спецификации SQL, сравнение- выражение= NULL- off).- Однако формы фильтров в Microsoft Access генерируют запросы, в которых проверка на значение NULL записывается как - выражение= NULL- выражение= NULL- Заметьте, что этот параметр влияет только на точную форму сравнения - = NULL, но не на другие операторы сравнения или выражения, результат которых может быть равнозначен сравнению с применением оператора равенства (например, конструкцию- IN). Поэтому данный параметр не может быть универсальной защитой от плохих приёмов программирования.- За сопутствующей информацией обратитесь к Разделу 9.2.