Nie można zmienić nazw kolumn w widokach PostgreSQL za pomocą opcji UTWÓRZ LUB WYMIEŃ

37

W PostreSQL 8.3 próbuję utworzyć widok, który będzie wyglądał jak istniejąca tabela, ale będzie miał inne nazwy kolumn.

To działa

CREATE OR REPLACE VIEW gfam.nice_builds AS 
 SELECT (family_tree.family_tree_id) as x,
        family_tree.family_tree_name, family_tree.family_tree_description
   FROM gfam.family_tree;

Powyższe stanowi duplikat tabeli family_tree, ale następująca próba kończy się niepowodzeniem:

CREATE OR REPLACE VIEW gfam.nice_builds AS 
 SELECT (family_tree.family_tree_id) as x,
        family_tree.family_tree_name, family_tree.family_tree_description
   FROM gfam.family_tree;
  • BŁĄD: nie można zmienić nazwy kolumny widoku „identyfikator_drzewa”

Jak mogę zmienić nazwy kolumn?

Aleksandr Levchuk
źródło

Odpowiedzi:

45

Mogę odtworzyć twój błąd ... w moim przypadku najpierw utworzyłem kolumnę jako „data”, a następnie jako „x” (próbowałem sprawdzić, czy jest to problem ze słowem zastrzeżonym; nie było to:

ERROR:  cannot change name of view column "date" to "x"

Jeśli drop viewwydasz pierwszy, pozwoli on odtworzyć widok o zmienionej nazwie. Nie mam pojęcia, dlaczego create or replacetego nie zrobię.


Wyjaśnienie autorstwa Colin 't Hart :

DokumentacjiCREATE VIEW wyjaśnia dość dobrze, myślę:

Nowe zapytanie musi wygenerować te same kolumny, które zostały wygenerowane przez istniejące zapytanie widoku (to znaczy te same nazwy kolumn w tej samej kolejności i z tymi samymi typami danych), ale może dodać dodatkowe kolumny na końcu listy.

Joe
źródło
Rzeczywiście, musisz dodać nową kolumnę na końcu listy kolumn SELECT , w przeciwnym razie pojawi się błąd!
1
Trochę nie na temat komentarza: napotkałem podobny problem, gdy próbowałem agregować dane z dwóch tabel za pomocą widoku. Ale rzeczywiście miałem różne typy ( VARCHARw pierwszej tabeli i TEXTw drugiej tabeli) dla tych samych nazwanych kolumn. Spędziłem dużo czasu na badaniu, dopóki nie zauważyłem, że wyświetlacze IDE VARCHARdla obu tabel! Tylko czysty pg_dumppomógł mi.
flaz14
31

Możesz także użyć ALTER TABLE tbl RENAME COLUMN foo TO bardo zmiany nazwy wyświetlanych kolumn.

Peter Eisentraut
źródło
Co tbltu jest czy to jest rzeczywista tabela, dla której tworzony jest widok, czy to jest nazwa widoku?
Eugen Konkov
@EugenKonkov Wygląda na to, że to widok. Przetestowałem to i działa
DatabaseShouter