Trvalé řešení pro tento případ
Chcete-li se problému zcela vyhnout, použijte datový typ text
nebo varchar
/ character varying
bez specifikátoru délky namísto character varying(n)
. Přečtěte si o těchto typech dat v příručce.
CREATE TABLE monkey(name text NOT NULL)
Pokud opravdu chcete vynutit maximální délku, vytvořte CHECK
omezení :
ALTER TABLE monkey
ADD CONSTRAINT monkey_name_len CHECK (length(name) < 101);
Toto omezení můžete kdykoli změnit nebo zrušit, aniž byste se dotkli závislých objektů, jako jsou pohledy, a aniž byste Postgres nutili zapisovat nové řádky do tabulky kvůli změně typu (což už v moderní verzi Postgresu není vždy nutné).
Podrobné vysvětlení
Jak navrhl @Michael, přidávám nějaké další obecné informace:
Pohled v PostgreSQL není jen „alias poddotazu“. Pohledy jsou implementovány jako speciální tabulky s pravidlem ON SELECT TO my_view DO INSTEAD
. (Proto můžete změnit pohledy pomocí ALTER TABLE
příkaz.) Můžete GRANT
oprávnění, přidávat komentáře nebo dokonce definovat výchozí hodnoty sloupců (užitečné pro pravidlo ON INSERT TO my_view DO INSTEAD...
). Přečtěte si více v příručce zde nebo zde.
Pokud změníte podkladové objekty, musíte také změnit definující dotaz libovolného závislého pohledu. ALTER VIEW
může změnit pouze pomocné atributy pohledu. Použijte CREATE OR REPLACE VIEW
změnit dotaz – zachová všechny další atributy.
Pokud však chcete změnit datové typy výsledných sloupců (jako v tomto případě), CREATE OR REPLACE VIEW
není možné. Musíte DROP
staré a CREATE
nový pohled. To nikdy neodstraní žádná data podkladových tabulek. Bude zrušte však všechny další atributy zobrazení, které je také nutné znovu vytvořit.