Постоянно решение за този случай
За да избегнете напълно проблема, използвайте типа данни text
или varchar
/ character varying
без спецификатор на дължина вместо character varying(n)
. Прочетете за тези типове данни в ръководството.
CREATE TABLE monkey(name text NOT NULL)
Ако наистина искате да наложите максимална дължина, създайте CHECK
ограничение :
ALTER TABLE monkey
ADD CONSTRAINT monkey_name_len CHECK (length(name) < 101);
Можете да промените или отхвърлите това ограничение по всяко време, без да докосвате зависими обекти като изгледи и без да принуждавате Postgres да пише нови редове в таблицата поради промяната на типа (което вече не винаги е необходимо в съвременната версия на Postgres).
Подробно обяснение
Както е предложено от @Michael, добавям още обща информация:
Изгледът в PostgreSQL не е просто "псевдоним на подзаявка". Изгледите се изпълняват като специални таблици с правило ON SELECT TO my_view DO INSTEAD
. (Ето защо можете да променяте изгледите с ALTER TABLE
команда.) Можете да GRANT
привилегии към него, добавяне на коментари или дори дефиниране на колони по подразбиране (полезно за правило ON INSERT TO my_view DO INSTEAD...
). Прочетете повече в ръководството тук или тук.
Ако промените основните обекти, трябва да промените и определящата заявка на всеки зависим изглед. ALTER VIEW
изразът може да променя само спомагателните атрибути на изглед. Използвайте CREATE OR REPLACE VIEW
за да промените заявката - тя ще запази всички допълнителни атрибути.
Въпреки това, ако искате да промените типовете данни на получените колони (както в случая), CREATE OR REPLACE VIEW
не е възможно. Трябва да DROP
стария и CREATE
нов изглед. Това никога няма да изтрие никакви данни от основните таблици. Тоще махнете всички допълнителни атрибути на изгледа, които също трябва да бъдат пресъздадени.