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. СовмеÑÑимоÑÑÑ Ñ ÑазнÑми плаÑÑоÑмами и клиенÑами #
unicode_nul_character_replacement_in_jsonb(integer) #ÐаменÑÑÑ
'\u0000'заданнÑм Ñимволом Unicode пÑи вÑзове ÑÑнкÑии, обÑабаÑÑваÑÑей JSONB, поÑколÑÐºÑ ÑÑнкÑииjsonb*не пÑинимаÑÑ'\u0000'. ÐамеÑаÑÑий Ñимвол задаÑÑÑÑ ÑиÑловÑм знаÑением Ð¾Ñ 0 до 65535. ÐнаÑение ÑÑого паÑамеÑÑа конÑигÑÑаÑии Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¾ в лÑбой Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð»ÑбÑм полÑзоваÑелем. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ñавно0, Ñо еÑÑÑ Ð·Ð°Ð¼ÐµÐ½Ð° не пÑоиÑÑ Ð¾Ð´Ð¸Ñ.transform_null_equals(boolean) #Ðогда ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÐºÐ»ÑÑÑн, пÑовеÑки вида
(иливÑÑажение= NULLNULL =) воÑпÑинимаÑÑÑÑ ÐºÐ°ÐºÐ²ÑÑажение, Ñо еÑÑÑ Ð¾Ð½Ð¸ иÑÑиннÑ, еÑливÑÑажениеIS NULLвÑÑажениедаÑÑ Ð·Ð½Ð°Ñение NULL, и Ð»Ð¾Ð¶Ð½Ñ Ð² пÑоÑивном ÑлÑÑае. СоглаÑно ÑпеÑиÑикаÑии SQL, ÑÑавнениедолжно вÑегда возвÑаÑаÑÑ NULL (неизвеÑÑное знаÑение). ÐоÑÑÐ¾Ð¼Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÑклÑÑен (ÑавенвÑÑажение= NULLoff).Ðднако ÑоÑÐ¼Ñ ÑилÑÑÑов в Microsoft Access генеÑиÑÑÑÑ Ð·Ð°Ð¿ÑоÑÑ, в коÑоÑÑÑ Ð¿ÑовеÑка на знаÑение NULL запиÑÑваеÑÑÑ ÐºÐ°Ðº
, Ñак ÑÑо еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÑÑÐ¾Ñ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº базе даннÑÑ , Ð¸Ð¼ÐµÐµÑ ÑмÑÑл вклÑÑиÑÑ Ð´Ð°Ð½Ð½Ñй паÑамеÑÑ. Так как пÑовеÑки видавÑÑажение= NULLвÑегда возвÑаÑаÑÑ Ð·Ð½Ð°Ñение NULL (ÑледÑÑ Ð¿Ñавилам ÑÑандаÑÑа SQL), они не оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð¸ не Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑÑÑеÑаÑÑÑÑ Ð² обÑÑнÑÑ Ð¿ÑиложениÑÑ , Ñак ÑÑо на пÑакÑике Ð¾Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ ÑÑого паÑамеÑÑа не бÑÐ´ÐµÑ Ð±Ð¾Ð»ÑÑого вÑеда. Ðднако наÑинаÑÑие полÑзоваÑели ÑаÑÑо пÑÑаÑÑÑÑ Ð² ÑеманÑике вÑÑажений Ñо знаÑениÑми NULL, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÑклÑÑен.вÑÑажение= NULLÐамеÑÑÑе, ÑÑо ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²Ð»Ð¸ÑÐµÑ ÑолÑко на ÑоÑнÑÑ ÑоÑÐ¼Ñ ÑÑавнениÑ
= NULL, но не на дÑÑгие опеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ вÑÑажениÑ, ÑезÑлÑÑÐ°Ñ ÐºÐ¾ÑоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑавнознаÑен ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð¿Ñименением опеÑаÑоÑа ÑавенÑÑва (напÑимеÑ, конÑÑÑÑкÑиÑIN). ÐоÑÑÐ¾Ð¼Ñ Ð´Ð°Ð½Ð½Ñй паÑамеÑÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑнивеÑÑалÑной заÑиÑой Ð¾Ñ Ð¿Ð»Ð¾Ñ Ð¸Ñ Ð¿ÑиÑмов пÑогÑаммиÑованиÑ.Ðа ÑопÑÑÑÑвÑÑÑей инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº РазделÑ 9.2.