-- Bhylu PostgreSQL 18.6 lab: Backup and Restore -- Use only your separate disposable database named bhylu_pg_lab. -- Each example creates a fresh schema inside a transaction, then rolls back. BEGIN ISOLATION LEVEL READ COMMITTED; DO $$ BEGIN IF current_database() <> 'bhylu_pg_lab' THEN RAISE EXCEPTION 'Choose the disposable bhylu_pg_lab database'; END IF; END $$; CREATE SCHEMA bhylu_lesson; SET LOCAL search_path = bhylu_lesson, pg_catalog; SET LOCAL timezone = 'UTC'; SET LOCAL datestyle = 'ISO, YMD'; SET LOCAL statement_timeout = '10s'; SET LOCAL lock_timeout = '2s'; CREATE TABLE tanks ( id integer PRIMARY KEY, label text NOT NULL UNIQUE, capacity_l integer NOT NULL CHECK (capacity_l > 0), zone text ); CREATE TABLE readings ( id integer PRIMARY KEY, tank_id integer NOT NULL REFERENCES tanks(id), measured_at timestamptz NOT NULL, litres integer NOT NULL CHECK (litres >= 0) ); CREATE TABLE technicians (id integer PRIMARY KEY, name text NOT NULL); CREATE TABLE inspections ( id integer PRIMARY KEY, tank_id integer NOT NULL REFERENCES tanks(id), technician_id integer REFERENCES technicians(id), status text NOT NULL CHECK (status IN ('planned','pending','done')), cost numeric(8,2) CHECK (cost >= 0) ); INSERT INTO tanks VALUES (1,'North roof',1000,'North'), (2,'Library',600,'Central'), (3,'Workshop',800,'North'), (4,'Garden',400,NULL); INSERT INTO readings VALUES (1,1,'2026-01-10 06:00:00+00',300), (2,1,'2026-01-11 06:00:00+00',450), (3,2,'2026-01-10 06:00:00+00',200), (4,3,'2026-01-10 06:00:00+00',0), (5,2,'2026-01-11 06:00:00+00',350); INSERT INTO technicians VALUES (1,'Mira'),(2,'Dev'),(3,'Noor'); INSERT INTO inspections VALUES (11,1,1,'done',12.50), (12,2,2,'pending',NULL), (13,3,1,'done',20.00), (14,1,NULL,'planned',0.00); -- Lesson commands begin here. SELECT (SELECT count(*) FROM tanks) AS tanks, (SELECT count(*) FROM readings) AS readings, (SELECT sum(capacity_l) FROM tanks) AS capacity; -- No changes from this lesson are kept. ROLLBACK;