2015-07-31 3 views
0

Я допустил ошибку в названии столбца в материализованном представлении Postgresql 9.4.Переименовать столбец в представлении: ошибка или функция?

Я посмотрел на документацию, синтаксис:

ALTER MATERIALIZED VIEW my_view_name 
RENAME COLUMN old_name 
TO new_name; 

Он работал отлично.

Тогда у меня была такая же опечатка в не-материализованный вид. Я сделал копию пасты запроса, забыл удалить ключевое слово MATERIALIZED и ... он сработал!

Страннее, если я стараюсь:

ALTER VIEW my_view_name 
RENAME COLUMN old_name 
TO new_name; 

Это не работает, я получаю ошибку синтаксиса!

Другими словами: кажется, что я могу изменить имя столбца обычного вида, используя синтаксис из материализованного представления.

Это ошибка или функция?

Шаги для воспроизведения:

1) Создайте простую таблицу

CREATE TABLE films (
    code  char(5) CONSTRAINT firstkey PRIMARY KEY, 
    title  varchar(40) NOT NULL 
); 

2) Создать представление как простой выбор:

CREATE VIEW view_films AS SELECT * FROM films; 

3) Попробуйте переименовать колонка:

ALTER VIEW view_films RENAME COLUMN title TO new_title; 

ERROR: syntax error at or near "COLUMN"

4) Попробуйте то же самое, но с ключевым словом MATERIALIZED:

ALTER MATERIALIZED VIEW view_films RENAME COLUMN title TO new_title; 

ALTER TABLE

ответ

0

Я не уверен, что с MATERIALIZED VIEW, но и для нормального зрения; представление не хранит никаких данных, а представляет собой только сохраненный запрос SELECT, и после того, как он сказал select * from view_name, он ничего не делает, кроме выполнения основного оператора SELECT в целевой таблице.

Таким образом, оператор ALTER для изменения имени столбца должен быть запущен против таблицы, на которой создается представление, а не на представлении; и он должен работать нормально. Попробуй ниже:

CREATE TABLE films (
    code  char(5) CONSTRAINT firstkey PRIMARY KEY, 
    title  varchar(40) NOT NULL 
); 

CREATE VIEW view_films AS SELECT * FROM films; 

ALTER TABLE films RENAME COLUMN title TO new_title; 

Для колонки MATERIALIZED VIEW переименования будет возможной причиной, это делает данные магазина.

На ваш комментарий: вы должны заново создать определение вида после ALTERING схемы таблицы. Проверьте эту скрипту http://sqlfiddle.com/#!15/9ebe1/1

+0

Протестировано: изменение имени столбца из таблицы не влияет на результат представления (столбец по-прежнему имеет старое имя). –

+0

См. Edit in answer; если это поможет. В сущности, вы должны повторно создать свое определение определения после изменения схемы таблицы. – Rahul

Смежные вопросы