Загрузка данных


SELECT COUNT(*) FROM students;   -- 0
ROLLBACK;
SELECT COUNT(*) FROM students;   -- снова все на месте
Сдать: скриншот до/после ROLLBACK (данные вернулись).
Задание 19. Индексы и EXPLAIN
Цель: ускорить запросы и увидеть план выполнения.
-- План запроса без индекса
EXPLAIN ANALYZE
SELECT * FROM students WHERE full_name = 'Иванов Иван';

-- Создать индекс по full_name
CREATE INDEX idx_students_full_name ON students(full_name);

-- План с индексом
EXPLAIN ANALYZE
SELECT * FROM students WHERE full_name = 'Иванов Иван';

-- Список индексов таблицы
\di
Обратить внимание: во втором плане должен появиться Index Scan вместо Seq Scan.
Сдать: скриншот обоих EXPLAIN ANALYZE + \di.
Задание 20. Представления (VIEW) и экспорт в CSV
Цель: создать виртуальную таблицу и выгрузить данные.
-- Представление: студенты с названием группы и возрастом
CREATE OR REPLACE VIEW v_students_full AS
SELECT s.id,
       s.full_name,
       s.age,
       s.email,
       g.group_name
FROM students s
LEFT JOIN groups g ON s.group_id = g.id;

SELECT * FROM v_students_full ORDER BY id;

-- Список представлений
\dv
Экспорт в CSV (метакоманда psql):
\copy (SELECT * FROM v_students_full ORDER BY id) TO 'C:/backup/students.csv' WITH CSV HEADER;
⚠️ Путь — прямые слэши /, иначе psql может не понять.
Сдать: скриншот SELECT * FROM v_students_full + файл students.csv (или скриншот его содержимого).
Сводная таблица новых заданий
№ Тема Что сдать 11 Фильтрация, BETWEEN, LIKE 3 скриншота 12 DISTINCT, агрегаты 2 скриншота 13 GROUP BY + HAVING 2 скриншота 14 UPDATE RETURNING, CASE 2 скриншота 15 ALTER TABLE ADD COLUMN \d + SELECT 16 JOIN, LEFT JOIN 2 скриншота 17 Подзапросы, EXISTS 3 скриншота 18 BEGIN / COMMIT / ROLLBACK 2 скриншота 19 Индексы, EXPLAIN ANALYZE 2 плана + \di 20 VIEW + \copy в CSV VIEW + CSV