Ein Elefant vergisst nicht Erweiterte Funktionen in PostgreSQL am Beispiel der CSN Datenbank Daniel Schreiber Chemnitzer StudentenNetz https://www.csn.tu-chemnitz.de Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 1 Überblick ● Überblick CSN Inhalt: n SQL PostgreSQL n PostgreSQL im CSN n Referenzen n Kurzer Blick ins CSN Relationales Datenmodell und SQL PostgreSQL als (Objekt-)relationales Datenbanksystem PostgreSQL im CSN Nicht behandelt wird: n n n Daniel Schreiber, 28. April 2004 Installation eines Servers Zugriff aus Programmiersystemen (Perl, PHP, ...) Objektrelationale Fähigkeiten von PostgreSQL PostgreSQL im CSN - p. 2 ● Überblick CSN ● Szenario ● Umgebung der Datenbank ● Anforderungen SQL PostgreSQL Einblick ins CSN PostgreSQL im CSN Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 3 Szenario ● Überblick n CSN n ● Szenario ● Umgebung der Datenbank ● Anforderungen n SQL n ca. 1500 Hosts im CSN ca. 80 aktive Netzgeräte Trafficaccounting Verwaltungsdaten für Routinearbeiten PostgreSQL PostgreSQL im CSN Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 4 Umgebung der Datenbank ● Überblick n CSN ● Szenario ● Umgebung der Datenbank ● Anforderungen n SQL PostgreSQL n PostgreSQL im CSN Referenzen Daniel Schreiber, 28. April 2004 n Alle Informationen werden zentral in PostgreSQL Datenbank gespeichert Netzwerkhardware wird automatisch gemanaged (Port security, static ARP) Cronjobs erledigen Routineaufgaben (IPs beantragen, Mail verschicken, Netzconfiguration, Firewall, DCHP etc.) Dateneingabe über Webinterface PostgreSQL im CSN - p. 5 Anforderungen ● Überblick n CSN ● Szenario ● Umgebung der Datenbank ● Anforderungen SQL PostgreSQL n n PostgreSQL im CSN Referenzen Daniel Schreiber, 28. April 2004 n Ohne Datenbank ist das CSN nicht arbeitsfähig u ACID (Atomicity, Consistency, Isolation, Durability) u die Datenbank hat immer Recht Änderungen werden in Logtabellen protokolliert Komplizierte Aufgaben werden von stored Procedures erledigt → API Strukturdump “wiegt” ca. 320 kBytes PostgreSQL im CSN - p. 6 ● Überblick CSN SQL ● Relationen ● Beispiel ● Beispiel ● Verknüpfungen (JOINS) ● Gruppieren ● Daten bearbeiten Wiederholung: Relationales Datenmodell und SQL PostgreSQL PostgreSQL im CSN Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 7 Relationen ● Überblick n CSN n SQL ● Relationen ● Beispiel ● Beispiel ● Verknüpfungen (JOINS) ● Gruppieren ● Daten bearbeiten n n Relationale Datenbanken speichern Werte in Tabellen Tabellen haben festgelegte Anzahl Spalten beliebig viele Zeilen (Tupel) über Anfragesprache können Einträge in Spalten ausgewählt, gruppiert, sortiert und verknüpft werden PostgreSQL PostgreSQL im CSN Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 8 Beispiel ● Überblick CSN SQL ● Relationen ● Beispiel ● Beispiel ● Verknüpfungen (JOINS) ● Gruppieren ● Daten bearbeiten PostgreSQL PostgreSQL im CSN Referenzen n n Daniel Schreiber, 28. April 2004 ID Vorname Nachname Geschlecht 1 2 3 Ismael Vinzenz Edithe Blanckenhagen Hillebrandt Follenius m m f Alter 23 42 65 Kontonummer Eigentümer Kontostand 1234 1235 1236 1238 1 2 1 3 29338 9812347 253 124723 ID und Kontonummer sind Primärschlüssel Eigentümer ist Fremdschlüssel PostgreSQL im CSN - p. 9 Beispiel ● Überblick CSN SQL ● Relationen ● Beispiel ● Beispiel ● Verknüpfungen (JOINS) ● Gruppieren ● Daten bearbeiten PostgreSQL PostgreSQL im CSN Referenzen Daniel Schreiber, 28. April 2004 ID Vorname Nachname Geschlecht 1 2 3 Ismael Vinzenz Edithe Blanckenhagen Hillebrandt Follenius m m f Kontonummer Kontostand 1234 1235 1236 1238 29338 9812347 253 124723 Alter 23 42 65 Kontoinhaber Konto 1 2 1 3 3 1234 1235 1236 1238 1236 PostgreSQL im CSN - p. 10 Verknüpfungen (JOINS) ● Überblick CSN SQL ● Relationen ● Beispiel ● Beispiel ● Verknüpfungen (JOINS) ● Gruppieren ● Daten bearbeiten PostgreSQL PostgreSQL im CSN Referenzen erzeugen aus mehreren Tabellen neue (virtuelle) Tabelle n Verknüfungskriterium (fast immer Gleichheit von Primär- und Fremdschüssel) SELECT Vorname, Nachname, Kontostand, Kontonummer FROM person JOIN konto ON person.ID=konto.Eigentuemer; n Vorname Nachname Ismael Ismael Vinzenz Edithe Blanckenhagen Blanckenhagen Hillebrandt Follenius Kontostand Kontonummer 29338 253 9812347 124723 1234 1236 1235 1238 Wieviel Geld besitzt Ismael Blanckenhagen? Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 11 Gruppieren ● Überblick CSN SQL ● Relationen ● Beispiel ● Beispiel ● Verknüpfungen (JOINS) ● Gruppieren ● Daten bearbeiten PostgreSQL PostgreSQL im CSN Referenzen durch Gruppierung können mehrere Zeilen (Tupel) miteinander verrechnet werden n Verrechnung geschieht durch Aggregatfunktion n in PostgreSQL kann man eigene Aggregatfunktionen definieren SELECT Vorname, Nachname, sum(Kontostand) FROM person JOIN konto ON person.ID=konto.Eigentuemer GROUP BY Vorname, Nachname; Vorname Nachname Kontostand n Ismael Vinzenz Edithe Daniel Schreiber, 28. April 2004 Blanckenhagen Hillebrandt Follenius 29591 9812347 124723 PostgreSQL im CSN - p. 12 Daten bearbeiten ● Überblick n CSN SQL ● Relationen ● Beispiel ● Beispiel ● Verknüpfungen (JOINS) n n INSERT INTO tabelle (spalte1, spalte2) VALUES (wert1, wert2); UPDATE tabelle set spalte1=wert1 WHERE bedingung; DELETE FROM tabelle WHERE bedingung; ● Gruppieren ● Daten bearbeiten PostgreSQL PostgreSQL im CSN Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 13 ● Überblick CSN SQL PostgreSQL ● Was ist PostgreSQL ● Transaktionen ● Transaktionsisolierung ● Views Der Elefant betritt die Bühne ● Rules ● Stored Procedures ● Trigger PostgreSQL im CSN Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 14 Was ist PostgreSQL ● Überblick n CSN n SQL PostgreSQL ● Was ist PostgreSQL ● Transaktionen ● Transaktionsisolierung ● Views ● Rules ● Stored Procedures ● Trigger PostgreSQL im CSN OID Verwaltungssystem Objektrelationale Datenbank u Referentielle Integrität u Transaktionen u Views u Rules u Stored Procedures u Trigger Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 15 Transaktionen ● Überblick CSN SQL PostgreSQL ● Was ist PostgreSQL ● Transaktionen ● Transaktionsisolierung ● Views ● Rules ● Stored Procedures ● Trigger PostgreSQL im CSN Referenzen Daniel Schreiber, 28. April 2004 Szenario: Banküberweisung von Konto A → Konto B u Subtrahiere Betrag c von Konto A u Addiere Betrag c zu Konto B BEGIN; UPDATE konto set betrag=betrag-c WHERE kontoid=’A’; UPDATE konto set betrag=betrag+c WHERE kontoid=’B’; COMMIT; n Alle Befehle zwischen BEGIN und COMMIT werden komplett oder gar nicht ausgeführt n Transaktion kann durch Fehler oder durch ROLLBACK abgebrochen werden. n PostgreSQL im CSN - p. 16 Transaktionsisolierung ● Überblick CSN SQL PostgreSQL ● Was ist PostgreSQL ● Transaktionen ● Transaktionsisolierung ● Views ● Rules ● Stored Procedures ● Trigger Eine Transaktion liest Daten einer anderen Transaktion, die nicht beendet wurde dirty read Eine Transaktion liest Daten, die sie schon einmal gelesen hat und stellt fest, dass die Daten sich geändert haben nonrepeatable read Die Ergebnismenge derselben Anfrage ändert sich während einer Transaktion phantom read PostgreSQL im CSN Referenzen Isolierung dirty read nonrep. read phantom read read uncommited möglich möglich möglich read commited nicht möglich möglich möglich repeatable read nicht möglich nicht möglich möglich serializable nicht möglich nicht möglich nicht möglich PostgreSQL unterstützt Isolationslevel read commited und serializable Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 17 Views ● Überblick CSN SQL PostgreSQL ● Was ist PostgreSQL ● Transaktionen ● Transaktionsisolierung ● Views ● Rules ● Stored Procedures ● Trigger PostgreSQL im CSN Referenzen Views sind Vereinfachung für den Benutzer n die Datenbank kann Zugriffe auf Views beschleunigen n über Views können Zugriffsrechte beschränkt werden CREATE VIEW millionaere AS SELECT Vorname, Nachname, sum(Kontostand) as Kontostand FROM konto JOIN person ON person.ID=konto.eigentuemer WHERE kontostand > 1000000; SELECT * FROM millionaere; Vorname Nachname Kontostand n Vinzenz Daniel Schreiber, 28. April 2004 Hillebrandt 9812347 PostgreSQL im CSN - p. 18 Rules ● Überblick n CSN SQL PostgreSQL ● Was ist PostgreSQL ● Transaktionen ● Transaktionsisolierung ● Views ● Rules ● Stored Procedures ● Trigger PostgreSQL im CSN Referenzen n Rules schreiben den Abfragebaum um u Anfrage wird an Datenbank geschickt u Rules werden angewendet → neue Anfrage entsteht u neue Anfrage wird in Abfragebaum übersetzt Views werden in PostgreSQL intern über Rules realisiert CREATE VIEW millionaere AS SELECT Vorname, Nachname, sum(Kontostand) as Kontostand· FROM konto JOIN person ON person.ID=konto.eigentuemer· WHERE kontostand > 1000000; CREATE table millionaere AS (Vorname VARCHAR, Nachname VARCHAR, Kontostand INTEGER); CREATE RULE "_RETURN" AS ON SELECT TO millionaere DO INSTEAD SELECT Vorname, Nachname, sum(Kontostand) as Kontostand· FROM konto JOIN person ON person.ID=konto.eigentuemer· WHERE kontostand > 1000000; Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 19 Stored Procedures ● Überblick CSN SQL PostgreSQL ● Was ist PostgreSQL ● Transaktionen ● Transaktionsisolierung ● Views ● Rules ● Stored Procedures ● Trigger PostgreSQL im CSN Referenzen Datenbankfunktionen können hinzugefügt werden n Implementierung in SQL, pgSQL, C, Scriptsprachen CREATE FUNCTION cowsay (varchar) RETURNS varchar AS ’ DECLARE _saying alias for $1; BEGIN return _saying || ’’Muh.’’; END; ’ AS LANGUAGE ’plpgsql’; n SELECT cowsay(’Hello World’); n Eventuell problematisch: Last, Sicherheit, Stabilität (bei Implementierung in C) Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 20 Trigger ● Überblick n CSN SQL PostgreSQL ● Was ist PostgreSQL ● Transaktionen ● Transaktionsisolierung ● Views n n n ● Rules ● Stored Procedures ● Trigger PostgreSQL im CSN n Code, der bei einem bestimmten Ereignis ausgeführt wird: INSERT UPDATE DELETE Ausführung pro Statement oder für jedes Tupel Schreibt nicht den Abfragebaum um üblicherweise werden selbst programmierte Funktionen aufgerufen Funktion muß Datentyp trigger zurückliefern (opaque vor PostgreSQL 7.3) Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 21 ● Überblick CSN SQL PostgreSQL PostgreSQL im CSN ● Zahlen und Fakten ● Modellierung PostgreSQL im CSN ● Erfahrungen im Einsatz ● Kritik ● TF freizugebende_ip_tf ● TF check_mac_tf ● Aggregatfunktion ● Fremdschlüssel Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 22 Zahlen und Fakten ● Überblick n CSN n SQL n PostgreSQL PostgreSQL im CSN n 110 Relationen 64 Views 119 Stored Procedures (+ Systemfunktionen) Tendenz: steigend ● Zahlen und Fakten ● Modellierung ● Erfahrungen im Einsatz ● Kritik ● TF freizugebende_ip_tf ● TF check_mac_tf ● Aggregatfunktion ● Fremdschlüssel Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 23 Modellierung ● Überblick n CSN n SQL n PostgreSQL PostgreSQL im CSN n ● Zahlen und Fakten ● Modellierung n ● Erfahrungen im Einsatz ● Kritik n ● TF freizugebende_ip_tf ● TF check_mac_tf ● Aggregatfunktion n Nutzer Rechner Statusfelder (m : n) Standorte (Nutzer, Rechner), Dosen, Ports Rechtemanagement (Aufgabenbereiche) Inventarverwaltung Finanzverwaltung ● Fremdschlüssel Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 24 Erfahrungen im Einsatz ● Überblick n CSN n SQL PostgreSQL PostgreSQL im CSN ● Zahlen und Fakten ● Modellierung n ● Erfahrungen im Einsatz ● Kritik ● TF freizugebende_ip_tf ● TF check_mac_tf ● Aggregatfunktion ● Fremdschlüssel Referenzen n n n n Daniel Schreiber, 28. April 2004 Einsatz seit 1999 Seit dem wesentliche Erweiterungen der Funktionalität in PostgreSQL: Referentielle Integrität, bessere Unterstützung von Programmiersprachen spürbare Geschwindigkeitsverbesserungen seit PostgreSQL 7.0 kein Datenverlust wenig Bugs (außer Serie 7.2.x) sehr schnelle und kompetente Hilfe im IRC (irc.freenode.org, #postgresql) sehr gute ausführliche Dokumentation PostgreSQL im CSN - p. 25 Kritik ● Überblick n CSN SQL PostgreSQL PostgreSQL im CSN ● Zahlen und Fakten ● Modellierung ● Erfahrungen im Einsatz ● Kritik n n Fehlende Features u Verteilung der Datenbank u Replikationssoftware nicht im Standardlieferumfang enthalten (kommerziell, ähnlich GhostScript) regelmäßiges Vacuum notwendig (im CSN: Cronjob) regelmäßiges reindizieren notwendig (bis 7.3) ● TF freizugebende_ip_tf ● TF check_mac_tf ● Aggregatfunktion ● Fremdschlüssel Referenzen Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 26 Triggerfunktion: freizugebende_ip_tf ● Überblick CSN SQL PostgreSQL PostgreSQL im CSN ● Zahlen und Fakten ● Modellierung ● Erfahrungen im Einsatz ● Kritik ● TF freizugebende_ip_tf ● TF check_mac_tf ● Aggregatfunktion ● Fremdschlüssel Referenzen Daniel Schreiber, 28. April 2004 CREATE OR REPLACE FUNCTION freizugebende_ip_tf () RETURNS "trigger" AS BEGIN IF TG_OP = ’’UPDATE’’ THEN IF (NEW.ip_adr IS NULL) AND (OLD.ip_adr IS NOT NULL) THEN INSERT INTO freizugebende_ip(host_id,hostname,ip_adr) VALUES (OLD.host_id,OLD.hostname,OLD.ip_adr); END IF; END IF; IF TG_OP = ’’DELETE’’ THEN IF OLD.ip_adr IS NOT NULL THEN INSERT INTO freizugebende_ip(host_id,hostname,ip_adr) VALUES (OLD.host_id,OLD.hostname,OLD.ip_adr); END IF; END IF; RETURN NULL; END; ’ LANGUAGE ’plpgsql’; PostgreSQL im CSN - p. 27 Triggerfunktion: check_mac_tf ● Überblick CSN SQL PostgreSQL PostgreSQL im CSN ● Zahlen und Fakten ● Modellierung ● Erfahrungen im Einsatz ● Kritik ● TF freizugebende_ip_tf ● TF check_mac_tf ● Aggregatfunktion ● Fremdschlüssel Referenzen Daniel Schreiber, 28. April 2004 CREATE OR REPLACE FUNCTION check_mac_tf () RETURNS "trigger" AS ’ BEGIN IF TG_OP=’’UPDATE’’ THEN IF NEW.ether_adr=OLD.ether_adr THEN RETURN NEW; END IF; END IF; IF ismacused(NEW.ether_adr) THEN RAISE EXCEPTION ’’MAC % ist bereits in Benutzung’’, NEW.ether_adr; END IF; RETURN NEW; END; ’ LANGUAGE plpgsql; PostgreSQL im CSN - p. 28 Aggregatfunktion ● Überblick CSN SQL PostgreSQL PostgreSQL im CSN ● Zahlen und Fakten ● Modellierung ● Erfahrungen im Einsatz ● Kritik ● TF freizugebende_ip_tf ● TF check_mac_tf ● Aggregatfunktion ● Fremdschlüssel Referenzen create or replace function str_concat_by_newline(text, text) returns text as ’ BEGIN IF $1 = ’’’’ then return $2; ELSE return $1 || ’’\n’’ || $2; END IF; END; ’ LANGUAGE ’plpgsql’; create AGGREGATE agg_text (sfunc=str_concat_by_newline, basetype=text,stype=text, initcond=’’); Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 29 Fremdschlüssel einfügen ● Überblick CSN SQL PostgreSQL PostgreSQL im CSN ● Zahlen und Fakten ● Modellierung ● Erfahrungen im Einsatz ● Kritik ● TF freizugebende_ip_tf ● TF check_mac_tf ● Aggregatfunktion ● Fremdschlüssel Referenzen Daniel Schreiber, 28. April 2004 CREATE OR REPLACE FUNCTION erteile_sperre_mit_grund (character varying, character varying, character varying, timestamp with time zone, timestamp with time zone) RETURNS boolean AS ’ DECLARE _urz_login ALIAS FOR $1; _sperrender ALIAS FOR $2; _grund ALIAS FOR $3; _gueltig_von ALIAS FOR $4; _gueltig_bis ALIAS FOR $5; _person_id integer; _oid oid; BEGIN SELECT person_id INTO _person_id FROM csn_nutzer WHERE urz_login=_urz_login; INSERT INTO csn_nutzer_hat_status (person_id, status_id, gueltig_von, gueltig_bis) VALUES (_person_id, 3, _gueltig_von, _gueltig_bis); GET DIAGNOSTICS _oid = RESULT_OID; INSERT INTO nutzersperre (id, sperrgrund) VALUES ( (SELECT id FROM csn_nutzer_hat_status WHERE oid=_oid), _grund); RETURN ’’t’’::BOOLEAN; END; ’ LANGUAGE plpgsql; PostgreSQL im CSN - p. 30 ● Überblick CSN SQL PostgreSQL PostgreSQL im CSN Referenzen Referenzen ● Quellen ● Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 31 Quellen ● Überblick n CSN n SQL n PostgreSQL PostgreSQL im CSN Referenzen n PostgreSQL Webseite: http://www.postgresql.org PostgreSQL Dokumentation: http://www.postgresql.org/docs/ PostgreSQL, Jens Hartwig, Addison Wesley 2001, ISBN 3-8273-1860-2 CSN Datenbank, Lutz Neugebauer ● Quellen ● Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 32 ● Überblick Vielen Dank für Ihre Aufmerksamkeit! CSN SQL PostgreSQL PostgreSQL im CSN Referenzen ● Quellen ● Fragen? Daniel Schreiber, 28. April 2004 PostgreSQL im CSN - p. 33