Fortgeschrittene Datenbankfunktionen in PostgreSQL PostgreSQL implementiert einen riesigen Funktionsumfang und bleibt dabei sehr nahe am SQL-Standard.

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

Folien 2-5, 7-8 © Prof. Dr. Manfred Rössle (FH Aalen)
PL/SQL - Kurze Einführung -.
Objekt – Relationales – Modell Tomasz Makowski IN
System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
SQL Server 2005 Übersicht für Entwickler Sebastian Weber Developer Evangelist Microsoft Deutschland GmbH.
Allgemeine Technologien II
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
SQL als Abfragesprache
SQL als Abfragesprache
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Open Database Connectivity (ODBC). © Prof. T. Kudraß, HTWK Leipzig Open Database Connectivity (ODBC) Idee: – API für eine DBMS, das ein Call-Level-Interface.
Datenbank-Zugriffsschnittstellen am Beispiel von Oracle und PL/SQL.
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
Otto-von-Guericke-Universität Magdeburg Gamal Kassem 1 Tabellenzeile mit READ lesen READ TABLE itab INDEX idx READ TABLE itab WITH KEY comp1 = f1.... Compn.
Otto-von-Guericke-Universität MagdeburgGamal Kassem Übung 7 Reports mit Datenbankzugriff.
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
JDBC EDV JDBC.
Kapitel 9: Integritätssicherung
Einführung MySQL mit PHP
JDBC: JAVA Database Connectivity
ODBC (Open Database Connectivity)
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Programm-Module Lehrbuch, Kapitel 7.
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4.
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
SQL Überblick Abfragen aus einer Tabelle
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #8 SQL (Teil 5)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL.
Datenbanksysteme für hörer anderer Fachrichtungen
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
PL/SQL - Kurze Einführung April 2003Übung Data Warehousing: PL/SQL 2 PL/SQL.. ist eine Oracle-eigene, prozedurale Programmiersprache Sämtliche.
MODULA-2.
Structured Query Language
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
11 Verwaltung von Abhängigkeiten. Ziele Am Ende dieser Lektion verfügen Sie über die folgenden Kenntnisse: Überwachen prozeduraler Abhängigkeiten Effekte.
CODA - Installation Installation der Binärdateien –Venus: Client-Programm –Vice: Server-Programm –Für Windows existiert eine Alpha-Version (Coda Client.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #8 SQL (Teil 5)
11 Zugriffskontrolle (Access Control) Ziele Privilegien Rollen GRANT und REVOKE Befehl Privilegien Rollen GRANT und REVOKE Befehl.
Datenbank System (DBS) - Warum?
Trigger-abhängige Client Interaktionen (bezüglich Oracle8i)
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken erstellen mit PostgreSQL
Datenbanken abfragen mit SQL
© 2003, Rudolf Jansen Einsatz der XML-Features der Oracle 9i DB zur Systemintegration Rudolf Jansen Freiberuflicher Entwickler und Autor
SQL Lutz KleinostendarpJOBELMANN-SCHULE Datendefinition Die Organisation einer Datenbank basiert auf einer Anzahl verschiedener Objekte. Diese können physikalischer.
By Thorsten Zisler 1 SQL Datenbank Anbindung an den Supervisor.
Thomas Tretter, 10. Februar 2004Oracle Label Security1 Oracle Label Security (fine grained access control) 10. Februar 2004.
SQL Structured Query Language Enzio Thiem. INHALT CREATE TABLE Anweisung Gängige Datentypen Beispiel CREATE TABLE Beispiel CREATE TABLE - erweitert Beispiel.
SQL Basics Schulung –
Das IT - Informationssystem
Sprachumfang von SQL Vier Kategorien DDL (Data Definition Language)
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Frank Schneede Senior Berater ORACLE Deutschland GmbH.
Abfragesprache SQL in ORACLE
Flashback mal sieben DOAG RegioTreff , Wiesbaden
Nksainf.ch/oinf.
Vorlesung #8 SQL (Teil 5).
Create Table, Rechte und Rollen
Installation und Beispiele
Indexierung Oracle: indexes Indexierung.
Stream-Verwaltung mit konventionellen Datenbanksystemen
Die programmierte Lösung
Implementieren von Klassen
(Structured Query Language)
 Präsentation transkript:

Fortgeschrittene Datenbankfunktionen in PostgreSQL PostgreSQL implementiert einen riesigen Funktionsumfang und bleibt dabei sehr nahe am SQL-Standard. Dadurch ist es großen komerziellen Datenbanken wie Oracle oder DB/2 durchaus ebenbürtig.

Agenda ● Mini-SQL-Einführung ● Sequenzen und Serien ● Window Functions ● Common Table Expressions und Recursive Queries ● Constraints ● Stored Procedures und User Defined Functions ● Trigger ● Locking und Prepared Transactions ● PITR und Hot-Standby

SQL ganz kurz erklärt ● Datenbanken anlegen, befüllen, ändern und abfragen ● Interaktiv oder programmiert ● Standard mit vielen mehr oder weniger kompatiblen Implementierungen ● SQL stammt von SEQUEL ab, erfunden von Edgar F. Todd, 1975, bei IBM ● Aktueller Standard ist SQL-2008, ISO 9075 ● Viele DB implementieren SQL-92 oder SQL-99 + eigene Erweiterungen

DDL – Data Definition Language ● Erstellen von Datenstrukturen ● CREATE DATABASE ● CREATE SCHEMA ● CREATE TABLE ● CREATE VIEW ● CREATE INDEX ● CREATE USER ● Und noch einige mehr... ● Ändern von Datenstrukturen ● ALTER TABLE

DML – Data Manipulation Language ● INSERT ● SELECT ● Simpler Fall – eine Tabelle ● JOIN ● UNION ● SUBSELECT ● UPDATE ● DELETE ● COPY

Sequenzen ● Datentyp „serial“ - Realisierung durch Sequence ● Auch selbständig sinnvoll, z.B. Vergabe von EAN-Nummern ● Startwert und Inkrement einstellbar ● Nachträglich ändern mit ALTER SEQUENCE ● Vergabe und Entnahme atomar mit nextval('sequence_name') ● Aktueller Wert mit currval('sequence_name') ● Abbruch der Transaktion – Sequence wird nicht rückgesetzt, man erhält also keine „dichten“ Werte

Serien und Values ● generate_series(start, ende, inkrement) erzeugt eine Reihe von Zahlen ● Datumsfunktionen – Generieren von Datumswerten ● VALUES() liefert „anonymes“ Tupel ● Wie Tabelle mit genau einer Zeile benutzbar ● Aliasnamen zuweisbar

Window Functions ● Ähnlich Aggregatfunktion, aber ohne Zusammenfassung der Zeilen einer Gruppe zu einer Ausgabezeile ● Vielfältige Anwendungsmöglichkeiten zur Zahlenanalyse ● Syntax: Funktionsaufruf gefolgt von OVER ● Arbeitet im Prinzip auf SELECT-Result, ähnlich ORDER BY ● PARTITION BY zergliedert in Gruppen ● Einige Window-Functions arbeiten auf Unterbereich der Partition, genannt „Window Frame“. Default dafür ist Anfang der Partition bis aktuelle Zeile, kann aber durch RANGE oder ROWS geändert werden ● Nur in Spaltenliste und globaler ORDER BY erlaubt

Common Table Expressions ● WITH name AS (select....) SELECT … ● Ergibt sowas wie eine temp. Tabelle nur für die Dauer der Abfrage ● Macht u.U. komplizierte Abfragen mit geschachtelten Sub- Selects lesbarer ● Treiberprobleme, falls Result-Set nur für Statements erwartet werden, die mit SELECT oder CALL anfangen

Rekursive Queries ● Common Table Expression mit RECURSIVE-Modifier ● Anwendungen: Hierarchien auflösen, z.B. Stücklisten ● Bestehen aus ● Nicht-rekursiver Teil ● UNION ALL ● Rekursiver Teil ● Rekursiver Teil muss irgendwann ohne weitere Ergebniszeilen enden, sonst Endlosschleife ● Evtl. ARRAY-Var. einführen und schon gesehene Keys merken ● Trick: LIMIT 100 außenrum, postgresql-Implementierung hört auf, wenn genug Rows geliefert wurden

Constraints ● Stellen Datenkonsistenz sicher ● Kein Ersatz für Fehlerbehandlung in der Anwendung, aber gut gegen Programmierfehler, generische Clients und eigene Dummheit ● Check Constraints – Einhaltung von Wertgrenzen, Spalten- oder Tabellenconstraints ● NOT NULL Constraints – Muss-Felder ● UNIQUE-Constraints – eindeutige Schlüssel bzw. Werte ● Referential Constraints stellen sicher, dass referenzierte Rows auch wirklich vorhanden sind ● Namen vergeben!

User Defined Functions ● „serverseitige Programmierung“ ● Funktionsarten: ● Pures SQL ● Prozedurale (PL/pgSQL, PL/Tcl) ● Interne ● C ● CREATE FUNCTION – viele Parameter – siehe Doku ● Overloading – gleiche Funktionsnamen bei unterschiedlichen Argumentlisten erlaubt

Funktionen in SQL ● Dollar-Quoting ist sinnvoll ● Argument-Typen deklarieren ● Zugriff auf Argumente mit $1, $2 usw. ● Rückgabewert deklarieren mit RETURNS-Klausel ● Argument kann auch Composite-Typ sein, typischerweise eine Row. Zugriff auf Argumente mit $1.spaltenname ● Rückgabe von Composite-Typ ebenfalls möglich. Zugriff auf Einzelwerte dann bei Aufruf mit: SELECT (func(arg)).columnname; oder auch in funktionaler Notation: SELECT columnname(func(arg));

Funktionen in prozeduralen Sprachen ● Sprachen sind durch ladbare Module implementiert: PL/pgSQL, PL/Tcl, PL/Perl und PL/Python standardmäßig mitgeliefert, andere verfügbar, eigene machbar ● Einmalige Installation je Datenbank: CREATE LANGUAGE plperl; ● Entsprechend weglöschen mit DROP LANGUAGE ● Alles, was in Datenbank template1 angelegt wird, wird beim Erstellen anderer Datenbanken geerbt

PL/pgSQL ● SQL + Control Structures ● Für SQL-Kenner leicht zu erlernen/benutzen ● Erbt alle Typen, Operatoren und Funktionen von SQL ● Ab Version 9.0 standardmäßig installiert ● Blockstruktur: [label] [DECLARE declarations....] BEGIN statements.... END [label]; ● Sub-Blöcke (Scoping von Variablen...)

PL/pgSQL 2 ● Argumente und Rückgabewerte mit Namen nutzbar, nicht nur mit $1 usw. ● Wie in SQL-Funktionen auch sind als Ausgabe auch Row- Typen oder Tabellen möglich ● Generische RECORD-Typ, der zur Aufnahme irgendwelcher Row-Typen dienen kann ● IF … THEN … ELSIF … THEN … ELSE ● PERFORM.... (SELECT und Ergebnis ignorieren) ● EXECUTE String [INTO target] [USING expression,...] ● BEGIN … EXCEPTION … END; ● RETURN expression; RETURN QUERY query; ● LOOP …; RETURN NEXT expression; END LOOP;

Trigger ● Funktion soll automatisch ausgeführt werden, wenn etwas in der Datenbank geschieht ● Für INSERT, UPDATE, DELETE ● per-row: für jede eingefügte/modifizierte/gelöschte Zeile ● per-statement: unabhängig von Anzahl betroffener Zeilen ● Before- oder after-Trigger ● Before-insert und before-update Trigger können Zeile modifizieren, ehe diese in die DB geschrieben wird ● Before-Trigger können NULL zurückgeben, um Aktion zu übergehen

Trigger und PL/pgSQL ● Trigger wird durch Anweisung CREATE TRIGGER in Datenbank registriert ● Die Trigger-Funktion muss vorher bereitgestellt werden ● PL/pgSQL eignet sich dazu besonders gut ● NEW Record enthält neue Daten für INSERT/UPDATE row-level ● OLD Record enthält alte Daten für UPDATE/DELETE row-level ● TG_*-Variablen enthalten weitere Angaben, z.B. Name des Triggers, before oder after, ausgeführte Datenbankoperation, betroffene Tabelle und Zusatz-Argumente für die Triggerfunktion ● Damit lassen sich auch generische Trigger-Funktionen schreiben, die sich in Triggern verschiedener Tabellen wiederverwenden lassen.

Locking ● MVCC-Konzept von postgresql sorgt für wenige Blockaden, erfordern dafür aber regelmäßiges VACUUM ● SELECT … FOR UPDATE ● Verschiedene Aktionen, die nicht gleichzeitig laufen sollen: select pg_advisory_lock(1); … do something select pg_advisory_lock(1); ● Advisory locks existieren unabhängig von Transaktionsgrenzen ● Anwendungsbeispiel: Warenzuteilung soll nicht gleichzeitig zweimal loslaufen. Sperren aller beteiligten Aufträge/Lieferscheine sind aber weder einfach noch notwendig.

Prepared Transactions ● Transaktionen über mehr als ein beteiligtes (Datenbank-) System ● Reihenfolge: ● Transaktion starten – BEGIN ● Irgendwas tun, wenn fertig dann PREPARE TRANSACTION – Eigene Transaktion ist hier beendet, Status steht auf Platte, es kann nix mehr schiefgehen, prophylaktisch ist Sichtbarkeit wie nach einem ROLLBACK ● Fremdes System macht irgendwas in einer eigenen Transaktion – OK => COMMIT PREPARED – Fehler oder timeout => ROLLBACK PREPARED – Kann auch von einer anderen Session erfolgen

PITR ● Steht für „Point In Time Recovery“ ● In postgresql.conf setzen: – archive_mode = on – archive_command = 'cp %f /archiv-pfad/' ● Im laufenden Betrieb Datenbank-Dateien wegkopieren: – select pg_start_backup('identifier'); – /var/lib/postgresql/... kopieren (cp, tar, rsync) – select pg_stop_backup(); ● Zum Wiederherstellen – Verzeichnis zurückkopieren – recovery.conf: restore_command = 'cp /archiv-pfad/%f %p' – Datenbank starten

Hot Standby und Streaming Replication ● Setzt auf PITR auf. ● Wiederherstellen wie bei PITR auf anderem Server ausführen ● Eintrag „standby mode = on“ in recovery.conf bewirkt, dass der Server nicht komplett durchstartet ● WAL-Einträge werden bei Streaming Replication direkt übers Netz durch Slave vom Master geholt ● Asynchron, aber sehr geringe Verzögerung ● Nur Read-Only Statements erlaubt, auch keine temp. Tabellen ● Failover durch Anlegen eines Trigger-Files ● Hostname übernehmen ● Clients verlieren nur aktuelle Transaktion, müssen sich aber neu verbinden.