22.2. ÐоддеÑжка пÑавил ÑоÑÑиÑовки
ÐÑавила ÑоÑÑиÑовки позволÑÑÑ ÑÑÑанавливаÑÑ Ð¿Ð¾ÑÑдок ÑоÑÑиÑовки и оÑобенноÑÑи клаÑÑиÑикаÑии Ñимволов в оÑделÑнÑÑ
ÑÑолбÑаÑ
или даже пÑи вÑполнении оÑделÑнÑÑ
опеÑаÑий. ÐÑо ÑмÑгÑÐ°ÐµÑ Ð¿Ð¾ÑледÑÑÐ²Ð¸Ñ Ñого, ÑÑо паÑамеÑÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
LC_COLLATE и LC_CTYPE невозможно измениÑÑ Ð¿Ð¾Ñле ÐµÑ ÑозданиÑ.
22.2.1. ÐÑновнÑе понÑÑиÑ
ÐонÑепÑÑалÑно, каждое вÑÑажение Ñ Ñипом даннÑÑ
, к коÑоÑÐ¾Ð¼Ñ Ð¿ÑименÑеÑÑÑ ÑоÑÑиÑовка, Ð¸Ð¼ÐµÐµÑ Ð¿Ñавила ÑоÑÑиÑовки. (ÐÑÑÑоеннÑми ÑоÑÑиÑÑемÑми Ñипами даннÑÑ
ÑвлÑÑÑÑÑ text, varchar, и char. ТипÑ, опÑеделÑемÑе в базе полÑзоваÑелем, могÑÑ Ñакже бÑÑÑ Ð¾ÑмеÑÐµÐ½Ñ ÐºÐ°Ðº ÑоÑÑиÑÑемÑе, и, конеÑно, домен на оÑнове ÑоÑÑиÑÑемого Ñипа даннÑÑ
ÑвлÑеÑÑÑ ÑоÑÑиÑÑемÑм.) ÐÑли вÑÑажение ÑодеÑÐ¶Ð¸Ñ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÑолбеÑ, пÑавила ÑоÑÑиÑовки вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑÑÑ Ð¿Ñавилами ÑоÑÑиÑовки ÑÑолбÑа. ÐÑли вÑÑажение â конÑÑанÑа, пÑавилами ÑоÑÑиÑовки ÑвлÑÑÑÑÑ ÑÑандаÑÑнÑе пÑавила Ð´Ð»Ñ Ñипа даннÑÑ
конÑÑанÑÑ. ÐÑавила ÑоÑÑиÑовки более ÑложнÑÑ
вÑÑажений ÑвлÑÑÑÑÑ Ð¿Ñоизводной Ð¾Ñ Ð¿Ñавил ÑоÑÑиÑовки вÑ
одÑÑиÑ
в него ÑаÑÑей, как опиÑано ниже.
ÐÑавилами ÑоÑÑиÑовки вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿Ñавила ÑоÑÑиÑовки «по ÑмолÑаниÑ», ÑÑо ознаÑÐ°ÐµÑ Ð¸ÑполÑзование паÑамеÑÑов локали, ÑÑÑановленнÑÑ Ð´Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . Также возможно, ÑÑо пÑавила ÑоÑÑиÑовки вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð½Ðµ опÑеделиÑÑÑÑ. Ð ÑÐ°ÐºÐ¸Ñ ÑлÑÑаÑÑ Ð¾Ð¿ÐµÑаÑии ÑпоÑÑдоÑÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¸ дÑÑгие опеÑаÑии, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñ Ð¿Ñавила ÑоÑÑиÑовки, завеÑÑаÑÑÑ Ñ Ð¾Ñибкой.
Ðогда база даннÑÑ
должна вÑполниÑÑ ÑпоÑÑдоÑивание или клаÑÑиÑикаÑÐ¸Ñ Ñимволов, она иÑполÑзÑÐµÑ Ð¿Ñавила ÑоÑÑиÑовки вÑполнÑемого вÑÑажениÑ. ÐÑо пÑоиÑÑ
одиÑ, к пÑимеÑÑ, Ñ Ð¿ÑедложениÑми ORDER BY и Ñакими вÑзовами ÑÑнкÑий или опеÑаÑоÑов как <. ÐÑавила ÑоÑÑиÑовки, коÑоÑÑе пÑименÑÑÑÑÑ Ð² пÑедложении ORDER BY, ÑÑо пÑоÑÑо пÑавила клÑÑа ÑоÑÑиÑовки. ÐÑавила ÑоÑÑиÑовки, пÑименÑемÑе к вÑÐ·Ð¾Ð²Ñ ÑÑнкÑии или опеÑаÑоÑа, опÑеделÑÑÑÑÑ Ð¸Ñ
паÑамеÑÑами, как опиÑано ниже. Рдополнение к опеÑаÑиÑм ÑÑавнениÑ, пÑавила ÑоÑÑиÑовки ÑÑиÑÑваÑÑÑÑ ÑÑнкÑиÑми, пÑеобÑазÑÑÑими ÑегиÑÑÑ Ñимволов, Ñакими как lower, upper, и initcap; опеÑаÑоÑами поиÑка по ÑаблонÑ; и ÑÑнкÑией to_char и ÑвÑзаннÑми Ñ Ð½ÐµÐ¹.
ÐÑи вÑзове ÑÑнкÑии или опеÑаÑоÑа пÑавило ÑоÑÑиÑовки опÑеделÑеÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ñого, какие пÑавила Ð·Ð°Ð´Ð°Ð½Ñ Ð´Ð»Ñ Ð°ÑгÑменÑов во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ опеÑаÑии. ÐÑли ÑезÑлÑÑаÑом вÑзова ÑÑнкÑии или опеÑаÑоÑа ÑвлÑеÑÑÑ ÑоÑÑиÑÑемÑй Ñип даннÑÑ , пÑавила ÑоÑÑиÑовки Ñакже иÑполÑзÑÑÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ ÑазбоÑа как опÑеделÑемÑе пÑавила ÑоÑÑиÑовки ÑÑнкÑии или вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа, когда Ð´Ð»Ñ Ð²Ð½ÐµÑнего вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑебÑеÑÑÑ Ð·Ð½Ð°Ð½Ð¸Ðµ пÑавил ÑоÑÑиÑовки.
ÐпÑеделение пÑавил ÑоÑÑиÑовки вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑвнÑм или ÑвнÑм. ÐÑо оÑлиÑие влиÑÐµÑ Ð½Ð° Ñо, как комбиниÑÑÑÑÑÑ Ð¿Ñавила ÑоÑÑиÑовки, когда неÑколÑко ÑазнÑÑ
пÑавил поÑвлÑÑÑÑÑ Ð² вÑÑажении. Явное опÑеделение пÑавил ÑоÑÑиÑовки возникаеÑ, когда иÑполÑзÑеÑÑÑ Ð¿Ñедложение COLLATE; вÑе пÑоÑие ваÑианÑÑ ÑвлÑÑÑÑÑ Ð½ÐµÑвнÑми. Ðогда необÑ
одимо обÑединиÑÑ Ð½ÐµÑколÑко пÑавил ÑоÑÑиÑовки, напÑимеÑ, в вÑзове ÑÑнкÑии, иÑполÑзÑÑÑÑÑ ÑледÑÑÑие пÑавила:
ÐÑли Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ из вÑÑажений-аÑгÑменÑов пÑавило ÑоÑÑиÑовки опÑеделено Ñвно, Ñо и Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ Ð°ÑгÑменÑов Ñвно задаваемое пÑавило должно бÑÑÑ Ñем же, инаÑе Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ð¾Ñибка. Ð ÑлÑÑае пÑиÑÑÑÑÑÐ²Ð¸Ñ Ñвного опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ñавила ÑоÑÑиÑовки, оно ÑÑановиÑÑÑ ÑезÑлÑÑиÑÑÑÑим Ð´Ð»Ñ Ð²Ñей опеÑаÑии.
РпÑоÑивном ÑлÑÑае вÑе Ð²Ñ Ð¾Ð´Ð½Ñе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð½Ð¸ и Ñе же неÑвно опÑеделÑемÑе пÑавила ÑоÑÑиÑовки или пÑавила ÑоÑÑиÑовки по ÑмолÑаниÑ. ÐÑли пÑиÑÑÑÑÑвÑÑÑ ÐºÐ°ÐºÐ¸Ðµ- либо пÑавила ÑоÑÑиÑовки, оÑлиÑнÑе Ð¾Ñ Ð·Ð°Ð´Ð°Ð½Ð½ÑÑ Ð¿Ð¾ ÑмолÑаниÑ, полÑÑаем ÑезÑлÑÑÐ°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñии пÑавил ÑоÑÑиÑовки. ÐнаÑе ÑезÑлÑÑаÑом ÑÑанÑÑ Ð¿Ñавила ÑоÑÑиÑовки, заданнÑе по ÑмолÑаниÑ.
ÐÑли ÑÑеди Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð²ÑÑажений еÑÑÑ ÐºÐ¾Ð½ÑликÑÑÑÑие неÑвнÑе пÑавила ÑоÑÑиÑовки, оÑлиÑнÑе Ð¾Ñ Ð·Ð°Ð´Ð°Ð½Ð½ÑÑ Ð¿Ð¾ ÑмолÑаниÑ, Ñогда комбинаÑÐ¸Ñ ÑаÑÑмаÑÑиваеÑÑÑ ÐºÐ°Ðº имеÑÑÐ°Ñ Ð½ÐµÐ¾Ð¿ÑеделÑннÑе пÑавила ÑоÑÑиÑовки. ÐÑо не ÑвлÑеÑÑÑ ÑÑловием Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ Ð¾Ñибки, еÑли вÑзÑваемой конкÑеÑной ÑÑнкÑии не ÑÑебÑÑÑÑÑ Ð´Ð°Ð½Ð½Ñе о пÑÐ°Ð²Ð¸Ð»Ð°Ñ ÑоÑÑиÑовки, коÑоÑÑе ей ÑледÑÐµÑ Ð¿ÑимениÑÑ. ÐÑли же Ñакие даннÑе ÑÑебÑÑÑÑÑ, ÑÑо пÑиведÑÑ Ðº оÑибке во вÑÐµÐ¼Ñ Ð²ÑполнениÑ.
РкаÑеÑÑве пÑимеÑа ÑаÑÑмоÑÑим данное опÑеделение ÑаблиÑÑ:
CREATE TABLE test1 (
a text COLLATE "de_DE",
b text COLLATE "es_ES",
...
);ÐаÑем в
SELECT a < 'foo' FROM test1;
вÑполнÑеÑÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ < ÑоглаÑно пÑавилам de_DE, Ñак как вÑÑажение обÑединÑÐµÑ Ð½ÐµÑвно опÑеделÑемÑе пÑавила ÑоÑÑиÑовки Ñ Ð¿Ñавилами, заданнÑми по ÑмолÑаниÑ. Ðо в
SELECT a < ('foo' COLLATE "fr_FR") FROM test1; ÑÑавнение вÑполнÑеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ñавил fr_FR, Ñак как Ñвное опÑеделение пÑавил ÑоÑÑиÑовки пеÑеопÑеделÑÐµÑ Ð½ÐµÑвное. ÐÑоме Ñого, в запÑоÑе
SELECT a < b FROM test1;
анализаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑов не Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑеделиÑÑ, какое пÑавило ÑоÑÑиÑовки иÑполÑзоваÑÑ, поÑколÑÐºÑ ÑÑолбÑÑ a и b имеÑÑ ÐºÐ¾Ð½ÑликÑÑÑÑие неÑвнÑе пÑавила ÑоÑÑиÑовки. Так как опеÑаÑоÑÑ < ÑÑебÑеÑÑÑ Ð·Ð½Ð°ÑÑ, какое пÑавило иÑполÑзоваÑÑ, ÑÑо пÑиведÑÑ Ðº оÑибке. ÐÑÐ¸Ð±ÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑÑÑÑаниÑÑ, пÑименив Ñвное Ñказание пÑавил ÑоÑÑиÑовки к лÑÐ±Ð¾Ð¼Ñ Ð¸Ð· двÑÑ
вÑ
однÑÑ
вÑÑажений. ÐапÑимеÑ:
SELECT a < b COLLATE "de_DE" FROM test1;
либо ÑквиваленÑное емÑ
SELECT a COLLATE "de_DE" < b FROM test1;
С дÑÑгой ÑÑоÑонÑ, ÑледÑÑÑее вÑÑажение ÑÑ Ð¾Ð¶ÐµÐ¹ ÑÑÑÑкÑÑÑÑ
SELECT a || b FROM test1;
не пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº оÑибке, поÑколÑÐºÑ Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа || пÑавила ÑоÑÑиÑовки не имеÑÑ Ð·Ð½Ð°ÑениÑ, Ñак как ÑезÑлÑÑÐ°Ñ Ð½Ðµ завиÑÐ¸Ñ Ð¾Ñ ÑоÑÑиÑовки.
ÐÑавила ÑоÑÑиÑовки, назнаÑеннÑе ÑÑнкÑии или комбинаÑии Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð²ÑÑажений опеÑаÑоÑа, Ñакже могÑÑ Ð±ÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ñ Ðº ÑÑнкÑии или ÑезÑлÑÑаÑÑ Ð¾Ð¿ÐµÑаÑоÑа, еÑли ÑÑнкÑÐ¸Ñ Ð¸Ð»Ð¸ опеÑаÑÐ¾Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ ÑезÑлÑÑÐ°Ñ ÑоÑÑиÑÑемого Ñипа даннÑÑ . Так, в
SELECT * FROM test1 ORDER BY a || 'foo';
ÑпоÑÑдоÑение бÑÐ´ÐµÑ Ð¿ÑоиÑÑ
одиÑÑ ÑоглаÑно пÑавилам de_DE. Ðо даннÑй запÑоÑ:
SELECT * FROM test1 ORDER BY a || b;
пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº оÑибке, поÑÐ¾Ð¼Ñ ÑÑо, даже еÑли опеÑаÑоÑÑ || не нÑжно знаÑÑ Ð¿Ñавила ÑоÑÑиÑовки, пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ORDER BY ÑÑо ÑÑебÑеÑÑÑ. Ðак бÑло Ñказано вÑÑе, конÑÐ»Ð¸ÐºÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑазÑеÑÑн пÑи помоÑи Ñвного ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¿Ñавил ÑоÑÑиÑовки:
SELECT * FROM test1 ORDER BY a || b COLLATE "fr_FR";
22.2.2. УпÑавление пÑавилами ÑоÑÑиÑовки
ÐÑавила ÑоÑÑиÑовки пÑедÑÑавлÑÑÑ Ñобой обÑÐµÐºÑ ÑÑ
ÐµÐ¼Ñ SQL, коÑоÑÑй ÑопоÑÑавлÑÐµÑ SQL-Ð¸Ð¼Ñ Ñ Ð»Ð¾ÐºÐ°Ð»ÑÑ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ. Ð ÑаÑÑноÑÑи, оно пÑеобÑазÑеÑÑÑ Ð² комбинаÑÐ¸Ñ LC_COLLATE и LC_CTYPE. (Ðак видно из названиÑ, оÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑÐµÐ»Ñ Ð¿Ñавил ÑоÑÑиÑовки â наÑÑÑоиÑÑ Ð¿Ð°ÑамеÑÑ LC_COLLATE, коÑоÑÑй конÑÑолиÑÑÐµÑ Ð¿Ð¾ÑÑдок ÑоÑÑиÑовки. Ðднако на пÑакÑике Ñедко Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑÑ Ð¸Ð¼ÐµÑÑ LC_CTYPE, оÑлиÑнÑй Ð¾Ñ LC_COLLATE, поÑÑÐ¾Ð¼Ñ Ñдобнее обÑединиÑÑ Ð¸Ñ
в одно Ñелое, Ñем ÑоздаваÑÑ ÐµÑÑ Ð¾Ð´Ð¸Ð½ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¸Ð½ÑÑаÑÑÑÑкÑÑÑÑ Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ LC_CTYPE на ÑÑовне вÑÑажениÑ.) Также, пÑавила ÑоÑÑиÑовки ÑвÑÐ·Ð°Ð½Ñ Ñ ÐºÐ¾Ð´Ð¸Ñовкой набоÑа Ñимволов (Ñм. Раздел 22.3). Ðдно и Ñо же Ð¸Ð¼Ñ Ð¿Ñавил ÑоÑÑиÑовки Ð¼Ð¾Ð¶ÐµÑ ÑÑÑеÑÑвоваÑÑ Ð´Ð»Ñ ÑазнÑÑ
кодиÑовок.
Ðа вÑеÑ
плаÑÑоÑмаÑ
доÑÑÑÐ¿Ð½Ñ Ð¿Ñавила ÑоÑÑиÑовки под названием default, C, и POSIX. ÐополниÑелÑнÑе пÑавила ÑоÑÑиÑовки могÑÑ Ð±ÑÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð² завиÑимоÑÑи Ð¾Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки опеÑаÑионной ÑиÑÑемÑ. ÐÑавило ÑоÑÑиÑовки default иÑполÑзÑÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ LC_COLLATE и LC_CTYPE, заданнÑе пÑи Ñоздании Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. ÐÑавила ÑоÑÑиÑовки C и POSIX опÑеделÑÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ, Ñ
аÑакÑеÑное Ð´Ð»Ñ Â«ÑÑадиÑионного C », в коÑоÑом ÑолÑко знаки кодиÑовки ASCII Ð¾Ñ Â«A» до «Z» ÑаÑÑмаÑÑиваÑÑÑÑ ÐºÐ°Ðº бÑквÑ, и ÑоÑÑиÑовка оÑÑÑеÑÑвлÑеÑÑÑ ÑÑÑого по ÑимволÑÐ½Ð¾Ð¼Ñ ÐºÐ¾Ð´Ñ Ð±Ð°Ð¹Ñов.
ÐÑли опеÑаÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑиÑÑема обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð¸ÑполÑзование неÑколÑкиÑ
локалей внÑÑÑи одной пÑогÑÐ°Ð¼Ð¼Ñ (newlocale и аналогиÑнÑе ÑÑнкÑии), Ñогда пÑи Ñоздании клаÑÑеÑа баз даннÑÑ
initdb заполнÑÐµÑ ÑиÑÑемнÑй каÑалог pg_collation пÑавилами ÑоÑÑиÑовки на оÑнове вÑеÑ
локалей, найденнÑÑ
в опеÑаÑионной ÑиÑÑеме на ÑекÑÑий моменÑ. ÐопÑÑÑим, опеÑаÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑиÑÑема Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедоÑÑавиÑÑ Ð»Ð¾ÐºÐ°Ð»Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ de_DE.utf8. Тогда initdb ÑоздаÑÑ Ð¿Ñавила ÑоÑÑиÑовки под именем de_DE.utf8 Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸Ñовки UTF8, коÑоÑÑе имеÑÑ ÐºÐ°Ðº LC_COLLATE, Ñак и LC_CTYPE, ÑÑÑановленнÑе в de_DE.utf8. Также бÑдÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð¿Ñавила ÑоÑÑиÑовки без .utf8 в оконÑании имени. Таким обÑазом, Ð²Ñ Ñакже могли Ð±Ñ Ð¸ÑполÑзоваÑÑ Ð¿Ñавила ÑоÑÑиÑовки под именем de_DE, коÑоÑое не Ñак гÑомоздко пÑи напиÑании и менее завиÑимо Ð¾Ñ ÐºÐ¾Ð´Ð¸Ñовки. Ðднако, необÑ
одимо оÑмеÑиÑÑ, ÑÑо иÑÑ
однÑй Ð½Ð°Ð±Ð¾Ñ Ð¸Ð¼Ñн пÑавил ÑоÑÑиÑовки завиÑÐ¸Ñ Ð¾Ñ Ð¿Ð»Ð°ÑÑоÑмÑ.
Ð ÑлÑÑае еÑли необÑ
Ð¾Ð´Ð¸Ð¼Ñ Ð¿Ñавила ÑоÑÑиÑовки, имеÑÑие ÑазнÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ LC_COLLATE и LC_CTYPE, могÑÑ Ð±ÑÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð½Ð¾Ð²Ñе пÑавила ÑоÑÑиÑовки Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE COLLATION. ÐÑа команда Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзована Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²ÑÑ
пÑавил ÑоÑÑиÑовки из Ñже ÑÑÑеÑÑвÑÑÑиÑ
, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ пÑи иÑполÑзовании в пÑиложениÑÑ
имÑн пÑавил ÑоÑÑиÑовки, не завиÑÑÑиÑ
Ð¾Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ.
РлÑбой базе даннÑÑ
имеÑÑ Ð·Ð½Ð°Ñение ÑолÑко Ñе пÑавила ÑоÑÑиÑовки, коÑоÑÑе иÑполÑзÑÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ ÑÑой Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. ÐÑоÑие запиÑи в pg_collation игноÑиÑÑÑÑÑÑ. Таким обÑазом, ÑÑеÑÑнное Ð¸Ð¼Ñ Ð¿Ñавил ÑоÑÑиÑовки, Ñакое как de_DE, Ð¼Ð¾Ð¶ÐµÑ ÑÑиÑаÑÑÑÑ ÑникалÑнÑм внÑÑÑи данной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, даже еÑли Ð±Ñ Ð¾Ð½Ð¾ не бÑло ÑникалÑнÑм глобалÑно. ÐÑполÑзование ÑÑеÑÑнного имени ÑоÑÑиÑовки ÑекомендÑеÑÑÑ, Ñак как пÑи пеÑеÑ
оде на дÑÑгÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
пÑидÑÑÑÑ Ð²ÑполниÑÑ Ð½Ð° одно изменение менÑÑе. Ðднако, ÑледÑÐµÑ Ð¿Ð¾Ð¼Ð½Ð¸ÑÑ, ÑÑо пÑавила ÑоÑÑиÑовки default, C и POSIX можно иÑполÑзоваÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ ÐºÐ¾Ð´Ð¸Ñовки Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
Ð Postgres Pro пÑедполагаеÑÑÑ, ÑÑо оÑделÑнÑе обÑекÑÑ Ð¿Ñавил ÑоÑÑиÑовки неÑовмеÑÑимÑ, даже когда они имеÑÑ Ð¸Ð´ÐµÐ½ÑиÑнÑе ÑвойÑÑва. Так, напÑимеÑ,
SELECT a COLLATE "C" < b COLLATE "POSIX" FROM test1;
вÑÐ²ÐµÐ´ÐµÑ ÑообÑение об оÑибке, неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо поведение пÑавил ÑоÑÑиÑовки C и POSIX иденÑиÑно. Ðо ÑÑой пÑиÑине ÑмеÑиваÑÑ ÑÑеÑÑннÑе и полнÑе имена пÑавил ÑоÑÑиÑовки не ÑекомендÑеÑÑÑ.