Permanente Lösung für diesen Fall
Um das Problem vollständig zu vermeiden, verwenden Sie den Datentyp text
oder varchar
/ character varying
ohne Längenbezeichner anstelle von character varying(n)
. Lesen Sie mehr über diese Datentypen im Handbuch.
CREATE TABLE monkey(name text NOT NULL)
Wenn Sie wirklich eine maximale Länge erzwingen möchten, erstellen Sie einen CHECK
Einschränkung :
ALTER TABLE monkey
ADD CONSTRAINT monkey_name_len CHECK (length(name) < 101);
Sie können diese Einschränkung jederzeit ändern oder löschen, ohne abhängige Objekte wie Ansichten zu berühren und ohne Postgres zu zwingen, aufgrund der Typänderung neue Zeilen in die Tabelle zu schreiben (was in modernen Versionen von Postgres nicht mehr immer erforderlich ist). P>
Detaillierte Erklärung
Wie von @Michael vorgeschlagen, füge ich einige allgemeinere Informationen hinzu:
Eine Ansicht in PostgreSQL ist nicht nur ein "Alias für eine Unterabfrage". Ansichten werden als spezielle Tabellen mit einer Regel ON SELECT TO my_view DO INSTEAD
implementiert . (Deshalb können Sie Ansichten mit einem ALTER TABLE
ändern Befehl.) Sie können GRANT
Privilegien hinzufügen, Kommentare hinzufügen oder sogar Spaltenvorgaben definieren (nützlich für eine Regel ON INSERT TO my_view DO INSTEAD...
). Lesen Sie mehr im Handbuch hier oder hier.
Wenn Sie zugrunde liegende Objekte ändern, müssen Sie auch die definierende Abfrage jeder abhängigen Ansicht ändern. Die ALTER VIEW
-Anweisung kann nur Hilfsattribute einer Ansicht ändern. Verwenden Sie CREATE OR REPLACE VIEW
um die Abfrage zu ändern - es werden alle zusätzlichen Attribute beibehalten.
Wenn Sie jedoch die Datentypen der resultierenden Spalten ändern möchten (wie im vorliegenden Fall), CREATE OR REPLACE VIEW
Ist nicht möglich. Sie müssen DROP
das alte und CREATE
eine neue Ansicht. Dadurch werden niemals Daten der zugrunde liegenden Tabellen gelöscht. Es wird löschen Sie jedoch alle zusätzlichen Attribute der Ansicht, die ebenfalls neu erstellt werden müssen.