PostgreSQL — создание обновляемых представлений

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

Представление может представлять подмножество реальной таблицы, выбирая определенные столбцы или определенные строки из обычной таблицы. Мы можем использовать их для ограничения доступа к исходной таблице, чтобы пользователи могли видеть только часть таблицы. Таблица, из которой создается представление, называется базовой таблицей. Представления могут быть обновляемыми и необновляемыми. Вы можете использовать обновляемые представления в ситуациях, когда вы хотите, чтобы определенные пользователи обновляли определенные столбцы определенных таблиц. Любое представление является обновляемым, если оно соответствует следующим требованиям:

  • В предложении FROM определяющего запроса представления должна быть только одна запись.
  • Список выбора не должен содержать каких-либо агрегатных функций, таких как SUM, MIN, MAX и т. д.
  • Операторы GROUP BY, HAVING, LIMIT, OFFSET, DISTINCT, WITH, UNION, INTERSECT и EXCEPT нельзя использовать в запросе в представлении.

Это было бы более понятно с помощью примера. Давайте посмотрим на следующий пример. Ниже приведена таблица под названием «пример», в которой содержатся некоторые основные данные о сотрудниках: +

Синтаксис для создания обновляемого представления

CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

Создание обновляемого представления

Теперь мы можем создать представление из исходной таблицы «пример». Представление может занимать один или несколько столбцов в списке выбора в зависимости от того, какой доступ вы хотите предоставить своим пользователям. Давайте создадим обновляемое представление «my_view» с тремя столбцами: идентификатором, именем и отделом соответственно.

CREATE OR REPLACE VIEW my_view AS
SELECT id,name,dept from example
WHERE dept="Sales";

Output:
CREATE VIEW
Query returned successfully in 220 msec.

Запрос результатов

Мы можем просто увидеть результаты созданного представления, просто выполнив запрос SELECT следующим образом:

SELECT * from my_view; 

Выход :

Поскольку была одна строка с отделом «Продажи», мы получили только одну строку в результатах.

Вставка в созданный вид

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

SYNTAX:
INSERT INTO view_name (column1,column2,...columnN) VALUES(Val1, val2...valN);

EXAMPLE:
INSERT INTO my_view (id,name,dept)VALUES(106,"Johnson","Health");

Теперь, если мы запустим запрос SELECT, в созданном представлении не будет наблюдаться никаких изменений, и это связано с тем, что новый отдел, который мы добавили при вставке значения, — «Здоровье», но при создании нашего представления мы упомянули «Продажи». в предложении WHERE, поэтому в фильтре не будет наблюдаться никаких изменений. Однако мы можем увидеть изменение (добавлена новая строка) в исходной таблице.

Итак, теперь, если мы запустим запрос как «SELECT * FROM example», вывод будет следующим:

Здесь можно наблюдать два основных изменения: значение «Null» в последнем столбце таблицы и общее количество строк, увеличенное на единицу. Это показывает, что мы успешно создали обновляемое представление. Теперь давайте посмотрим, как мы можем сделать некоторые обновления в самом представлении.

Обновление созданного вида

Мы также можем обновить созданное представление, используя следующий синтаксис:

SYNTAX:
UPDATE view_name SET column = "New Value";

EXAMPLE:
UPDATE my_view SET dept = "Health";

OUTPUT:
UPDATE VIEW
Query returned successfully in 180 msec.

Итак, теперь, если мы запустим запрос как «SELECT * FROM example», вывод будет следующим:

Основные изменения, которые можно наблюдать здесь: строка, которая ранее содержала значение отдела как «Продажи», была обновлена со значением отдела как «Здоровье». Также изменен порядок строки 2, теперь она добавлена последней.

Вот как мы можем создавать и выполнять операции с обновляемым представлением.