diff --git a/hw6.sql b/hw6.sql index 137f2a3..4d73881 100644 --- a/hw6.sql +++ b/hw6.sql @@ -47,32 +47,38 @@ SELECT office_id, office_name, office_country, office_city FROM schema1.offices; -- 2 a) Проверка: --- SELECT * FROM schema1.v_offices_info; +SELECT * FROM schema1.v_offices_info; -- 2 b) План выполнения: --- EXPLAIN SELECT * FROM schema1.v_offices_info; +EXPLAIN SELECT * FROM schema1.v_offices_info; -- Ответ: Seq Scan по таблице offices, потому что VIEW просто подставляется. --- 3 a) Удаляем office_id: +-- 3 a) Исключаем из представления office_id: + + CREATE OR REPLACE VIEW schema1.v_offices_info AS SELECT office_name, office_country, office_city FROM schema1.offices; --- Представление перестает быть изменяемым, т.к. исчез уникальный идентификатор. --- PostgreSQL не может однозначно сопоставлять строки VIEW строкам таблицы. +-- Результат: ERROR - не можем исключить столбец из преставления, +-- так как он является первичным ключом. +-- 3 b) как правильно: +DROP VIEW schema1.v_offices_info; --- 3 b) Как добиться нужного результата? --- Использовать WITH CHECK OPTION или INSTEAD OF-триггеры. +CREATE VIEW schema1.v_offices_info AS +SELECT office_name, office_country, office_city +FROM schema1.offices; --- 4) Добавление manager_name обратно: -CREATE OR REPLACE VIEW schema1.v_offices_info AS -SELECT office_id, office_name, office_country, office_city, manager_name -FROM schema1.offices; +-- 4) Добавление manager_name: +DROP VIEW schema1.v_offices_info; +CREATE VIEW schema1.v_offices_info AS +SELECT office_name, office_country, office_city, manager_name +FROM schema1.offices; -- 4 @@ -87,11 +93,21 @@ SELECT * FROM schema1.offices; -- 3) Добавление email: ALTER TABLE schema1.offices ADD COLUMN email varchar(100); --- 4 a) Проверка: SELECT * FROM schema1.v_offices_all; --- включает ли выборка email? Да. --- Представление со звездочкой хранит не список колонок, а правило SELECT *. --- Поэтому новые поля автоматически попадают в выдачу. + +-- 4 a) Проверка: +SELECT * FROM schema1.v_offices_all; + + +-- UPD: + +-- включает ли выборка email? Нет. +-- Представление хранит список столбцов, +-- сформированный в момент его создания. +-- Добавленные позже столбцы в него не попадают. + +-- UPD: + -- 4 b) План: -- Ответ: тот же Seq Scan.