Как работать с командой View в PostgreSQL - Академия Selectel

Как работать с командой View в PostgreSQL

В этой статье рассмотрим работу с представлениями в PostgreSQL, изучим, как их создавать, обновлять, изменять и удалять.

PostgreSQL — популярная система управления базами данных (СУБД). Она поддерживает ACID (набор требований к сохранности данных), свободно распространяется, достаточно надежна и безопасна и содержит множество типов данных SQL.  Помимо прочего она предлагает пользователям возможность создания представлений (View).

Что такое представления (View) в PostgreSQL

В PostgreSQL представление — это виртуальная таблица. Она составляется на основе данных из обычных таблиц, обеспечивает удобный и интуитивно понятный способ организации информации. Важно отметить, что представления сами по себе не хранят данные, а лишь выполняют описанный в себе запрос.

Представления бывают двух видов: обычные и материализованные. Первые просто выполняют запросы, а вторые физически хранят результаты сложных запросов и поддерживают обновление кэшированных данных. 

Последний тип представления полезен, когда есть запросы, которые требуют больших вычислений. Он позволяет сохранить их результат, что значительно улучшает производительность базы данных, особенно когда информация в них изменяется редко.

Операторы CREATE VIEW и REPLACE VIEW

Оператор CREATE VIEW используется в PostgreSQL для создания представления, а REPLACE VIEW — для его обновления.

Синтаксис операторов выглядит следующим образом:


    CREATE [ OR REPLACE ] VIEW view_name [ (column_name [, ...] ) ]
AS
    select_statement
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ];
  • CREATE VIEW —ключевое слово, которое указывает на создание представления.
  • REPLACE — опциональное ключевое слово, которое позволяет заменить имеющееся представление с тем же именем, если оно уже существует.
  • view_name —имя представления, которое вы хотите создать.
  • column_name —опциональный список имен столбцов, которые вы хотите включить в представление. Если не указан, представление будет содержать все столбцы, которые возвращает запросом.
  • select_statement —запрос SELECT, определяющий данные, которые будут возвращены представлением.
  • WITH [ CASCADED | LOCAL ] CHECK OPTION —опциональная фраза, которая позволяет применять ограничения CHECK при вставке или обновлении данных через представление. CASCADED применяет ограничения CHECK к базовым таблицам, LOCAL — только к представлению.

Пример работы с оператором CREATE VIEW:


    CREATE VIEW employee_view AS
SELECT employee_id, first_name, last_name, department
FROM employees
WHERE department = 'IT';

В этом примере создается представление employee_view, которое будет содержать столбцы employee_id, first_name, last_name и department из таблицы employees, где значение столбца department равно «IT».

Удаление представления

Чтобы удалить представление, используется оператор DROP VIEW. Его синтаксис в PostgreSQL выглядит следующим образом:


    DROP VIEW [ IF EXISTS ] view_name [, ...] [ CASCADE | RESTRICT ];
  • DROP VIEW —ключевое слово, которое указывает на удаление представления.
  • IF EXISTS — опциональное ключевое слово, которое позволяет игнорировать ошибку, если представление с указанным именем не существует.
  • view_name — имя представления, которое вы хотите удалить.
  • CASCADE или RESTRICT — опциональные ключевые слова, которые определяют, что произойдет с другими объектами, зависящими от представления. CASCADE удалит эти объекты вместе с представлением, а RESTRICT предотвратит удаление представления, если на него есть зависимые объекты.

Пример работы с оператором DROP VIEW:


    DROP VIEW employee_view;

В этом примере удаляется представление с именем employee_view.


    DROP VIEW IF EXISTS employee_view, department_view CASCADE;

Здесь удаляются представления employee_view и department_view, если они существуют. Если на них есть зависимые объекты, такие как индексы или правила, они также будут удалены из-за ключевого слова CASCADE.

Вывод списка представлений

Вывод списка View в PostgreSQL

Чтобы вывести список представлений в PostgreSQL, вы можете использовать такой запрос:


    SELECT table_name
FROM information_schema.tables
WHERE table_type = 'VIEW' AND table_schema = 'public';

Этот запрос вернет список представлений в схеме public.

Вывод списка View в PgAdmin

Чтобы вывести список представлений в PgAdmin, вам необходимо выполнить несколько шагов.

  1. Откройте PgAdmin и подключитесь к вашему серверу баз данных PostgreSQL.
  2. В левой панели навигации выберите базу данных, в которой находятся представления.
  3. Разверните ветку Схемы и выберите схему, в которой находятся представления.
  4. В разделе Объекты выберите Представления (или Views), чтобы отобразить список представлений в этой схеме.
  5. В правой панели отобразятся все представления, доступные в выбранной схеме. Вы можете просмотреть их имена и другую информацию о представлениях.

Предоставление прав доступа к представлениям

Для предоставления прав доступа к представлениям в PostgreSQL используется оператор GRANT SELECT ON. Пример синтаксиса:


    GRANT SELECT ON view_name TO user_name;

В этом примере  мы передаем права пользователю user_name на создание запросов к таблице view_name.

Обратите внимание, что для предоставления прав доступа к представлениям вам может понадобиться соответствующая роль или привилегии. Убедитесь, что у вашего пользователя есть необходимые права для выполнения операции GRANT SELECT.

Минусы использования представлений

Представления View имеют и минусы.

  • Ограничения обновления данных. Представления View в PostgreSQL доступны только для чтения, нельзя обновлять данные напрямую через них. Для обновления данных вам придется обращаться к базовой таблице напрямую.
  • Ограничения производительности. Запросы через представления могут повлиять на производительность из-за дополнительных операций, таких как объединение таблиц или выполнение сложных вычислений.
  • Обновление данных в базовых таблицах. При обновление данных в базовой таблице представление может не отразить эти изменения немедленно. Из-за этого понадобиться обновить или пересоздать представления, чтобы увидеть актуальные данные.
  • Зависимость от базовых таблиц. Представление View зависит от базовой таблиц, на основе которой оно созданы. Если она изменяется или удаляется, представление может потерять свою функциональность или стать недоступным.