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
- Vergleich MySQL, PostgreSQL und MaxDB
- Kurzanleitung zur Installation von PostgreSQL 7.2 unter SuSE Linux 8.x von SuSE-CDs
- Kurzanleitung zur Installation von PostgreSQL 7.2 unter SuSE Linux 7.x vom Internet-Download
- Kurzanleitung zur Anlage einer Database und einer Tabelle in PostgreSQL
- Datentypen, Programmierbeispiele
- 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.
- 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.
- Loggen Sie sich als 'root' ein.
- 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
- 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
- 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
- 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 &
- 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.
- 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"
- 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
- 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.
- 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.
- Es soll nicht das PostgreSQL-Paket aus der Linux-Distribution verwendet werden, weil es dort nur in einer veralteten Version vorhanden ist.
- Loggen Sie sich als 'root' ein.
- 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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- 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
- 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'.
- 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
- PostgreSQL muss installiert sein, wie unter
Installation unter SuSE Linux 8.x beziehungsweise unter
Installation unter SuSE Linux 7.x beschrieben ist.
- Als Benutzer 'postgres' einloggen:
su - postgres
- Eine Datenbank wird in PostgreSQL eingerichtet mit:
createdb MeineTestDatenbank
- 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
- 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