5.7. Ðзменение ÑÐ°Ð±Ð»Ð¸Ñ #
- 5.7.1. Ðобавление ÑÑолбÑа
- 5.7.2. Удаление ÑÑолбÑа
- 5.7.3. Ðобавление огÑаниÑениÑ
- 5.7.4. Удаление огÑаниÑениÑ
- 5.7.5. Ðзменение знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ
- 5.7.6. Ðзменение Ñипа даннÑÑ ÑÑолбÑа
- 5.7.7. ÐеÑеименование ÑÑолбÑа
- 5.7.8. ÐеÑеименование ÑаблиÑÑ
- 5.7.2. Удаление ÑÑолбÑа
ÐÑли Ð²Ñ Ñоздали ÑаблиÑÑ, а заÑем понÑли, ÑÑо допÑÑÑили оÑибкÑ, или изменилиÑÑ ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð°Ñего пÑиложениÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑдалиÑÑ ÐµÑ Ð¸ ÑоздаÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾. Ðо ÑÑо бÑÐ´ÐµÑ Ð½ÐµÑдобно, еÑли ÑаблиÑа Ñже заполнена даннÑми, или еÑли на Ð½ÐµÑ ÑÑÑлаÑÑÑÑ Ð´ÑÑгие обÑекÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ (напÑимеÑ, по внеÑÐ½ÐµÐ¼Ñ ÐºÐ»ÑÑÑ). ÐоÑÑÐ¾Ð¼Ñ Postgres Pro пÑедоÑÑавлÑÐµÑ Ð½Ð°Ð±Ð¾Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ Ð´Ð»Ñ Ð¼Ð¾Ð´Ð¸ÑикаÑии ÑаблиÑ. ÐамеÑÑÑе, ÑÑо ÑÑо по ÑÑÑи оÑлиÑаеÑÑÑ Ð¾Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑодеÑжаÑÐ¸Ñ ÑÑ Ð² ÑаблиÑе: здеÑÑ Ð¼Ñ Ð¾Ð±ÑÑждаем модиÑикаÑÐ¸Ñ Ð¾Ð¿ÑеделениÑ, или ÑÑÑÑкÑÑÑÑ, ÑаблиÑÑ.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе:
ÐобавлÑÑÑ ÑÑолбÑÑ
УдалÑÑÑ ÑÑолбÑÑ
ÐобавлÑÑÑ Ð¾Ð³ÑаниÑениÑ
УдалÑÑÑ Ð¾Ð³ÑаниÑениÑ
ÐзменÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ
ÐзменÑÑÑ ÑÐ¸Ð¿Ñ ÑÑолбÑов
ÐеÑеименовÑваÑÑ ÑÑолбÑÑ
ÐеÑеименовÑваÑÑ ÑаблиÑÑ
ÐÑе ÑÑи дейÑÑÐ²Ð¸Ñ Ð²ÑполнÑÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ALTER TABLE; подÑобнее о ней Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑзнаÑÑ Ð² ÐµÑ ÑпÑавке.
5.7.1. Ðобавление ÑÑолбÑа #
ÐобавиÑÑ ÑÑÐ¾Ð»Ð±ÐµÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе Ñак:
ALTER TABLE products ADD COLUMN description text;
ÐовÑй ÑÑÐ¾Ð»Ð±ÐµÑ Ð·Ð°Ð¿Ð¾Ð»Ð½ÑеÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñм Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ знаÑением по ÑмолÑÐ°Ð½Ð¸Ñ (или знаÑением NULL, еÑли Ð²Ñ Ð½Ðµ добавиÑе Ñказание DEFAULT).
ÐодÑказка
ÐÑи добавлении ÑÑолбÑа Ñ Ð¿Ð¾ÑÑоÑннÑм знаÑением по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ðµ ÑÑебÑеÑÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ Ð²Ñе ÑÑÑоки ÑаблиÑÑ Ð¿Ñи вÑполнении ALTER TABLE. ÐмеÑÑо ÑÑого знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ Ð¿Ñи ÑледÑÑÑем обÑаÑении к ÑÑÑоке и ÑоÑ
ÑанÑеÑÑÑ Ð¿Ñи ÑледÑÑÑей пеÑезапиÑи ÑаблиÑÑ. ÐлагодаÑÑ ÑÑÐ¾Ð¼Ñ ALTER TABLE вÑполнÑеÑÑÑ Ð¾ÑÐµÐ½Ñ Ð±ÑÑÑÑо даже на болÑÑиÑ
ÑаблиÑаÑ
.
ÐÑли знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½Ñивое (напÑимеÑ, ÑÑо clock_timestamp()), в каждÑÑ ÑÑÑÐ¾ÐºÑ Ð½Ñжно бÑÐ´ÐµÑ Ð²Ð½ÐµÑÑи знаÑение, вÑÑиÑленное в Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ALTER TABLE. ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð¿Ð¾ÑенÑиалÑно длиÑелÑной опеÑаÑии Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑеÑ
ÑÑÑок, еÑли Ð²Ñ Ð¿Ð»Ð°Ð½Ð¸ÑÑеÑе заполниÑÑ ÑÑÐ¾Ð»Ð±ÐµÑ Ð² оÑновном не знаÑениÑми по ÑмолÑаниÑ, лÑÑÑе бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑÑÐ¾Ð»Ð±ÐµÑ Ð±ÐµÐ· знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, заÑем вÑÑавиÑÑ ÑÑебÑемÑе знаÑÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ UPDATE, а поÑом опÑеделиÑÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ, как опиÑано ниже.
ÐÑи ÑÑом Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑÐ°Ð·Ñ Ð¾Ð¿ÑеделиÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ ÑÑолбÑа, иÑполÑзÑÑ Ð¾Ð±ÑÑнÑй ÑинÑакÑиÑ:
ALTER TABLE products ADD COLUMN description text CHECK (description <> '');
Ðа Ñамом деле здеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð²Ñе конÑÑÑÑкÑии, допÑÑÑимÑе в опÑеделении ÑÑолбÑа в команде CREATE TABLE. ÐомниÑе однако, ÑÑо знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ ÑдовлеÑвоÑÑÑÑ Ð´Ð°Ð½Ð½Ñм огÑаниÑениÑм, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ADD вÑполнилаÑÑ ÑÑпеÑно. ÐÑ Ñакже можеÑе ÑнаÑала заполниÑÑ ÑÑÐ¾Ð»Ð±ÐµÑ Ð¿ÑавилÑно, а заÑем добавиÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ (Ñм. ниже).
5.7.2. Удаление ÑÑолбÑа #
УдалиÑÑ ÑÑÐ¾Ð»Ð±ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ Ñак:
ALTER TABLE products DROP COLUMN description;
ÐаннÑе, коÑоÑÑе бÑли в ÑÑом ÑÑолбÑе, иÑÑезаÑÑ. ÐмеÑÑе Ñо ÑÑолбÑом ÑдалÑÑÑÑÑ Ð¸ вклÑÑаÑÑие его огÑаниÑÐµÐ½Ð¸Ñ ÑаблиÑÑ. Ðднако еÑли на ÑÑÐ¾Ð»Ð±ÐµÑ ÑÑÑлаеÑÑÑ Ð¾Ð³ÑаниÑение внеÑнего клÑÑа дÑÑгой ÑаблиÑÑ, Postgres Pro не ÑÐ´Ð°Ð»Ð¸Ñ ÑÑо огÑаниÑение неÑвно. РазÑеÑиÑÑ Ñдаление вÑеÑ
завиÑÑÑиÑ
Ð¾Ñ ÑÑого ÑÑолбÑа обÑекÑов можно, добавив Ñказание CASCADE:
ALTER TABLE products DROP COLUMN description CASCADE;
ÐбÑий Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼, ÑÑоÑÑий за ÑÑим, опиÑÑваеÑÑÑ Ð² Разделе 5.15.
5.7.3. Ðобавление огÑаниÑÐµÐ½Ð¸Ñ #
ÐÐ»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ ÑинÑакÑÐ¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ ÑаблиÑÑ. ÐапÑимеÑ:
ALTER TABLE products ADD CHECK (name <> ''); ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no); ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;
ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¾Ð³ÑаниÑение NOT NULL, коÑоÑое обÑÑно не запиÑÑваеÑÑÑ Ð² виде огÑаниÑÐµÐ½Ð¸Ñ ÑаблиÑÑ, иÑполÑзÑеÑÑÑ ÑпеÑиалÑнÑй ÑинÑакÑиÑ:
ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;
ÐÑа команда ниÑего не делаеÑ, еÑли Ð´Ð»Ñ ÑÑолбÑа Ñже задано огÑаниÑение NOT NULL.
ÐгÑаниÑение пÑÐ¾Ñ Ð¾Ð´Ð¸Ñ Ð¿ÑовеÑÐºÑ Ð°Ð²ÑомаÑиÑеÑки и бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾, ÑолÑко еÑли ÐµÐ¼Ñ ÑдовлеÑвоÑÑÑÑ Ð´Ð°Ð½Ð½Ñе ÑаблиÑÑ.
5.7.4. Удаление огÑаниÑÐµÐ½Ð¸Ñ #
ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð½Ð°ÑÑ ÐµÐ³Ð¾ имÑ. ÐÑли Ð²Ñ Ð½Ðµ пÑиÑваивали ÐµÐ¼Ñ Ð¸Ð¼Ñ, ÑÑо неÑвно Ñделала ÑиÑÑема, и Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑÑÑниÑÑ ÐµÐ³Ð¾. ÐдеÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° команда psql \d (или дÑÑгие пÑогÑаммÑ, показÑваÑÑие подÑобнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑаблиÑаÑ
). ÐÐ½Ð°Ñ Ð¸Ð¼Ñ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ: имÑ_ÑаблиÑÑ
ALTER TABLE products DROP CONSTRAINT some_name;
Ðак и пÑи Ñдалении ÑÑолбÑа, еÑли Ð²Ñ Ñ
оÑиÑе ÑдалиÑÑ Ð¾Ð³ÑаниÑение Ñ Ð·Ð°Ð²Ð¸ÑимÑми обÑекÑами, добавÑÑе Ñказание CASCADE. ÐÑимеÑом Ñакой завиÑимоÑÑи Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð³ÑаниÑение внеÑнего клÑÑа, ÑвÑзанное Ñо ÑÑолбÑами огÑаниÑÐµÐ½Ð¸Ñ Ð¿ÐµÑвиÑного клÑÑа.
ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ NOT NULL пÑедÑÑмоÑÑен ÑпÑоÑÑннÑй ÑинÑакÑиÑ:
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
ÐÑÐ¾Ñ ÑинÑакÑÐ¸Ñ ÑооÑвеÑÑÑвÑÐµÑ ÑинÑакÑиÑÑ SET NOT NULL Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñакого огÑаниÑениÑ. ÐÑли Ð´Ð»Ñ ÑÑолбÑа Ð½ÐµÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ NOT NULL, команда не бÑÐ´ÐµÑ Ð²ÑполнÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
дейÑÑвий. (Ðапомним, ÑÑо Ñ ÑÑолбÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ более одного огÑаниÑÐµÐ½Ð¸Ñ NOT NULL, поÑÑÐ¾Ð¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° вÑегда однознаÑно опÑеделÑеÑ, к ÐºÐ°ÐºÐ¾Ð¼Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¾Ð½Ð° пÑименÑеÑÑÑ.)
5.7.5. Ðзменение знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ #
ÐазнаÑиÑÑ ÑÑолбÑÑ Ð½Ð¾Ð²Ð¾Ðµ знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ Ñак:
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
ÐамеÑÑÑе, ÑÑо ÑÑо никак не влиÑÐµÑ Ð½Ð° ÑÑÑеÑÑвÑÑÑие ÑÑÑоки ÑаблиÑÑ, а пÑоÑÑо задаÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑиÑ
команд INSERT.
ЧÑÐ¾Ð±Ñ ÑдалиÑÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ, вÑполниÑе:
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
ÐÑи ÑÑом по ÑÑÑи знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑоÑÑо пÑиÑваиваеÑÑÑ NULL. Ðак ÑледÑÑвие, оÑибки не бÑдеÑ, еÑли Ð²Ñ Ð¿Ð¾Ð¿ÑÑаеÑеÑÑ ÑдалиÑÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ, не опÑеделÑнное Ñвно, Ñак как неÑвно оно ÑÑÑеÑÑвÑÐµÑ Ð¸ Ñавно NULL.
5.7.6. Ðзменение Ñипа даннÑÑ ÑÑолбÑа #
ЧÑÐ¾Ð±Ñ Ð¿ÑеобÑазоваÑÑ ÑÑÐ¾Ð»Ð±ÐµÑ Ð² дÑÑгой Ñип даннÑÑ , иÑполÑзÑйÑе командÑ:
ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);
Ðна бÑÐ´ÐµÑ ÑÑпеÑна, ÑолÑко еÑли вÑе ÑÑÑеÑÑвÑÑÑие знаÑÐµÐ½Ð¸Ñ Ð² ÑÑолбÑе могÑÑ Ð±ÑÑÑ Ð½ÐµÑвно пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ðº Ð½Ð¾Ð²Ð¾Ð¼Ñ ÑипÑ. ÐÑли ÑÑебÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ Ñложное пÑеобÑазование, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ Ñказание USING, опÑеделÑÑÑее, как полÑÑиÑÑ Ð½Ð¾Ð²Ñе знаÑÐµÐ½Ð¸Ñ Ð¸Ð· ÑÑаÑÑÑ
.
Postgres Pro попÑÑаеÑÑÑ Ñакже пÑеобÑазоваÑÑ Ðº Ð½Ð¾Ð²Ð¾Ð¼Ñ ÑÐ¸Ð¿Ñ Ð·Ð½Ð°Ñение ÑÑолбÑа по ÑмолÑÐ°Ð½Ð¸Ñ (еÑли оно опÑеделено) и вÑе ÑвÑзаннÑе Ñ ÑÑим ÑÑолбÑом огÑаниÑениÑ. Ðо пÑеобÑазование Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð½ÐµÐ¿ÑавилÑнÑм, и Ñогда Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе неожиданнÑе ÑезÑлÑÑаÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑÑно лÑÑÑе ÑдалиÑÑ Ð²Ñе огÑаниÑÐµÐ½Ð¸Ñ ÑÑолбÑа, пеÑед Ñем как менÑÑÑ ÐµÐ³Ð¾ Ñип, а заÑем воÑÑоздаÑÑ Ð¼Ð¾Ð´Ð¸ÑиÑиÑованнÑе должнÑм обÑазом огÑаниÑениÑ.
5.7.7. ÐеÑеименование ÑÑолбÑа #
ЧÑÐ¾Ð±Ñ Ð¿ÐµÑеименоваÑÑ ÑÑолбеÑ, вÑполниÑе:
ALTER TABLE products RENAME COLUMN product_no TO product_number;
5.7.8. ÐеÑеименование ÑаблиÑÑ #
ТаблиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ пеÑеименоваÑÑ Ñак:
ALTER TABLE products RENAME TO items;