Не могу переименовать столбцы в представлениях PostgreSQL с помощью CREATE OR REPLACE


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

Я могу воспроизвести вашу ошибку ... в моем случае я сначала создал столбец как «date», а затем как «x» (пытался определить, была ли это проблема с зарезервированным словом; это не так:

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

Если вы введете drop viewсначала, это позволит вам заново создать представление с измененным именем. Я понятия не имею, почему create or replaceне буду этого делать.


Разъяснение Колин Т Харта :

Документации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.