sql >> Databáze >  >> RDS >> PostgreSQL

Změňte sloupce PostgreSQL používané v pohledech

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.




  1. Android with Room - Jak nastavit cizí klíč s možnou hodnotou Null

  2. Oracle SQL escape znak (pro '&')

  3. MySQL CAST – Jak psát Cast v MySQL

  4. Mohu vytvořit databázi pomocí PDO v PHP?