Permanent løsning for denne sag
For at undgå problemet helt, brug datatypen text
eller varchar
/ character varying
uden en længdeangivelse i stedet for character varying(n)
. Læs om disse datatyper i manualen.
CREATE TABLE monkey(name text NOT NULL)
Hvis du virkelig ønsker at håndhæve en maksimal længde, skal du oprette en CHECK
begrænsning :
ALTER TABLE monkey
ADD CONSTRAINT monkey_name_len CHECK (length(name) < 101);
Du kan til enhver tid ændre eller droppe denne begrænsning uden at røre ved afhængige objekter som f.eks. visninger og uden at tvinge Postgres til at skrive nye rækker i tabellen på grund af ændringen af type (hvilket ikke altid er nødvendigt mere i moderne version af Postgres).
Detaljeret forklaring
Som foreslået af @Michael tilføjer jeg nogle mere generelle oplysninger:
En visning i PostgreSQL er ikke bare et "alias til underforespørgsel". Visninger er implementeret som specielle tabeller med en regel ON SELECT TO my_view DO INSTEAD
. (Det er derfor, du kan ændre visninger med en ALTER TABLE
kommando.) Du kan GRANT
privilegier til det, tilføje kommentarer eller endda definere kolonnestandarder (nyttigt for en regel ON INSERT TO my_view DO INSTEAD...
). Læs mere i manualen her eller her.
Hvis du ændrer underliggende objekter, skal du også ændre den definerende forespørgsel for enhver afhængig visning. ALTER VIEW
sætning kan kun ændre hjælpeattributter for en visning. Brug CREATE OR REPLACE VIEW
for at ændre forespørgslen - det vil bevare eventuelle yderligere attributter.
Men hvis du ønsker at ændre datatyper for resulterende kolonner (som i det foreliggende tilfælde), CREATE OR REPLACE VIEW
er ikke muligt. Du skal DROP
den gamle og CREATE
et nyt syn. Dette vil aldrig slette nogen data fra de underliggende tabeller. Det vil slip dog eventuelle yderligere attributter i visningen, som også skal genskabes.