PostgreSQL — управление представлениями

Опубликовано: 4 Октября, 2022

В этой статье мы узнаем о представлениях и управлении представлениями в 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/