PostgreSQL

+ andere TechDocs
+ SQL
+ SQL mit Java
+ PostgreSQL-Homepage
+


PostgreSQL ist eine leistungsfähige relationale Datenbank für die Abfragesprache SQL (Structured Query Language).
Sie ist inklusive Source-Code frei erhältlich und darf ohne Lizenzgebühren auch im kommerziellen Umfeld verwendet werden.



Inhalt

  1. Vergleich MySQL, PostgreSQL und MaxDB
  2. Kurzanleitung zur Installation von PostgreSQL 7.2 unter SuSE Linux 8.x von SuSE-CDs
  3. Kurzanleitung zur Installation von PostgreSQL 7.2 unter SuSE Linux 7.x vom Internet-Download
  4. Kurzanleitung zur Anlage einer Database und einer Tabelle in PostgreSQL
  5. Datentypen, Programmierbeispiele
  6. Weiterführende Informationen


Vergleich MySQL, PostgreSQL und MaxDB

Zu den bekanntesten freien SQL-Datenbanken zählen MySQL, PostgreSQL und MaxDB.

MySQL wird besonders häufig zusammen mit Web-Servern eingesetzt. Zum Beispiel Online-Shops beinhalten oft große Datenmengen, aber kommen mit einfach strukturierten Tabellen aus.

PostgreSQL ist auch für komplexere Anwendungen geeignet, in denen ANSI-SQL-Konformität, Views, Stored Procedures und Trigger benötigt werden. Es sollte möglichst nur PostgreSQL ab mindestens Version 7.1 verwendet werden, da ältere Versionen ohne besondere Maßnahmen pro Datenbankzeile nur bis zu 8 KByte verwalten konnten.

MaxDB ist der Nachfolger der SAP® DB (und damit auch von Adabas).

Einen tabellarischen Vergleich einiger Eigenschaften finden Sie unter Vergleich MySQL, PostgreSQL und MaxDB.



Kurzanleitung zur Installation von PostgreSQL 7.2 unter SuSE Linux 8.x von SuSE-CDs

Genauere Informationen und Anleitungen gibt es unter http://www.postgresql.de und http://www.postgresql.org/docs.

  1. Falls Sie eine ältere SuSE-Linux-Version als 8.x verwenden, sehen Sie sich bitte Installation unter SuSE Linux 7.x an.
    Die folgende Beschreibung geht davon aus, dass SuSE Linux 8.x installiert ist, ähnlich wie unter linux.htm beschrieben.
  2. Loggen Sie sich als 'root' ein.
  3. Zuerst muss überprüft werden, ob PostgreSQL bereits installiert ist und deinstalliert werden muss:
    rpm -qa | grep -i postgres
    rpm -e postgresql-server
    rpm -e postgresql
    rpm -e postgresql-lib
  4. PostgreSQL installieren:
    'YaST2' | 'Software' | 'Software installieren',
    jeweils die folgenden 'Gruppen'/'Pakete' 'Auswählen' ('X', 'a' oder 'i' erscheint):
      'Produktivität/Datenbanken/Clients' / 'postgresql-libs'
      'Produktivität/Datenbanken/Server' / 'postgresql-server'
      'Produktivität/Datenbanken/Tools' / 'postgresql'
    'OK' und angeforderte SuSE-CDs einlegen
  5. Ist der Benutzer 'postgres' bereits angelegt ?
    Einträge überprüfen beziehungsweise neu anlegen:
    'YaST2' | 'Sicherheit & Benutzer' | 'Benutzer bearbeiten/anlegen':
      Auch Systembenutzer anzeigen
      Benutzername = postgres
      Standardgruppe = daemon
      Home-Verzeichnis = /var/lib/pgsql
  6. Führen Sie folgende Kommandos aus:
    mkdir /var/lib/pgsql/data
    chown -R postgres /var/lib/pgsql
    su - postgres
    /usr/bin/initdb -D /var/lib/pgsql/data
    /usr/bin/postmaster -i -D /var/lib/pgsql/data &
  7. Sie können jetzt bereits die Installation testen, indem Sie mit 'createdb' eine Datenbank einrichten und mit 'psql' eine Tabelle anlegen und auslesen. Beides ist unten unter 'Anlage einer Database und einer Tabelle' beschrieben.
  8. Damit PostgreSQL von anderen Rechnern erreichbar ist, müssen die IP-Adressbereiche, die erlaubt werden sollen, als 'trust' eingetragen werden. Loggen Sie sich als 'root' ein und öffnen Sie die Datei
    /var/lib/pgsql/data/pg_hba.conf
    und fügen Sie ganz unten eine Zeile hinzu ähnlich wie eine der beiden folgenden:
    host all 10.1.0.0 255.255.0.0 trust
    host all 192.168.0.0 255.255.255.0 trust
    Außerdem muss in dem Skript
    /etc/init.d/postgresql
    die Zeile 53
    OPTIONS=$(POSTGRES_OPTIONS)
    geändert werden zu:
    OPTIONS="$(POSTGRES_OPTIONS) -i"
  9. Damit PostgreSQL beim Booten automatisch gestartet werden kann, müssen in dem Skript '/etc/init.d/postgresql' korrekte Einträge vorhanden sein. Sie müssen die PostgreSQL-Datenbank starten und stoppen können mit den Kommandos:
    su - root
    /etc/init.d/postgresql start
    /etc/init.d/postgresql stop
  10. Erzeugen Sie symbolische Runlevel-Links, damit PostgreSQL beim Booten automatisch gestartet wird:
    insserv /etc/init.d/postgresql


