PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ändern Sie die in Ansichten verwendeten PostgreSQL-Spalten

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.