Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 31 additions & 15 deletions hw6.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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.
Expand Down