PostgreSQL — управление представлениями
В этой статье мы узнаем о представлениях и управлении представлениями в PostgreSQL. Мы познакомим вас с понятием представлений, покажем, как создаются, модифицируются и удаляются представления. И самое главное, мы также увидим, как представления могут быть реализованы в СУБД.
Представление в PostgreSQL можно определить как виртуальную таблицу, полученную из базовых базовых таблиц или ранее определенных представлений.
Важно отметить следующие моменты:
- Представление не обязательно существует в своей физической форме, т. е. его кортежи не всегда физически хранятся в базе данных.
- Это ограничивает операции обновления, которые можно применять к представлениям.
- Нет абсолютно никаких ограничений на запрос представления.
Создание представлений PostgreSQL:
Чтобы указать представление, мы используем оператор создания представления .
Syntax: CREATE [TEMP |TEMPORARY] VIEW view_name AS SELECT column1, column2.... FROM table_name WHERE [condition];
Представлению присваивается имя виртуальной таблицы, список имен атрибутов и запрос для определения содержимого представления.
Пример:
Рассмотрим следующие таблицы:
Теперь, исходя из следующих таблиц, предположим, что мы хотим создать представление, позволяющее вычислить количество копий для каждой книги, указанной в таблице книг.
Это можно сделать следующим образом:
CREATE VIEW BOOKCOUNT AS SELECT Book_id,Title, Sum(No_of_copies) FROM BOOK A, BOOK_COPIES B WHERE A.Book_id = B.Book_ID GROUP BY A.BOOK_ID; Select * from BOOKCOUNT;
Вывод следующего кода будет:
Обновление представлений PostgreSQL:
Мы можем изменить определяющий запрос представления, мы используем оператор CREATE VIEW с добавлением OR REPLACE следующим образом:
CREATE OR REPLACE VIEW_NAME AS SELECT column1, column2.... FROM table_name WHERE [condition];
Обновление представления, как правило, невозможно, поскольку оно имеет некоторые побочные эффекты для базовых таблиц. Например, если мы обновляем сумму копий определенной книги, нам придется обновить соответствующее количество книг в таблице bookcount .
Следовательно, мы можем сказать, что:
- Представление с одной определяющей таблицей является обновляемым, если атрибуты представления содержат первичный ключ базового отношения, а также другие атрибуты, для которых не указаны значения по умолчанию.
- Представления, определяемые естественным объединением нескольких таблиц, не подлежат обновлению.
- Представления, определенные с помощью функций группировки и агрегирования, не подлежат обновлению.
С ВАРИАНТОМ ПРОВЕРКИ
Это предложение можно в основном добавить в конец определения представления, если представление необходимо обновить с помощью операторов INSERT, UPDATE, DELETE. Это позволит системе отклонять операции, нарушающие правила SQL для обновления представлений.
В данном представлении BOOKCOUNT, которое мы создали, оно не подлежит обновлению.
Если мы попытаемся обновить представление BOOKCOUNT , мы получим следующую ошибку:
Update BOOKCOUNT set title ="ADP" where Book_ID =1;
ОШИБКА: целевая таблица BOOKCOUNT не подлежит обновлению.
Фактически любое из представлений, содержащих следующие элементы, не подлежит обновлению:
- Агрегирующие функции, такие как MIN, MAX, SUM, AVG и COUNT.
- ОТЧЕТЛИВЫЙ
- Предложение GROUP BY.
- предложение HAVING.
- Предложение UNION или UNION ALL.
- Левое соединение или внешнее соединение.
- Подзапрос в предложении SELECT или в предложении WHERE, который ссылается на таблицу, появился в предложении FROM.
- Ссылка на необновляемое представление в предложении FROM.
- Ссылка только на буквальные значения.
- Множественные ссылки на любой столбец базовой таблицы
Итак, мы создадим еще один вид
CREATE VIEW Example as SELECT title, Author_Name, FROM BOOK, BOOK_AUTHORS WHERE BOOK.Book_ID=BOOK_AUTHORS.Book_ID;
Созданный вид будет:
Теперь давайте обновим это представление, которое мы создали.
Пример обновления представлений
UPDATE Example SET Author_Name="Rahul" WHERE Author_Name="Abhishek";
Обновленный вид будет выглядеть так:
Удаление представлений PostgreSQL
Чтобы удалить существующее представление в PostgreSQL, мы можем использовать инструкцию DROP VIEW следующим образом:
DROP VIEW [ IF EXISTS ] view_name;
Если указанное имя представления не существует, то, очевидно, это приведет к ошибке. Поэтому, чтобы избежать ошибок, мы используем параметр IF EXISTS.
Пример: чтобы удалить созданное нами представление, мы будем использовать следующую команду
DROP VIEW IF EXISTS BOOKCOUNT;
Давайте проверим вывод для того же
После удаления представления, когда мы пытаемся получить столбцы из представления, выдается ошибка о том, что указанное представление не существует.
https://www.geeksforgeeks.org/postgresql-recursive-query/