Kurzanleitung zur Installation von PostgreSQL 7.2 unter SuSE Linux 7.x vom Internet-Download

Genauere Informationen und Anleitungen gibt es unter http://www.postgresql.de und http://www.postgresql.org/docs.

  1. Falls Sie eine neuere SuSE-Linux-Version als 7.x verwenden, sehen Sie sich bitte Installation unter SuSE Linux 8.x an.
    Die folgende Beschreibung geht davon aus, dass SuSE Linux 7.x installiert ist, ähnlich wie unter linux.htm beschrieben.
  2. Es soll nicht das PostgreSQL-Paket aus der Linux-Distribution verwendet werden, weil es dort nur in einer veralteten Version vorhanden ist.
  3. Loggen Sie sich als 'root' ein.
  4. Zuerst muss überprüft werden, ob PostgreSQL bereits installiert ist und deinstalliert werden muss:
    rpm -qa | grep -i postgres
    rpm -e postgresql-server
    rpm -e postgresql
    rpm -e postgresql-lib
  5. Wenn im Folgenden Skripte und andere Dateien editiert werden, und dazu im KDE-Dateimanager über 'rechte Maustaste' | 'Open With' ein Texteditor aufgerufen wird, sollte entweder der 'Text Editor' so eingestellt werden, dass er nicht selbstständig Zeilenumbrüche einfügt, oder stattdessen der 'Advanced Editor' verwendet werden. Andernfalls funktionieren sonst nach dem Speichern einige Skripte nicht mehr.
  6. Bevor PostgreSQL installiert wird, muss sichergestellt werden, dass 'openssl' mit 'libcrypto' und 'libssl' in korrekter Version installiert ist. Der Aufruf:
    rpm -q openssl
    muss mindestens liefern:
    openssl-0.9.6...
    Außerdem müssen die beiden lib...-Dateien im richtigen Verzeichnis vorhanden sein. Die Aufrufe
    find / -iname "libcrypto.so.*"
    find / -iname "libssl.so.*"
    müssen liefern:
    /usr/lib/libcrypto.so.0.9.6
    /usr/lib/libssl.so.0.9.6
    Andernfalls muss die zu Ihrer SuSE-Version passende 'openssl-0.9.6...i386.rpm'-Datei geladen und installiert werden.
    Zum Beispiel für SuSE 7.3 können Sie die entsprechende Datei über http://at.rpmfind.net/opsys/linux/RPM/SuSE_Linux_7.3_(i386).html bekommen.
  7. Richten Sie einen Benutzer 'postgres' ein. Je nach Linux-Distribution entweder mit
    adduser -m -d /usr/local/pgsql postgres
    oder mit
    useradd -m -d /usr/local/pgsql postgres
    oder unter SuSE 7.x auch mit
    'YaST' | 'Administration des Systems' | 'Benutzerverwaltung':
      Benutzername = postgres
      Gruppe = users [oder daemon]
      Home-Verzeichnis = /usr/local/pgsql
    Aber bleiben Sie vorerst weiter als 'root' eingeloggt.
  8. Downloaden Sie die PostgreSQL-Source-Datei postgresql-7.2.tar.gz (9 MByte) von
    http://www.postgresql.org/ftpsite/v7.2/postgresql-7.2.tar.gz.
  9. Wechseln Sie in das Verzeichnis, in das Sie diese Datei kopiert haben und führen Sie folgende Kommandos aus:
    gunzip postgresql-7.2.tar.gz
    tar xf postgresql-7.2.tar
    cd postgresql-7.2
    ./configure
    gmake
    gmake install
    mkdir /usr/local/pgsql/data
    chown -R postgres /usr/local/pgsql
    su - postgres
    /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
    /usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data >logfile 2>&1 &
    Zu './configure' gibt es mit dem Parameter '--help' Hinweise für besondere Anpassungen.
  10. Sie können jetzt bereits die Installation testen, indem Sie mit 'createdb' eine Datenbank einrichten und mit 'psql' eine Tabelle anlegen und auslesen. Beides ist unten unter 'Anlage einer Database und einer Tabelle' beschrieben.
  11. Damit PostgreSQL von anderen Rechnern erreichbar ist, müssen die IP-Adressbereiche, die erlaubt werden sollen, als 'trust' eingetragen werden. Loggen Sie sich als 'root' ein und öffnen Sie die Datei
    /usr/local/pgsql/data/pg_hba.conf
    und fügen Sie ganz unten eine Zeile hinzu ähnlich wie
    host all 10.1.0.0 255.255.0.0 trust
  12. Damit PostgreSQL beim Booten automatisch korrekt gestartet wird, müssen in der Datei
    /etc/init.d/postgresql
    korrekte Einträge vorhanden sein. Je nach Linux- oder PostgreSQL-Version müssen Pfade angepasst werden, zum Beispiel:
    H=/usr/bin/postmaster--> H=/usr/local/pgsql/bin/postmaster
    eval DATADIR=${POSTGRES_DATADIR:-~postgres/data}--> DATADIR=/usr/local/pgsql/data
    OPTIONS=${POSTGRES_OPTIONS:-"-i"}--> OPTIONS="-i"
    BIN_VERSION=$(/usr/bin/postgres --version|sed 's/.* \([0-9]\+\.[0-9]\+\).*/\1/')--> BIN_VERSION=$(/usr/local/pgsql/bin/postgres --version|sed 's/.*\([0-9]\+\.[0-9]\+\).*/\1/')
    Alle genannten Einträge sollen (anders als eventuell hier dargestellt) ohne Zeilenumbruch eingetragen sein.
    Anschließend müssen Sie die PostgreSQL-Datenbank starten und stoppen können mit den Kommandos:
    /etc/init.d/postgresql start
    /etc/init.d/postgresql stop
  13. Wenn die Datei /etc/init.d/postgresql korrekt eingerichtet ist, sollten Sie einstellen, dass PostgreSQL beim Booten automatisch gestartet wird. Führen Sie aus:
    'YaST' | 'Administration des Systems' | 'Konfigurationsdatei verändern' | 'START_POSTGRES' | 'yes' | 'F10'.
  14. Falls das automatische Starten der PostgreSQL-Datenbank nach dem Booten nicht funktioniert, sollten Sie überprüfen, ob korrekte Start-/Kill-Links auf die Datei '/etc/init.d/postgresql' eingerichtet sind. Mögliche Links sind zum Beispiel:
    /etc/init.d/rc3.d/S10postgresql
    /etc/init.d/rc5.d/S10postgresql
    /etc/init.d/rc3.d/K13postgresql
    /etc/init.d/rc5.d/K13postgresql
    Eingerichtet wird ein Link zum Beispiel folgendermaßen:
    ln -s /etc/init.d/postgresql /etc/init.d/rc3.d/S10postgresql


