Postgres

Willemers Informatik-Ecke

Initialisierungsarbeiten

In der Regel übernimmt das Installationspaket von PostgreSQL die Einrichtung der Datenbank. Unter Debian oder Ubuntu lautet der Befehl:
linux # apt-get install postgresql

Datenbankbenutzer

Nach der Installation ist nur der Linux-Benutzer postgres berechtigt, die Datenbank zu starten. Eine Anmeldung als User postgres kann auf jeden Fall auf dem Umweg über die Anmeldung als root erfolgen. Auch wenn dieser kein gültiges Passwort besitzt oder aus Sicherheitsgründen keines besitzen soll.

linux $ su -
Passwort: 
linux # su - postgres
linux $ psql
psql (9.1.1)
Geben Sie help für Hilfe ein.

postgres=# 
Sie können die Datenbankkommandozeile mit Strg-D (ctrl-D) oder \q wieder verlassen. Aber zunächst soll ein Datenbankbenutzer angelegt werden.

Mit dem Befehl CREATE USER kann ein Datenbankbenutzer angelegt, mit DROP USER kann er wieder gelöscht werden. Notwendiger Parmaeter ist der Benutzername.

Als weiterer Parameter kann ihm ein Passwort zugewiesen werden, es kann die Erlaubnis erteilt werden, einen Benutzer oder eine Datenbank anzulegen.

CREATE USER name [ PASSWORD 'password' ] [ CREATEDB|NOCREATEDB ] | [ CREATEUSER|NOCRERATEUSER ]
Ist der Benutzer auch Benutzer des Betriebssystems, kann dieser anschließend psql aufrufen, so wie das bisher nur dem Benutzer postgres möglich war.

Eine Änderung dieser Paramter ist mit dem Befehl ALTER USER wieder mit dem Benutzernamen als Parameter möglich.

Dem Benutzer werden mit dem Befehl GRANT Rechte zugewiesen, per REVOKE entzogen.

Datenbank anlegen

Mit dem Befehl psql -l kann festgestellt werden, welche Datenbanken bereits angelegt wurden.

Das Anlegen einer Datenbank wird durch das Programm createdb von der Kommandozeile des Betriebssystems aus gemacht. Den Befehl darf nur ein Benutzer ausführen, der eine Berechtigung dazu hat.

linux $ createdb mydb

Nun kann der Kommandozeileninterpreter von PostgreSQL aufgerufen werden. Dieser erwartet als Parameter die Datenbank.

linux $ psql mydb
psql (9.1.1)
Geben Sie »help« für Hilfe ein.

mydb=# 
Nach dem Verlassen durch Strg-D oder \q kann die Datenbank mit dem Programm dropdb wieder gelöscht werden.

Arbeiten mit PostgreSQL

Innerhalb des Kommandointerpreters psql können SQL-Kommandos abgesetzt werden. Neben den SQL-Standard-Befehlen gibt es besondere Befehle, die mit dem Backslash eingeleitet werden:

\h Hilfe zu SQL-Anweisungen
\? Hilfe zu internen Anweisungen
\g oder Semikolon schließt eine Anfrage ab
\q oder Strg-D Beenden des Kommandointerpreters

Die SQL-Befehle werden mit einem Semikolon abgeschlossen.

Skriptausführung

Das Erzeugen der Grundstruktur einer Datenbank kann in einer Skriptdatei erfolgen. Diese wird über den Befehl \i von psql aus gestartet. Als Parameter wird der Dateiname angegeben.

postgres=# \i catering.sql
Alternativ kann der Skript auch von der Linux-Shell aus gegeben werden. Dazu wird dem Aufruf des Kommandointerpreters durch ein Kleinerzeichen der Inhalt der Skriptdatei als Eingabe übergeben.
linux $ psql mydb < myskript.sql
Zwei Minuszeichen sind das Kommentarzeichen. Der Rest der Zeile wird vom Interpreter ignoriert.

Datenimport

Sie können eine Tabelle mit Daten aus einer Textdate füllen. Der Befehl dazu lautet:

COPY mytable FROM '/home/user/tabelleninhalt.txt';

Transaktionen

Transaktionen werden mit BEGIN; eingeleitet. Dann erfolgen ein oder mehrere Datenbankbefehle. Mit dem Befehl COMMIT werden die Befehle bestätigt. Dann werden alle Aktionen durchgeführt. Sollten einer der Befehle fehlschlagen führt ein ROLLBACK dazu, dass keiner der Befehle ausgeführt wird und der Zustand wiederhergestellt ist, der zum Zeitpunkt des BEGIN; vorlag.

Datensicherung

Mit dem Befehl pg_dump wird eine Datenbank gesichert. Als Parameter wird der Name der Datenbank erwartet. Die Ausgabe erfolgt auf dem Standardausgabekanal und muss umgeleitet werden.

pg_dump mydb > dbsicher

\end{gpListing*} Die Umleitung ermöglicht eine flexible Umleitung des Datenstroms durch Filterwerkzeuge auf beliebige Datenträger. Bei der R\"ucksicherung muss zunächst die Datenbank angelegt werden. Dann kann die Datensicherung mit pqsql eingelesen werden.

createdb mydb
psql mydb < dbsicher

\end{gpListing*} Der Befehl pg_dumpall legt eine komplette Datensicherung der gesamten Datenbankinstallation an.

pg_dumpall > pgsicherung

\end{gpListing*} Die Rücksicherung einer solchen Vollsicherung erfolgt auch per psql.

psql -f pgsicherung postgres

Zugriffskonfiguration

Die Konfigurationsdateien von PostgreSQL befinden sich bei Debian im Verzeichnis /etc/postgresql/Versionsnummer/main.

Netzwerkzugriffe

In der Datei /etc/postgresql/Versionsnummer/main/postgresql.conf finden sich die wichtigsten Parameter.
listen_addresses = '*'    # erlaubt den Zugriff aus dem Netzwerk
listen_addresses = 'localhost' # beschränkt Zugriff auf den lokalen Rechner

pg_hba.conf

Die Datei pg_hba.conf verwaltet, welche Clients auf die PostgreSQL-Datenbank zugreifen dürfen. Sie können einschränken, dass nur lokale Benutzer auf bestimmten Datenbanken arbeiten dürfen, falls diese beispielsweise ausschließlich für den PHP-Zugriff gedacht ist. Sie können bestimmte Benutzer auf bestimmte Client-Rechner beschränken. Die Standardkonfiguration erlaubt alle Zugriffe.

# Database administrative login by UNIX sockets
local   all         postgres                          ident
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

Die Spalten bedeuten im Einzelnen:


Homepage 26.9.2001, 6.6.2010 (C) Copyright 2001,2010 Arnold Willemer