Неможливо перейменувати стовпці в представленнях PostgreSQL СТВОРИТИ АБО ЗАМОВИТИ


37

У PostreSQL 8.3 я намагаюся створити подання, яке буде схоже на існуючу таблицю, але має різні назви стовпців.

Це працює

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;

Вищезгадане робить дублікат таблиці family_tree, але наступна спроба не вдається:

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;
  • ПОМИЛКА: не вдається змінити назву стовпця перегляду "family_tree_id"

Як я можу перейменувати стовпці?

Відповіді:


45

Я можу відтворити вашу помилку ... у моєму випадку я створив спочатку стовпець як "дата", потім як "х" (намагався зрозуміти, чи не проблема із зарезервованим словом; це не так:

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

Якщо ви опублікуєте drop viewперший, це дозволить вам створити перегляд зі зміненою назвою. Я поняття не маю, чому create or replaceцього не зробиш.


Роз'яснення Colin 't Hart :

ДокументаціїCREATE VIEW пояснює це дуже добре, я думаю:

Новий запит повинен генерувати ті самі стовпці, які були створені за допомогою наявного запиту перегляду (тобто ті самі назви стовпців у тому самому порядку та з тими ж типами даних), але він може додавати додаткові стовпці до кінця списку.


Дійсно, вам потрібно додати новий стовпчик до кінця списку стовпців SELECT , інакше ви отримаєте помилку!

1
Трохи не тематичний коментар: Я стикався з подібною проблемою, коли намагався зібрати дані з двох таблиць за допомогою перегляду. Але дійсно у мене були різні типи (і VARCHARв першій, і TEXTв другій таблиці) для однойменних стовпців. Я витратив багато часу на дослідження, поки не помітив, що IDE відображає VARCHARобидві таблиці! Тільки чистий pg_dumpдопоміг мені.
— flaz14

31

Ви також можете ALTER TABLE tbl RENAME COLUMN foo TO barперейменувати стовпці перегляду.


Що tblтут? це фактична таблиця, для якої створено представлення, чи це ім'я перегляду?
— Євген Конков

@EugenKonkov Здається, це думка. Я перевірив це, і він працює
— DatabaseShouter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.