PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zmień kolumny PostgreSQL używane w widokach

Stałe rozwiązanie dla tego przypadku

Aby całkowicie uniknąć problemu, użyj typu danych text lub varchar / character varying bez specyfikatora długości zamiast character varying(n) . Przeczytaj o tych typach danych w instrukcji.

CREATE TABLE monkey(name text NOT NULL)

Jeśli naprawdę chcesz wymusić maksymalną długość, utwórz CHECK ograniczenie :

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

Możesz zmienić lub usunąć to ograniczenie w dowolnym momencie bez dotykania zależnych obiektów, takich jak widoki i bez zmuszania Postgresa do pisania nowych wierszy w tabeli ze względu na zmianę typu (co nie zawsze jest już konieczne w nowoczesnej wersji Postgresa).

Szczegółowe wyjaśnienie

Zgodnie z propozycją @Michael dodaję kilka bardziej ogólnych informacji:

Widok w PostgreSQL to nie tylko "alias do podzapytania". Widoki są zaimplementowane jako specjalne tabele z regułą ON SELECT TO my_view DO INSTEAD . (Dlatego możesz zmieniać widoki za pomocą ALTER TABLE polecenie.) Możesz GRANT uprawnienia do niego, dodawać komentarze, a nawet definiować wartości domyślne kolumn (przydatne w przypadku reguły ON INSERT TO my_view DO INSTEAD... ). Przeczytaj więcej w instrukcji tutaj lub tutaj.

Jeśli zmienisz obiekty bazowe, musisz również zmienić zapytanie definiujące dowolnego zależnego widoku. ALTER VIEW Instrukcja może zmienić tylko atrybuty pomocnicze widoku. Użyj CREATE OR REPLACE VIEW aby zmienić zapytanie - zachowa wszelkie dodatkowe atrybuty.

Jeśli jednak chcesz zmienić typy danych w kolumnach wynikowych (jak w omawianym przypadku), CREATE OR REPLACE VIEW nie jest możliwe. Musisz DROP stary i CREATE nowy widok. To nigdy nie usunie żadnych danych z tabel źródłowych. będzie upuść jednak wszelkie dodatkowe atrybuty widoku, które również muszą zostać odtworzone.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co dokładnie wyjaśnia PostgreSQL?

  2. Wystąpił błąd podczas instalacji pg (0.17.1), a Bundler nie może kontynuować

  3. Jak działa funkcja LocalTimeStamp() w PostgreSQL

  4. Ewolucja tolerancji błędów w PostgreSQL:podróż w czasie

  5. Jak przekazać niestandardową tablicę typów do funkcji Postgres