From 384cc56baa4ae751945b0ae23cb84c5356ed5950 Mon Sep 17 00:00:00 2001 From: plidan123 Date: Fri, 19 Dec 2025 14:57:11 +0300 Subject: [PATCH 1/2] Update hw6.sql --- hw6.sql | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/hw6.sql b/hw6.sql index 137f2a3..3b7d534 100644 --- a/hw6.sql +++ b/hw6.sql @@ -54,13 +54,18 @@ FROM schema1.offices; -- Ответ: 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 строкам таблицы. + +-- UPD: + +-- Результат: ERROR - не можем исключить столбец из преставления, +-- так как он является первичным ключом. + +-- UPD: -- 3 b) Как добиться нужного результата? @@ -87,11 +92,21 @@ SELECT * FROM schema1.offices; -- 3) Добавление email: ALTER TABLE schema1.offices ADD COLUMN email varchar(100); +select * +from schema1.v_offices_all; + -- 4 a) Проверка: SELECT * FROM schema1.v_offices_all; --- включает ли выборка email? Да. --- Представление со звездочкой хранит не список колонок, а правило SELECT *. --- Поэтому новые поля автоматически попадают в выдачу. + +-- UPD: + +-- включает ли выборка email? Нет. +-- Представление хранит список столбцов, +-- сформированный в момент его создания. +-- Добавленные позже столбцы в него не попадают. + +-- UPD: + -- 4 b) План: -- Ответ: тот же Seq Scan. From f3f98d4f36277ebc391288dc1726ec939a9163cf Mon Sep 17 00:00:00 2001 From: plidan123 Date: Sun, 21 Dec 2025 18:44:37 +0300 Subject: [PATCH 2/2] new update hw6.sql --- hw6.sql | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/hw6.sql b/hw6.sql index 3b7d534..4d73881 100644 --- a/hw6.sql +++ b/hw6.sql @@ -47,37 +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: + + CREATE OR REPLACE VIEW schema1.v_offices_info AS SELECT office_name, office_country, office_city FROM schema1.offices; - --- UPD: - -- Результат: ERROR - не можем исключить столбец из преставления, -- так как он является первичным ключом. --- UPD: - +-- 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 @@ -92,10 +93,10 @@ SELECT * FROM schema1.offices; -- 3) Добавление email: ALTER TABLE schema1.offices ADD COLUMN email varchar(100); -select * -from schema1.v_offices_all; --- 4 a) Проверка: SELECT * FROM schema1.v_offices_all; + +-- 4 a) Проверка: +SELECT * FROM schema1.v_offices_all; -- UPD: