sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-kolommen wijzigen die in weergaven worden gebruikt

Permanente oplossing voor dit geval

Gebruik het gegevenstype text om het probleem helemaal te vermijden of varchar / character varying zonder lengtespecificatie in plaats van character varying(n) . Lees over deze datatypes in de handleiding.

CREATE TABLE monkey(name text NOT NULL)

Als je echt een maximale lengte wilt afdwingen, maak dan een CHECK . aan beperking :

ALTER TABLE monkey 
  ADD CONSTRAINT monkey_name_len CHECK (length(name) < 101);

Je kunt die beperking op elk moment wijzigen of laten vallen zonder afhankelijke objecten zoals views aan te raken en zonder Postgres te dwingen nieuwe rijen in de tabel te schrijven vanwege de verandering van type (wat niet altijd meer nodig is in de moderne versie van Postgres).

Gedetailleerde uitleg

Zoals voorgesteld door @Michael, voeg ik wat meer algemene informatie toe:

Een view in PostgreSQL is niet zomaar een "alias naar subquery". Weergaven worden geïmplementeerd als speciale tabellen met een regel ON SELECT TO my_view DO INSTEAD . (Daarom kun je weergaven wijzigen met een ALTER TABLE commando.) U kunt GRANT privileges eraan toe, voeg opmerkingen toe of definieer zelfs kolomstandaarden (handig voor een regel ON INSERT TO my_view DO INSTEAD... ). Lees hier of hier meer in de handleiding.

Als u onderliggende objecten wijzigt, moet u ook de definiërende query van een afhankelijke weergave wijzigen. De ALTER VIEW statement kan alleen hulpattributen van een view wijzigen. Gebruik CREATE OR REPLACE VIEW om de zoekopdracht te wijzigen - het behoudt alle extra attributen.

Als u echter de gegevenstypen van de resulterende kolommen wilt wijzigen (zoals in het onderhavige geval), CREATE OR REPLACE VIEW is niet mogelijk. Je moet DROP de oude en CREATE een nieuwe kijk. Hiermee worden nooit gegevens van de onderliggende tabellen verwijderd. Het zal laat echter eventuele aanvullende kenmerken van de weergave vallen, die ook opnieuw moeten worden gemaakt.




  1. Prestatiemeteritems bewaken via PERFMON | Problemen met SQL Server-prestaties oplossen -3

  2. Verbinding maken met een database met behulp van PHP

  3. Hoe veel rijen samen te voegen met dezelfde id in sql?

  4. SQL Server:meerdere rijen combineren in één rij