Керування поданнями

Проєктування баз даних

Lis Sulmont

Curriculum Manager

Створення складніших подань

  • Агрегація: SUM(), AVG(), COUNT(), MIN(), MAX(), GROUP BY тощо
  • Обʼєднання: INNER JOIN, LEFT JOIN. RIGHT JOIN, FULL JOIN
  • Умови: WHERE, HAVING, UNIQUE, NOT NULL, AND, OR,>,< тощо
Проєктування баз даних

Надання й відкликання доступу до подання

GRANT privilege(s) або REVOKE privilege(s)

ON object

TO role або FROM role

  • Привілеї: SELECT, INSERT, UPDATE, DELETE тощо
  • Обʼєкти: таблиця, подання, схема тощо
  • Ролі: користувач бази даних або група користувачів
Проєктування баз даних

Приклад надання й відкликання

$$

GRANT UPDATE ON ratings TO PUBLIC;  

$$

REVOKE INSERT ON films FROM db_user;
Проєктування баз даних

Оновлення подання

UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama';

Не всі подання можна оновлювати

  • Подання побудоване з однієї таблиці
  • Без віконних або агрегатних функцій
1 https://www.postgresql.org/docs/9.5/sql-update.html
Проєктування баз даних

Вставка в подання

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

Не всі подання підтримують вставку

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Проєктування баз даних

Вставка в подання

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

Не всі подання підтримують вставку

Висновок: уникайте змін даних через подання

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Проєктування баз даних

Видалення подання

DROP VIEW view_name [ CASCADE | RESTRICT ];
  • RESTRICT (типово): повертає помилку, якщо є обʼєкти, що залежать від подання
  • CASCADE: видаляє подання та всі обʼєкти, що від нього залежать
Проєктування баз даних

Перевизначення подання

CREATE OR REPLACE VIEW view_name AS new_query
  • Якщо подання з view_name існує, його замінено
  • new_query має сформувати ті самі назви стовпців, порядок і типи даних, що й стара вибірка
  • Вивід стовпців може відрізнятися
  • Нові стовпці можна додати в кінці

Якщо ці умови не виконані, видаліть наявне подання й створіть нове

1 https://www.postgresql.org/docs/9.2/sql-createview.html
Проєктування баз даних

Зміна подання

ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER VIEW [ IF EXISTS ] name OWNER TO new_owner
ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
1 https://www.postgresql.org/docs/9.2/sql-alterview.html
Проєктування баз даних

Давайте потренуємось!

Проєктування баз даних

Preparing Video For Download...