PostgreSQL Kai Benjamins Thorsten Jens Holger Kaßner Fachhochschule Oldenburg/Ostfriesland/Wilhelmshaven Seite 1 / 19 Überblick ● Was ist PostgreSQL ● Funktionalität ● Vergleich mit Oracle ● Anbindungsmöglichkeiten ● Administrationstools Seite 2 / 19 Geschichte von PostgreSQL ● ● Entwickelt an der University of California in Berkeley – Ingres (1977 – 1985), relational – Postgres (1986 – 1994), objektrelational Erweiterung um SQL-Funktionalität – ● Postgres95 (1994 – 1995) ab 1996 weltweites Entwicklerteam – Umbenennung in PostgreSQL Seite 3 / 19 Technische Merkmale ● objektrelationales DBMS – benutzerdefinierte Operatoren, Datentypen und Funktionen; Vererbung ● SQL92 (teilweise SQL99) ● Unterabfragen, Transaktionen ● Trigger ● Schnittstellen: – C, C++, Java, Perl, PHP, Python, Lisp, ... Seite 4 / 19 Benutzerdefinierte Funktionen ● laufen innerhalb der Datenbank (serverseitig) ● Aufruf in SQL-Ausdrücken ● unterstützte Sprachen: – SQL, PL/pgSQL, PL/Tcl, PL/Perl, C, ... Seite 5 / 19 Benutzerdefinierte Funktionen ● Beispiel mit SQL – ● ● Berechnung der Kreisfläche CREATE FUNCTION kreisflaeche(float) RETURNS float AS 'SELECT pi() * sqrt($1);' LANGUAGE 'sql'; SELECT kreisflaeche(10); Seite 6 / 19 SQL ● ● Datentypen: SQL92 / SQL99 + Eigene – Netzwerkadressen – geometrische Typen, ... SQL: Alles, was man möchte – Transaktionen – Views – Referentielle Integrität – Joins, ... Seite 7 / 19 SQL ● Reguläre Ausdrücke statt LIKE – ● SELECT * FROM kfzs WHERE kennzeichen ~* '^(emd|aur)-.*[0-8]$' Rules – modifizieren SQL-Ausdrücke – CREATE RULE foo AS ON INSERT TO bar DO INSTEAD NOTHING -- readonly-Tabelle – ermöglichen INSERT in komplexe Views Seite 8 / 19 Begrenzungen von PostgreSQL maximale Größe der Datenbank maximale Größe einer Tabelle maximale Größe einer Zeile maximale Größe einer Spalte maximale Zeilenanzahl maximale Spaltenanzahl unbegrenzt 64 TB unbegrenzt 1 GB unbegrenzt 1600 Seite 9 / 19 Vergleich mit Oracle ACID Verteilte DB Open Source Preis Plattformen Sprachen Server alle SQL92 Typen PostgreSQL 7 X X 0$ 17 7 X Oracle 8 X X CPU · MHz · 15$ 5 2 Seite 10 / 19 PHP ● ● ● $conn = pg_Connect("host=localhost port=5432 dbname=budget user=postgres password=***"); $res = pg_Exec($conn, "SELECT * FROM kostenstellen;"); $value = pg_Result($res, $row, $col); Seite 11 / 19 Perl ● ● ● ● use Pg; $conn = Pg::connectdb("host=localhost port=5432 dbname=budget user=postgres password=***"); $res = $conn->exec("SELECT * FROM kostenstellen"); $value = $res->getvalue($row, $col); Seite 12 / 19 Java ● ● ● ● Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/ budget", "postgres", "***"); stmt = conn.createStatement(); res = stmt.executeQuery( "SELECT * FROM kostenstellen;"); Seite 13 / 19 C / C++ ● include "libpq-fe.h" ● PGConn *conn, PGresult *res, char *value; ● ● ● conn = PQconnectdb("host=localhost port=5432 dbname=budget user=postgres password=***"); res = PQexec(conn, "SELECT * FROM kostenstellen"); value = PQgetvalue(res, row, col); Seite 14 / 19 Administrationstools ● PG Admin ● PG Access Seite 15 / 19 PG Admin ● ● ● ● graphisches Datenbankwerkzeug unter Windows übersichtlicher Blick auf alle Datenbanken im DBMS Migration von z.B. Access- bzw. ODBCDatenbanken sonstige Datenmanipulation Seite 16 / 19 PG Access ● ● plattformunabhängiges graphisches Datenbankwerkzeug in Tcl/Tk Zugriff auf – Tabellen – Sichten – Reports, usw. ● Im- und Export von Tabellen ● sonstige Datenmanipulation Seite 17 / 19 Demonstration Seite 18 / 19 http://postgresql.thodi.de Seite 19 / 19