Kurzanleitung zur Anlage einer Database und einer Tabelle in PostgreSQL

  1. PostgreSQL muss installiert sein, wie unter Installation unter SuSE Linux 8.x beziehungsweise unter Installation unter SuSE Linux 7.x beschrieben ist.
  2. Als Benutzer 'postgres' einloggen:
    su - postgres
  3. Eine Datenbank wird in PostgreSQL eingerichtet mit:
    createdb MeineTestDatenbank
  4. SQL-Kommandos können mit 'psql' ausgeführt werden, zum Beispiel so (dabei nicht die abschließenden Semikolons vergessen):
    psql MeineTestDatenbank
      create table MeineTestTabelle ( i int, c char(3), vc varchar(8000) );
      \d
      insert into MeineTestTabelle values ( 7, 'aBc', 'xyzXYZ' );
      select * from MeineTestTabelle;
      \q
  5. Hilfe zu diesen und weiteren Kommandos gibt es mit '\h' und '\?' (bei letzterer mit Leertaste weiterblättern und mit 'q' beenden).
    Zum Beispiel kann ein Benutzer angelegt werden mit:
      create user MeinUserName with password 'MeinPasswort';


Datentypen, Programmierbeispiele


Datentypen in PostgreSQL

PostgreSQL unterstützt die Datentypen serial, int2, int4, int8, float4, float8, numeric, time, datetime, char, varchar, text, oid, bytea und viele weitere.

