Неможливо перейменувати стовпці в представленнях 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.