Mam miejsce, w VIEW
którym próbuję utworzyć skrypt ewolucji, więc mogę dodać do niego kolumnę. Ta część działa dobrze; kolumna dodana dobrze. Jednak odwrotna sytuacja nie działa; usuń ostatnią dodaną kolumnę z ERROR: cannot drop columns from view
komunikatem. Problem polega na tym, że ten konkretny pogląd ma wiele odniesień, zarówno od, jak i do, dlatego nie mogę po prostu DROP CASCADE
tego cholerstwa!
Czy istnieje powód, dla którego nie mogę usunąć nowo dodanej kolumny z danego VIEW
? Co zatem mogę zrobić, aby wykonać to zadanie?
(Uwaga: okoliczności są tutaj takie, jakie są, ale bardzo dobrze widzę podobną sytuację, czyli w wielu przypadkach wypadanie kolumny z widoku).
postgresql
view
postgresql-9.3
Yanick Rochon
źródło
źródło
ALTER VIEW ... ADD COLUMN
. UżywaszCREATE OR REPLACE VIEW
? Pokaż proszę swój kod .CREATE OR REPLACE VIEW
z tym samym def, z wyjątkiem dodatkowej kolumny (ponieważ w tabeli ref'ed dodano nową kolumnę, więc widok musi ją uwzględnić). W „decentralizacja” usuwa kolumnę z ref'ed tabeli, więcVIEW
musi też nie zwracać go już.Odpowiedzi:
PostgreSQL (prawda do co najmniej 9,4) nie obsługuje obecnie usuwania kolumny z
CREATE OR REPLACE VIEW
.Nie ma podstawowego powodu, dla którego nie można dodać obsługi usuwania kolumn, ale nikt jeszcze nie wykonał pracy wymaganej do jej wdrożenia.
CREATE OR REPLACE VIEW
musiałby rekurencyjnie skanować wszystkie zależności i upewnić się, że żadna z nich nie odwołuje się do kolumny, która ma zostać usunięta. Gdyby ich użyliSELECT *
, musiałby usunąć kolumnę z rozszerzenia*
zależności, a następnie zeskanować również jej zależności. Jest przy tym sporo pracy i jest kilka obszarów, w których nie jest jasne, jak dokładnie powinno zachowywać się upuszczanie kolumny, szczególnie jeśli chodzi o interakcje z zrzutem i przeładowaniem. Więc nikt nie chciał tej funkcji na tyle, aby ją wdrożyć. Poprawki i / lub sponsoring rozwoju są mile widziane.Musisz upuścić widok i wszystko, co od niego zależy, a następnie ponownie go utworzyć i jego zależności. (Tak samo było w przypadku dodawania kolumny do widoku; obsługę dodawania kolumn wprowadzono w 8.4).
Zauważ, że ogólnie nie oczekuje się, że DDL będzie odwracalne. Pojęcie „dewolucji” jest naprawdę błędne. Na przykład, jeśli upuścisz kolumnę, a następnie dodasz ją ponownie, danych nadal nie ma.
źródło