Einen Vergleich der Datentypen-Implementation zu anderen Datenbanken gibt es unter sql.htm#SQL-Datentypen.

Einfaches Programmierbeispiel zum Auslesen einer Tabelle mit Java

... gibt es in java-sql.htm.


Einfaches Programmierbeispiel zum Auslesen einer Tabelle mit JSP

... gibt es in jsp-grundlagen.htm.


Large Objects in PostgreSQL

Den SQL99-Datentyp 'BLOB' (Binary Large Object) kennt PostgreSQL 7.2 nicht.
Stattdessen wurden LOBs früher als 'OID' (Object Identifier) gespeichert und können ab Version 7.2. als 'BYTEA' (Byte Array) gespeichert werden. Genaueres zu 'OID' und 'BYTEA' erfahren Sie unter http://developer.postgresql.org/docs/postgres/jdbc-binary-data.html.

Wird die Tabellenspalte als 'BYTEA'-Typ angelegt, können die LOBs per JDBC genauso wie BLOBs anderer Datenbanken mit 'prepareStatement()/setBinaryStream()' geschrieben und mit 'getBinaryStream()/read()' ausgelesen werden, wie unter java-sql.htm#BLOB beschrieben ist.

Wird die Tabellenspalte als 'OID'-Typ angelegt, können die LOBs mit den PostgreSQL-Sonderfunktionen 'lo_import' und 'lo_export' geschrieben und gelesen werden, wie das folgende Beispiel demonstriert. Dabei muss beachtet werden, dass sich die Pfadangaben nicht auf den Client-Rechner, sondern auf den PostgreSQL-Server beziehen.

CREATE TABLE MeineTabelle ( BildName VARCHAR PRIMARY KEY, BlobSpalte OID );
INSERT INTO  MeineTabelle
       VALUES ( 'Sonnenblume', lo_import( '/home/public/MeinBild1.jpg' ) );
SELECT lo_export( MeineTabelle.BlobSpalte, '/home/public/MeinBild2.jpg' )
       FROM MeineTabelle
       WHERE BildName = 'Sonnenblume';


Weiterführende Informationen





Weitere Themen: andere TechDocs | SQL | MySQL | JSP | Webanwendungen | Linux
© 1998-2007 Torsten Horn, Aachen