CREATE COLLATION
CREATE COLLATION â ÑоздаÑÑ Ð¿Ñавило ÑоÑÑиÑовки
СинÑакÑиÑ
CREATE COLLATION [ IF NOT EXISTS ]имÑ( [ LOCALE =локалÑ, ] [ LC_COLLATE =каÑегоÑиÑ_ÑоÑÑиÑовки, ] [ LC_CTYPE =каÑегоÑиÑ_Ñипов_Ñимволов, ] [ PROVIDER =пÑовайдеÑ, ] [ DETERMINISTIC =boolean, ] [ VERSION =веÑÑиÑ] ) CREATE COLLATION [ IF NOT EXISTS ]имÑFROMÑÑÑеÑÑвÑÑÑее_пÑавило
ÐпиÑание
CREATE COLLATION опÑеделÑÐµÑ Ð½Ð¾Ð²Ð¾Ðµ пÑавило ÑоÑÑиÑовки, иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸ опеÑаÑионной ÑиÑÑемÑ, либо копиÑÑÑ ÑÑÑеÑÑвÑÑÑее пÑавило.
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð¿Ñавило ÑоÑÑиÑовки, необÑ
одимо имеÑÑ Ð¿Ñаво CREATE в Ñелевой ÑÑ
еме.
ÐаÑамеÑÑÑ
IF NOT EXISTSÐе ÑÑиÑаÑÑ Ð¾Ñибкой, еÑли пÑавило ÑоÑÑиÑовки Ñ Ñаким именем Ñже ÑÑÑеÑÑвÑеÑ. Ð ÑÑом ÑлÑÑае бÑÐ´ÐµÑ Ð²Ñдано замеÑание. ÐамеÑÑÑе, ÑÑо Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ гаÑанÑии, ÑÑо ÑÑÑеÑÑвÑÑÑее пÑавило ÑоÑÑиÑовки как-Ñо ÑооÑноÑиÑÑÑ Ñ Ñем, коÑоÑое могло Ð±Ñ Ð±ÑÑÑ Ñоздано.
имÑÐÐ¼Ñ Ð¿Ñавила ÑоÑÑиÑовки, возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹. ÐÑли ÑÑ ÐµÐ¼Ð° не Ñказана, пÑавило ÑоÑÑиÑовки ÑоздаÑÑÑÑ Ð² ÑекÑÑей ÑÑ ÐµÐ¼Ðµ. Ðаданное Ð¸Ð¼Ñ Ð¿Ñавила должно бÑÑÑ ÑникалÑнÑм в ÑÑой ÑÑ ÐµÐ¼Ðµ. (СиÑÑемнÑе каÑалоги могÑÑ ÑодеÑжаÑÑ Ð¿Ñавила ÑоÑÑиÑовки Ñ Ð¾Ð´Ð½Ð¸Ð¼ именем, но пÑедназнаÑеннÑе Ð´Ð»Ñ ÑазнÑÑ ÐºÐ¾Ð´Ð¸Ñовок, однако они бÑдÑÑ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑÑÑ, еÑли Ð¸Ñ ÐºÐ¾Ð´Ð¸Ñовка не ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ ÐºÐ¾Ð´Ð¸Ñовкой Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .)
локалÑÐÑо кÑаÑÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð²Ñеменной ÑÑÑановки
LC_COLLATEиLC_CTYPE. ÐÑли Ñказан ÑÑÐ¾Ñ Ð²Ð°ÑианÑ, задаÑÑ Ð»Ñбой из ÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑов оÑделÑно нелÑзÑ.каÑегоÑиÑ_ÑоÑÑиÑÐ¾Ð²ÐºÐ¸Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð»Ð¾ÐºÐ°Ð»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑÐµÐ¼Ñ ÑÑÑанавливаеÑÑÑ Ð² каÑеÑÑве каÑегоÑии локали
LC_COLLATE.каÑегоÑиÑ_Ñипов_ÑÐ¸Ð¼Ð²Ð¾Ð»Ð¾Ð²Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð»Ð¾ÐºÐ°Ð»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑÐµÐ¼Ñ ÑÑÑанавливаеÑÑÑ Ð² каÑеÑÑве каÑегоÑии локали
LC_CTYPE.пÑовайдеÑÐадаÑÑ Ð¿ÑовайдеÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÑÑнкÑий локализаÑии, ÑвÑзаннÑÑ Ñ Ð´Ð°Ð½Ð½Ñм пÑавилом ÑоÑÑиÑовки. ÐозможнÑе знаÑениÑ:
icu,libc. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбиÑаеÑÑÑlibc. ÐÐ°Ð±Ð¾Ñ Ð´Ð¾ÑÑÑпнÑÑ Ð·Ð½Ð°Ñений завиÑÐ¸Ñ Ð¾Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑÐµÐ¼Ñ Ð¸ паÑамеÑÑов ÑбоÑки.DETERMINISTICÐпÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸ пÑавило ÑоÑÑиÑовки иÑполÑзоваÑÑ Ð´ÐµÑеÑминиÑованное ÑÑавнение. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбиÑаеÑÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñакое ÑÑавнение. ÐÑи деÑеÑминиÑованном ÑÑавнении ÑÑÑоки, ÑоÑÑоÑÑие из ÑазлиÑнÑÑ Ð±Ð°Ð¹Ñов, ÑÑиÑаÑÑÑÑ Ð½ÐµÑавнÑми, даже еÑли на логиÑеÑком ÑÑовне они одинаковÑ. Postgres Pro ÑеÑÐ°ÐµÑ Ð²Ð¾Ð¿ÑÐ¾Ñ Ð¸Ñ ÑавенÑÑва, ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°Ñ Ð¸Ñ Ð¿Ð¾ байÑам. ÐÑли же Ð´Ð»Ñ Ð¿Ñавила ÑоÑÑиÑовки вÑбÑаÑÑ Ð½ÐµÐ´ÐµÑеÑминиÑованное ÑÑавнение, ÑÑо пÑавило Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ, напÑимеÑ, незавиÑÑÑим Ð¾Ñ ÑдаÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑегиÑÑÑа Ñимволов. ÐÐ»Ñ ÑÑого Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑбÑаÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑее знаÑение
LOCALEи ÑделаÑÑ ÑÑо пÑавило ÑоÑÑиÑовки недеÑеÑминиÑованнÑм.ÐедеÑеÑминиÑованнÑе пÑавила ÑоÑÑиÑовки поддеÑживаÑÑÑÑ ÑолÑко Ñ Ð¿ÑовайдеÑом ICU.
веÑÑиÑÐадаÑÑ ÑÑÑÐ¾ÐºÑ Ð²ÐµÑÑии, ÑÐ¾Ñ ÑанÑемÑÑ Ñ Ð¿Ñавилом ÑоÑÑиÑовки. ÐбÑÑно ÐµÑ Ð½Ðµ ÑледÑÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑ â Ñогда ÑÑа веÑÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑена из ÑакÑиÑеÑкой веÑÑии пÑавила ÑоÑÑиÑовки, ÑообÑÑнной опеÑаÑионной ÑиÑÑемой. ÐÑо Ñказание пÑедназнаÑено Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°
pg_upgradeÑмогла ÑкопиÑоваÑÑ Ð²ÐµÑÑÐ¸Ñ Ð¸Ð· ÑÑÑеÑÑвÑÑÑей инÑÑаллÑÑии.ЧÑо делаÑÑ Ð¿Ñи неÑовпадении веÑÑий пÑавил ÑоÑÑиÑовки, опиÑано в ALTER COLLATION.
ÑÑÑеÑÑвÑÑÑее_пÑавилоÐÐ¼Ñ ÐºÐ¾Ð¿Ð¸ÑÑемого ÑÑÑеÑÑвÑÑÑего пÑавила ÑоÑÑиÑовки. Ðовое пÑавило ÑоÑÑиÑовки полÑÑÐ¸Ñ Ñе же ÑвойÑÑва, ÑÑо и ÑÑÑеÑÑвÑÑÑее, но бÑÐ´ÐµÑ Ð½ÐµÐ·Ð°Ð²Ð¸ÑимÑм обÑекÑом.
ÐÑимеÑаниÑ
Ðоманда CREATE COLLATION ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ SHARE ROW EXCLUSIVE в ÑиÑÑемном каÑалоге pg_collation. ÐÑа блокиÑовка конÑликÑÑÐµÑ Ñ Ñакой же, поÑÑÐ¾Ð¼Ñ Ð² один Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ ÑолÑко одна команда CREATE COLLATION.
ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑозданнÑÑ
полÑзоваÑелем пÑавил ÑоÑÑиÑовки пÑименÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° DROP COLLATION.
ÐодÑобнее ÑзнаÑÑ Ð¾ Ñоздании пÑавил ÑоÑÑиÑовки можно в ÐодÑазделе 22.2.2.3.
Ðогда иÑполÑзÑеÑÑÑ Ð¿ÑÐ¾Ð²Ð°Ð¹Ð´ÐµÑ libc, Ð»Ð¾ÐºÐ°Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð¿Ñименимой к кодиÑовке ÑекÑÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. ТоÑнÑе пÑавила опиÑÐ°Ð½Ñ Ð² CREATE DATABASE.
ÐÑимеÑÑ
Создание пÑавила ÑоÑÑиÑовки из локали опеÑаÑионной ÑиÑÑÐµÐ¼Ñ ru_RU.utf8 (пÑедполагаеÑÑÑ, ÑÑо кодиÑовка ÑекÑÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
â UTF-8):
CREATE COLLATION russian (locale = 'ru_RU.utf8');
Создание пÑавила ÑоÑÑиÑовки Ñ Ð¿Ð¾ÑÑдком, пÑи коÑоÑом лаÑинÑкие бÑÐºÐ²Ñ Ð¸Ð´ÑÑ Ð¿ÐµÑед бÑквами киÑиллиÑÑ, Ñ Ð¸ÑполÑзованием пÑовайдеÑа ICU:
CREATE COLLATION latn_cyrl (provider = icu, locale = 'ru-RU-u-kr-latn-cyrl');
Создание пÑавила ÑоÑÑиÑовки из Ñже ÑÑÑеÑÑвÑÑÑего:
CREATE COLLATION german FROM "de_DE";
Ðногда Ñдобно иÑполÑзоваÑÑ Ð² пÑиложениÑÑ Ð¸Ð¼ÐµÐ½Ð° пÑавил ÑоÑÑиÑовки, не завиÑÑÑие Ð¾Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ.
СовмеÑÑимоÑÑÑ
ÐпеÑаÑÐ¾Ñ CREATE COLLATION опÑеделÑн в ÑÑандаÑÑе SQL, но его дейÑÑвие огÑаниÑено копиÑованием ÑÑÑеÑÑвÑÑÑего пÑавила ÑоÑÑиÑовки. СинÑакÑÐ¸Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ пÑавила ÑоÑÑиÑовки пÑедÑÑавлÑÐµÑ Ñобой ÑаÑÑиÑение Postgres Pro.