it-swarm.dev

Nie można zmienić nazw kolumn w widokach PostgreSQL za pomocą CREATE OR REPLACE

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 „id_drzewa”

Jak mogę zmienić nazwy kolumn?

40

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

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

Jeśli wydasz drop view najpierw pozwoli ci odtworzyć widok o zmienionej nazwie. Nie mam pojęcia, dlaczego create or replace nie zrobi tego.


Wyjaśnienie przez Colin 't Hart :

dokumentacja dla CREATE VIEW wyjaśnia to całkiem 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.

50
Joe

Możesz użyć ALTER TABLE tbl RENAME COLUMN foo TO bar, aby zmienić także nazwę widoku kolumn.

31
Peter Eisentraut