CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE...

44

Transcript of CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE...

Page 6: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

BEGIN

SQL

Program Logic

SQL

Program Logic

COMMIT

Page 7: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

BEGIN

SQL

Program Logic

SQL

Program Logic

COMMIT

Page 8: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

BEGIN

SQL

Program Logic

SQL

Program Logic

COMMIT

Page 9: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

BEGIN

SQL

Program Logic

SQL

Program Logic

COMMIT

Page 10: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

BEGIN

SQL

Program Logic

SQL

Program Logic

COMMIT

Page 15: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

CREATE TABLE foo (id INT PRIMARY KEY,val VARCHAR(16)

);

CREATE FUNCTION get_foo(int)RETURNS foo AS $$

SELECT * FROM foo WHERE foo.id = $1;$$ LANGUAGE SQL;

Page 16: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

CREATE TABLE foo (id INT PRIMARY KEY,val VARCHAR(16)

);

CREATE FUNCTION get_foo(int)RETURNS foo AS $$

SELECT * FROM foo WHERE foo.id = $1;$$ LANGUAGE SQL;

Page 17: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

CREATE TABLE foo (id INT PRIMARY KEY,val VARCHAR(16)

);

CREATE FUNCTION get_foo(int)RETURNS foo AS $$

SELECT * FROM foo WHERE foo.id = $1;$$ LANGUAGE SQL;

Page 19: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

CREATE OR REPLACE FUNCTION get_foo(int)RETURNS SETOF foo AS $$

BEGINRETURN QUERY SELECT * FROM foo

WHERE foo.id = $1;END;

$$ LANGUAGE plpgsql;

Page 20: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

CREATE OR REPLACE FUNCTION sum_foo(i int) RETURNS int AS $$

DECLARE foo_rec RECORD;DECLARE out INT;BEGINout := 0;FOR foo_rec IN SELECT id FROM foo

WHERE id > i LOOPout := out + foo_rec.id;

END LOOP;RETURN out;

END;$$ LANGUAGE plpgsql;

Page 22: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

BEGIN

SQL

Program Logic

SQL

Program Logic

COMMIT

Page 26: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

→ INSERT→ UPDATE→ DELETE→ TRUNCATE→ CREATE→ ALTER→ DROP

→ TABLE→ DATABASE→ VIEW→ SYSTEM

→→→

Page 27: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

CREATE TABLE foo (id INT PRIMARY KEY,val VARCHAR(16)

);

CREATE TABLE foo_audit (id SERIAL PRIMARY KEY,foo_id INT REFERENCES foo (id),orig_val VARCHAR,cdate TIMESTAMP

);

Page 28: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

CREATE TABLE foo (id INT PRIMARY KEY,val VARCHAR(16)

);

CREATE TABLE foo_audit (id SERIAL PRIMARY KEY,foo_id INT REFERENCES foo (id),orig_val VARCHAR,cdate TIMESTAMP

);

CREATE OR REPLACE FUNCTION log_foo_updates() RETURNS trigger AS $$

BEGINIF NEW.val <> OLD.val THENINSERT INTO foo_audit

(foo_id, orig_val, cdate)VALUES (OLD.id, OLD.val, NOW());

END IF;RETURN NEW;

END;$$ LANGUAGE plpgsql;

Page 29: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

CREATE TABLE foo (id INT PRIMARY KEY,val VARCHAR(16)

);

CREATE TABLE foo_audit (id SERIAL PRIMARY KEY,foo_id INT REFERENCES foo (id),orig_val VARCHAR,cdate TIMESTAMP

);

CREATE OR REPLACE FUNCTION log_foo_updates() RETURNS trigger AS $$

BEGINIF NEW.val <> OLD.val THENINSERT INTO foo_audit

(foo_id, orig_val, cdate)VALUES (OLD.id, OLD.val, NOW());

END IF;RETURN NEW;

END;$$ LANGUAGE plpgsql;

CREATE TRIGGER foo_updatesBEFORE UPDATE ON foo FOR EACH ROWEXECUTE PROCEDURE log_foo_updates();

Page 31: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

CREATE OR REPLACE FUNCTION notify_foo_updates() RETURNS trigger AS $$

DECLARE notification JSON;BEGIN

IF NEW.val <> OLD.val THENnotification = row_to_json(NEW);PERFORM pg_notify('foo_update',

notification::text);END IF;RETURN NEW;

END;$$ LANGUAGE plpgsql;

CREATE TRIGGER foo_notifyBEFORE UPDATE ON foo FOR EACH ROWEXECUTE PROCEDURE notify_foo_updates();

Page 37: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

CREATE VIEW cs_students ASSELECT sid, name, login

FROM studentWHERE login LIKE '%@cs';

sid name login age gpa

53666 Kanye West kw@cs 40 3.5

53677 Justin Bieber jb@ece 23 2.25

53688 Tone Loc tloc@isr 51 3.8

53699 Andy Pavlo pavlo@cs 36 3.0

sid name login

53666 Kanye West kw@cs

53699 Andy Pavlo pavlo@cs

Page 38: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

CREATE VIEW cs_gpa ASSELECT AVG(gpa) AS avg_gpaFROM studentWHERE login LIKE '%@cs';

Page 39: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

VIEW→

SELECT…INTO→

CREATE VIEW cs_gpa ASSELECT AVG(gpa) AS avg_gpa

FROM studentWHERE login LIKE '%@cs';

SELECT AVG(gpa) AS avg_gpaINTO cs_gpaFROM studentWHERE login LIKE '%@cs';

Page 40: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

VIEW→

SELECT…INTO→

CREATE VIEW cs_gpa ASSELECT AVG(gpa) AS avg_gpa

FROM studentWHERE login LIKE '%@cs';

SELECT AVG(gpa) AS avg_gpaINTO cs_gpaFROM studentWHERE login LIKE '%@cs';

Page 42: CMU 15-445/645 Database Systems (Fall 2017) :: Embedded ... · $$ LANGUAGE SQL; → CREATE TABLE foo ... CMU 15-445/645 Database Systems (Fall 2017) :: Embedded Database Logic Author:

SELECT

CREATE MATERIALIZED VIEW cs_gpa ASSELECT AVG(gpa) AS avg_gpaFROM studentWHERE login LIKE '%@cs';