ALTER DOMAIN
ALTER DOMAIN â измениÑÑ Ð¾Ð¿Ñеделение домена
СинÑакÑиÑ
ALTER DOMAINимÑ{ SET DEFAULTвÑÑажение| DROP DEFAULT } ALTER DOMAINимÑ{ SET | DROP } NOT NULL ALTER DOMAINимÑADDогÑаниÑение_домена[ NOT VALID ] ALTER DOMAINимÑDROP CONSTRAINT [ IF EXISTS ]имÑ_огÑаниÑениÑ[ RESTRICT | CASCADE ] ALTER DOMAINимÑRENAME CONSTRAINTимÑ_огÑаниÑениÑTOимÑ_нового_огÑаниÑениÑALTER DOMAINимÑVALIDATE CONSTRAINTимÑ_огÑаниÑениÑALTER DOMAINимÑOWNER TO {новÑй_владелеÑ| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER DOMAINимÑRENAME TOновое_имÑALTER DOMAINимÑSET SCHEMAноваÑ_ÑÑ ÐµÐ¼Ð°ÐдеÑÑогÑаниÑение_домена: [ CONSTRAINTимÑ_огÑаниÑениÑ] { NOT NULL | CHECK (вÑÑажение) }
ÐпиÑание
ALTER DOMAIN изменÑÐµÑ Ð¾Ð¿Ñеделение ÑÑÑеÑÑвÑÑÑего домена. ÐÑа команда Ð¸Ð¼ÐµÐµÑ Ð½ÐµÑколÑко ÑазновидноÑÑей:
SET/DROP DEFAULTÐÑи ÑоÑÐ¼Ñ Ð·Ð°Ð´Ð°ÑÑ/ÑбиÑаÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°. ÐамеÑÑÑе, ÑÑо ÑÑи знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑименÑÑÑÑÑ ÑолÑко пÑи поÑледÑÑÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ñ
INSERT; они не менÑÑÑÑÑ Ð² ÑÑÑÐ¾ÐºÐ°Ñ Ñ Ð´Ð°Ð½Ð½Ñм доменом, Ñже добавленнÑÑ Ð² ÑаблиÑÑ.SET/DROP NOT NULLÐÑи ÑоÑÐ¼Ñ Ð¾Ð¿ÑеделÑÑÑ, бÑÐ´ÐµÑ Ð»Ð¸ домен пÑинимаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL или неÑ.
SET NOT NULLможно вÑполниÑÑ, ÑолÑко еÑли ÑÑолбÑÑ Ñ ÑÑим доменом еÑÑ Ð½Ðµ ÑодеÑÐ¶Ð°Ñ Ð·Ð½Ð°Ñений NULL.ADDогÑаниÑение_домена[ NOT VALID ]ÐÑа ÑоÑма добавлÑÐµÑ Ð½Ð¾Ð²Ð¾Ðµ огÑаниÑение Ð´Ð»Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°. Ðогда добавлÑеÑÑÑ Ð½Ð¾Ð²Ð¾Ðµ огÑаниÑение домена, вÑе ÑÑолбÑÑ Ñ ÑÑим доменом бÑдÑÑ Ð¿ÑовеÑÐµÐ½Ñ Ð½Ð° ÑооÑвеÑÑÑвие ÑÑÐ¾Ð¼Ñ Ð¾Ð³ÑаниÑениÑ. ÐÑи пÑовеÑки можно подавиÑÑ, добавив Ñказание
NOT VALID, а заÑем акÑивиÑоваÑÑ Ð¿Ð¾Ð·Ð´Ð½ÐµÐµ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑALTER DOMAIN ... VALIDATE CONSTRAINT. ÐÐ½Ð¾Ð²Ñ Ð²ÑÑавленнÑе или изменÑннÑе ÑÑÑоки вÑегда пÑовеÑÑÑÑÑÑ Ð¿Ð¾ вÑем огÑаниÑениÑм, даже Ñем, ÑÑо оÑмеÑÐµÐ½Ñ ÐºÐ°ÐºNOT VALID. УказаниеNOT VALIDдопÑÑкаеÑÑÑ ÑолÑко Ð´Ð»Ñ Ð¾Ð³ÑаниÑенийCHECK.DROP CONSTRAINT [ IF EXISTS ]ÐÑа ÑоÑма ÑбиÑÐ°ÐµÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°. ÐÑли Ñказано
IF EXISTSи заданное огÑаниÑение не ÑÑÑеÑÑвÑеÑ, ÑÑо не ÑÑиÑаеÑÑÑ Ð¾Ñибкой. Ð ÑÑом ÑлÑÑае вÑдаÑÑÑÑ ÑолÑко замеÑание.RENAME CONSTRAINTÐÑа ÑоÑма менÑÐµÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ огÑаниÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°.
VALIDATE CONSTRAINTÐÑа ÑоÑма вклÑÑÐ°ÐµÑ Ð¿ÑовеÑÐºÑ Ð¾Ð³ÑаниÑениÑ, Ñанее добавленного как
NOT VALID, Ñо еÑÑÑ Ð¿ÑовеÑÑÐµÑ Ð²Ñе знаÑÐµÐ½Ð¸Ñ Ð² ÑÑолбÑÐ°Ñ Ñ ÑÑим Ñипом домена на ÑооÑвеÑÑÑвие ÑÑÐ¾Ð¼Ñ Ð¾Ð³ÑаниÑениÑ.OWNERÐÑа ÑоÑма менÑÐµÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа домена на заданного полÑзоваÑелÑ.
RENAMEÐÑа ÑоÑма менÑÐµÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ домена.
SET SCHEMAÐÑа ÑоÑма менÑÐµÑ ÑÑ ÐµÐ¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°. ÐÑе огÑаниÑениÑ, ÑвÑзаннÑе Ñ Ð´Ð°Ð½Ð½Ñм доменом, Ñак же пеÑеноÑÑÑÑÑ Ð² новÑÑ ÑÑ ÐµÐ¼Ñ.
ÐÑполниÑÑ ALTER DOMAIN Ð¼Ð¾Ð¶ÐµÑ ÑолÑко Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ ÑооÑвеÑÑÑвÑÑÑего домена. ЧÑÐ¾Ð±Ñ ÑмениÑÑ ÑÑ
ÐµÐ¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°, необÑ
одимо Ñакже имеÑÑ Ð¿Ñаво CREATE в новой ÑÑ
еме. ЧÑÐ¾Ð±Ñ ÑмениÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа, необÑ
одимо бÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвеннÑм или опоÑÑедованнÑм Ñленом новой Ñоли-владелÑÑа, а ÑÑа ÑÐ¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° имеÑÑ Ð¿Ñаво CREATE в ÑÑ
еме домена. (С Ñакими огÑаниÑениÑми пÑи Ñмене владелÑÑа не пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð¸Ñего Ñакого, ÑÑо нелÑÐ·Ñ Ð±Ñло Ð±Ñ ÑделаÑÑ, Ð¸Ð¼ÐµÑ Ð¿Ñаво ÑдалиÑÑ Ð¸ Ð²Ð½Ð¾Ð²Ñ ÑоздаÑÑ Ð´Ð¾Ð¼ÐµÐ½. Ðднако ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ ÑмениÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа домена в лÑбом ÑлÑÑае.)
ÐаÑамеÑÑÑ
имÑÐÐ¼Ñ ÑÑÑеÑÑвÑÑÑего домена (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹), подлежаÑего изменениÑ.
огÑаниÑение_доменаÐовое огÑаниÑение домена.
имÑ_огÑаниÑениÑÐÐ¼Ñ ÑÑÑеÑÑвÑÑÑего огÑаниÑениÑ, подлежаÑего ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ пеÑеименованиÑ.
NOT VALIDÐе пÑовеÑÑÑÑ ÑÑÑеÑÑвÑÑÑие ÑÐ¾Ñ ÑанÑннÑе даннÑе на ÑооÑвеÑÑÑвие огÑаниÑениÑ.
CASCADEÐвÑомаÑиÑеÑки ÑдалÑÑÑ Ð¾Ð±ÑекÑÑ, завиÑÑÑие Ð¾Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ огÑаниÑениÑ, и, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, вÑе завиÑÑÑие Ð¾Ñ Ð½Ð¸Ñ Ð¾Ð±ÑекÑÑ (Ñм. Раздел 5.14).
RESTRICTÐÑказаÑÑ Ð² Ñдалении огÑаниÑениÑ, еÑли ÑÑÑеÑÑвÑÑÑ Ð·Ð°Ð²Ð¸ÑÑÑие Ð¾Ñ Ð½ÐµÐ³Ð¾ обÑекÑÑ. ÐÑо поведение по ÑмолÑаниÑ.
новое_имÑÐовое Ð¸Ð¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°.
имÑ_нового_огÑаниÑениÑÐовое Ð¸Ð¼Ñ Ð¾Ð³ÑаниÑениÑ.
новÑй_владелеÑÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, назнаÑаемого новÑм владелÑÑем домена.
новаÑ_ÑÑ ÐµÐ¼Ð°ÐÐ¾Ð²Ð°Ñ ÑÑ ÐµÐ¼Ð° домена.
ÐÑимеÑаниÑ
ХоÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ALTER DOMAIN ADD CONSTRAINT пÑÑаеÑÑÑ Ð¿ÑовеÑиÑÑ, ÑдовлеÑвоÑÑÑÑ Ð»Ð¸ Ñже ÑÑÑеÑÑвÑÑÑие даннÑе Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð¾Ð³ÑаниÑениÑ, ÑÑа пÑовеÑка не оÑÐµÐ½Ñ Ð½Ð°Ð´Ñжна, Ñак как Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° не «видиÑ» ÑÑÑоки ÑаблиÑÑ, коÑоÑÑе бÑли ÑолÑко ÑÑо Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð¸Ð»Ð¸ измененÑ, но еÑÑ Ð½Ðµ заÑикÑиÑованÑ. ÐÑли еÑÑÑ ÑиÑк Ñого, ÑÑо паÑаллелÑнÑе опеÑаÑии могÑÑ Ð²ÑÑавиÑÑ Ð½ÐµÐ¿Ð¾Ð´Ñ
одÑÑие даннÑе, можно пÑимениÑÑ ÑледÑÑÑий подÑ
од: ÑоздаÑÑ Ð¾Ð³ÑаниÑение Ñ Ñказанием NOT VALID, заÑикÑиÑоваÑÑ ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, подождаÑÑ Ð¾ÐºÐ¾Ð½ÑÐ°Ð½Ð¸Ñ Ð²ÑеÑ
ÑÑанзакÑий, наÑаÑÑÑ
до ÑикÑиÑованиÑ, а заÑем вÑполниÑÑ ALTER DOMAIN VALIDATE CONSTRAINT Ð´Ð»Ñ Ð¿ÑÐ¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑÑÐ¾Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ
. Ð ÑÑом ÑлÑÑае пÑовеÑка бÑÐ´ÐµÑ Ð½Ð°Ð´Ñжной, Ñак как поÑле ÑикÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¾Ð½Ð¾ бÑÐ´ÐµÑ Ð³Ð°ÑанÑиÑованно дейÑÑвоваÑÑ Ð½Ð° вÑе новÑе знаÑÐµÐ½Ð¸Ñ Ñипа домена, вноÑимÑе поÑледÑÑÑими ÑÑанзакÑиÑми.
РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ALTER DOMAIN ADD CONSTRAINT, ALTER DOMAIN VALIDATE CONSTRAINT и ALTER DOMAIN SET NOT NULL вÑдаÑÑ Ð¾ÑибкÑ, еÑли ÑказаннÑй домен или лÑбой пÑоизводнÑй Ð¾Ñ Ð½ÐµÐ³Ð¾ иÑполÑзÑеÑÑÑ Ð² ÑÑолбÑе Ñ Ñипом-конÑейнеÑом (ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑоÑÑавной, диапазоннÑй Ñип или маÑÑив) в какой-либо ÑаблиÑе Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. РдалÑнейÑем они бÑдÑÑ Ð´Ð¾ÑабоÑанÑ, Ñ Ñем ÑÑÐ¾Ð±Ñ Ð½Ð¾Ð²Ð¾Ðµ огÑаниÑение пÑовеÑÑлоÑÑ Ð¸ пÑи Ñакой вложенноÑÑи.
ÐÑимеÑÑ
Ðобавление огÑаниÑÐµÐ½Ð¸Ñ NOT NULL к доменÑ:
ALTER DOMAIN zipcode SET NOT NULL;
Удаление огÑаниÑÐµÐ½Ð¸Ñ NOT NULL из домена:
ALTER DOMAIN zipcode DROP NOT NULL;
Ðобавление огÑаниÑениÑ-пÑовеÑки к доменÑ:
ALTER DOMAIN zipcode ADD CONSTRAINT zipchk CHECK (char_length(VALUE) = 5);
Удаление огÑаниÑениÑ-пÑовеÑки из домена:
ALTER DOMAIN zipcode DROP CONSTRAINT zipchk;
ÐеÑеименование огÑаниÑениÑ-пÑовеÑки в домене:
ALTER DOMAIN zipcode RENAME CONSTRAINT zipchk TO zip_check;
ÐеÑемеÑение домена в дÑÑгÑÑ ÑÑ ÐµÐ¼Ñ:
ALTER DOMAIN zipcode SET SCHEMA customers;
СовмеÑÑимоÑÑÑ
ALTER DOMAIN ÑооÑвеÑÑÑвÑÐµÑ ÑÑандаÑÑÑ SQL, за иÑклÑÑением подвидов OWNER, RENAME, SET SCHEMA и VALIDATE CONSTRAINT, коÑоÑÑе ÑвлÑÑÑÑÑ ÑаÑÑиÑениÑми Postgres Pro. ÐÑедложение NOT VALID ваÑиаÑии ADD CONSTRAINT Ñакже ÑвлÑеÑÑÑ ÑаÑÑиÑением Postgres Pro.