Achtung: Diese Dokumentation ist veraltet, bitte rufen Sie die Übersichtsseite auf, um zur aktuellen Dokumentation zu gelangen.

2.1.4.1.4.1 Neuinstallation (am Beispiel derVersion 7.3.4)

Voraussetzungen

Postgres läuft unter verschiedenen UNIX-Varianten, z.B. Linux, HP-UX oder MacOS X. Wir empfehlen für den Einstieg Linux 2 . Vor der Installation unter Linux sollte die Locale-Umgebungsvariable $LANG auf den gewünschten Wert geändert werden ( de_DE.utf8 oder de_DE@euro oder eine andere deutsche Locale (meist in /usr/lib/locale ). Die aktuelle Locale wird bei der Installation von Postgres berücksichtigt und sorgt dafür, dass Datums- und Währungsformate korrekt sind.
Bei SuSE Linux 7.x bis 11.x ist es für ein Kompilieren der Postgres-Quellen erforderlich, dass die Pakete gcc, glibc, gettext, gettext-devel, readline, readline-devel, zlib und zlib-devel installiert sind.

Erzeugen Sie zunächst den User postgres mit dem Homeverzeichnis der Postgres-Installation (z.B. unter Linux mit useradd -g users -d /usr/local/pgsql postgres ).

In der Postgres-7.2-Version ist es wichtig, den Datenbankserver für internationale Sprachumgebungen zu konfigurieren, deshalb bietet es sich an, die Installation nicht als Binary- sondern als Quell-Installation vorzunehmen 3 . Bei höheren Versionen von Postgres ist dies nicht mehr nötig.

In der Download-Version von Postgres wird Postgres standardmäßig nach /usr/local/pgsql installiert. Als DBSpace muss man ein oder mehrere Verzeichnisse anlegen und mit initdb vorbereiten. Die SuperX-Datenbank läßt sich dann in einem eigenen DBSpace ablegen.

Zunächst müssen Sie sich als root anmelden. Wir gehen im folgenden davon aus, dass die Quellen von Postgres im Verzeichnis
/usr/src/packages/SOURCES

liegen (das Archiv z.B. von postgresql-7.3.4.tar.gz muss hier entpackt werden).

Dann gehen Sie in das Verzeichnis postgresql-7.3.4 , und führen folgende Befehle aus:

 

Postgres 7.3.-9x
Installation
"in short"

./configure --enable-nls

make

make install

mkdir /usr/local/pgsql/data

chown postgres /usr/local/pgsql/data

Wenn Sie Postgres 7.2.x installieren, müssen beim ./configure der Parameter --enable-multibyte=LATIN1 gesetzt werden, in Postgres 7.3 oder höher ist dies defaultmäßig bereits eingebaut sind.

Wenn Sie SSL Support benötigen, müssen Sie noch den Parameter –with-openssl hinzufügen. Wenn Sie Postgres in einem anderen Verzeichnis als /usr/local/pgsql installieren wollen, müssen Sie den Parameter –prefix=<<Pfadname>> hinzufügen. Weitere Optionen fürs configure gibt die Zeile

./configure --help

Damit sind die Schritte, die als root auszuführen sind, beendet. Wir wechseln nun zur Kennung postgres mit
su - postgres

Vor der Initalisierung des DBSPACE sollte die Sprachumgebung des Users postgres korrekt sein.   Für die bash wird in den meisten Distributionen die Umgebung generell in der Datei .bashrc bzw. .profile im Homeverzeichnis des Users postgres gesetzt; dort geben Sie den Pfad für das data -Verzeichnis an, und legen die Ausführprogramme von Postgres in den Datenpfad. Hier ein Beispiel für den Betrieb mit UTF-8:

.bashrc
bei Codierung mit UTF-8:

...
export LANG=de_DE.utf8

#Zur Sicherheit für Postgres auch einzeln:

export LC_CTYPE='de_DE.utf8'

export LC_COLLATE='de_DE.utf8'

export LC_TIME='de_DE.utf8'

export LC_NUMERIC='de_DE.utf8'

export LC_MONETARY='de_DE.utf8'

export LC_MESSAGES='de_DE.utf8'

 

PATH=$PATH:/usr/local/pgsql/bin

export PGDATA=/usr/local/pgsql/data
export PGLIB=/usr/local/pgsql/lib
...

 

und hier ein Beispiel für ISO:

.bashrc
bei Codierung in ISO

...
export LANG=de_DE@euro

#Zur Sicherheit für Postgres auch einzeln:

export LC_CTYPE='de_DE@euro'

export LC_COLLATE='de_DE@euro'

export LC_TIME='de_DE@euro'

export LC_NUMERIC='de_DE@euro'

export LC_MONETARY='de_DE@euro'

export LC_MESSAGES='de_DE@euro'

 

PATH=$PATH:/usr/local/pgsql/bin

export PGDATA=/usr/local/pgsql/data
export PGLIB=/usr/local/pgsql/lib
...

Wenn die Sprachumgebung stimmt, dann wird der DBSPACE vom User postgres initialisiert.

Initialisierung des DBSPACE

/usr/local/pgsql/bin/initdb -D $PGDATA

 

 

Durch initdb wird der DBSpace erzeugt.   Wenn die Umgebung stimmt, dann wird Postgres für die deutsche Locale vorbereitet (Sortierung von Zeichen, Datums- und Währungsformate etc).

 

Ausgabe von
initdb

/usr/local/pgsql/bin/initdb -D $PGDATA
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale de_DE.utf8.
This locale setting will prevent the use of indexes for pattern matching
operations.   If that is a concern, rerun initdb with the collation order
set to "C".   For more information see the Administrator's Guide.

 

 

Hinweis für SuSE -Anwender

Wenn Sie Postgres als Binärpaket aus der Distribution von SuSE 8.x - 10.x verwenden, müssen Sie beachten, dass der DBSPACE beim ersten Start des Postmaster automatisch in /var/lib/pgsql/data angelegt wird. Wenn dabei die Umgebungsvariablen nicht auf die deutsche Locale gesetzt sind, wird ein amerikanischer Zeichensatz benutzt (Default-Einstellung). Bevor Sie also das Init-Script z.B. im Runlevel-Editor des YAST starten, sollten Sie mit dem Sysconfig-Editor (im Yast: System->Editor für Sysconfig-Dateien ) die Variable POSTGRES_LANG (im Yast: Suche nach "POSTGRES") auf die deutsche Locale ( de_DE.utf8 oder   de_DE@euro setzen. Außerdem sollten Sie dann die Variable POSTGRES_OPTIONS=-i
setzen.
Noch ein Fallstrick in SuSE 9.1: Wegen eines Bugs im Yast funktioniert die Suche im Sysconfig-Editor nur im Textmodus.

 

 

Dann müssen Sie die ip-Nummer des Rechners mit dem SuperX-Webserver (sowie von allen anderen Clients, die direkt auf die Datenbank zugreifen sollen) in die Datei /usr/local/pgsql/data/pg_hba.conf eintragen. In der Datei $PGDATA/pg_hba.conf stehen die Verbindungsberechtigungen für der Server; hier müssen Sie mindestens dem User superx die Verbindungsrechte geben, z.B. mit folgender Zeile:

 

Auszug aus pg_hba.
conf

host     all         all         127.0.0.1/32         trust
host     all         all         192.168.0.16/32       trust

Die obige Zeile gibt dem User superx Verbindungsrechte für alle Datenbanken auf dem lokalen Rechner 192.168.0.16 .

Die Netzmaske "/32" schränkt die Regel einen Rechner ein (entspricht 255.255.255.255). Wenn Sie "/24" wählen, öffnen Sie die Netzmaske auf 255.255.255.0, d.h. bei obigem Beispiel alle Rechner im Netz 192.168.0.x.

Bitte beachten Sie, dass die Standardvorgabe nach der Installation von Postgres die ist, dass alle User auf dem aktuellen Rechner mit dem Datenbankserver verbinden dürfen. Dies sollten Sie natürlich ändern.

Wenn Sie statt " trust " den Wert " md5 " eingeben, dann erfolgt eine Passwortabfrage. Dies ist für nächtliche Ladejobs nicht praktikabel. In diesem Falle müssen Sie das Passwort per Client übergeben, entweder mit einer Datei " ~/.pgpass " mit dem Inhalt:

<<Servername>>:<<Port>:<<Datenbank>>:<<Kennung>>:<<Passwort>>

z.B.

dbserver.hochschule.de:5432:superx:superx:anfang12

Alternativ kann man auch die Umgebungsvariable PGPASSWORD mit dem Passwort belegen, dies ist allerding "deprecated" und wird in zukünftigen Versionen von Postgres unterbunden.

Weitere Parameter werden in der Konfigurationsdatei postgresql.conf definiert; wichtig ist die Einstellung, dass Postgres einen TCP-IP-Socket öffnet (Parameter tcpip_socket=true bei Postgres 7.x, listen_addresses=<<IP-Nr.>> bei Postgres 8.0 oder höher) sowie der TCP-IP-Port (port = 5432 ist die Standardvorgabe). Die Anzahl der gleichzeitig offnenen Verbindungen muss kleiner sein als die Anzahl, die Sie für das SuperX-Servlet definieren. Weitere Details zur Einrichtung von Postgres-Runtime-Parametern finden Sie im Admin-Handbuch der Postgres-Distribution. Außerdem sollen Sie beim Betriebssystem SuSE 9.1 oder höher den IPV6-Eintrag für "localhost" (::1)   in /etc/hosts auskommentieren.

Danach wird der Datenbankserver gestartet mit dem Befehl postmaster.
/usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data

Wir empfehlen, die Ausgabe von dem Prozeß in eine Logdatei zu schreiben, z.B. nach /var/log/postgresql.log . Legen Sie diese Datei als User root an, und machen Sie dann den User postgres zum Eigentümer. Ein Beispielscript ist folgendes (im Kernmodul zu finden unter $SUPERX_DIR/db/install ):

 

pgsql_start.x
Ein Beispielscript zum Start von Postgres

#!/bin/sh
PG_HOME=/usr/local/pgsql
export PG_HOME
PGDATA=$PG_HOME/data
export PGDATA
PGPORT=5432
export PGPORT
$PG_HOME/bin/pg_ctl -D $PGDATA -l /var/log/postgresql.log -o -i start

Um zu testen, ob die Locale richtig ist, gehen Sie als User postgres in die Shell:

 

Prüfen der Locale

Öffnen Sie mit
psql template1
die Datenbank; dann geben Sie ein:
select 'aaa' union select 'bbb' union select 'äää' order by 1;

Bei richtiger Locale lautet die Ausgabe:

?column?
----------
aaa
äää
bbb
(3 rows)

 

Im Verzeichnis $SUPERX_DIR/db/install befindet sich ein Shellscript check_sortierung_pg.x, das prüft, ob die aktuell in der Umgebung festgelegten Variablen zu korrekter Darstellung von Umlauten und Sortierung unter Postgres der gewünschte Ergebnis bringen. Das Script legt einen temporären DBSPACE an, führt darin einen Testselect aus und löscht den DBSPACE wieder, in der Logdatei check_sortierung.log steht dann das Ergebnis. In dem Script muss die Variable PG_HOME korrekt gesetzt sein, der Rest wird automatisch geprüft.

Dann erzeugen Sie den User superx für Postgres:
createuser superx

Dieser User muss Datenbanken erzeugen dürfen, braucht aber, wenn Sie als SuperUser bereits die Prozedursprache plpgsql in template1 installiert haben, kein Super-User sein bzw. bei Postgres 7.4 das Recht haben, andere User erzeugen zu dürfen 4 . Aus Sicherheitsgründen empfehlen wir, den User superx , der standardmäßig auch der User ist, mit der die Webapplikation auf die Datenbank zugreift, nicht zum Super-User zu machen.

Wenn der User ein SuperUser sein soll, geben Sie ein:

createuser --superuser superx

ggfs. ALTER USER superx WITH PASSWORD 'new_password';

 

Bei Änderungen der pg_hba.conf müssen Sie übrigens Postgres nicht neu starten, Sie können die Datei im laufenden   Betrieb auch mit pg_ctl -D $PGDATA reload neu laden.  

SuperX benötigt die Prozedursprache plpgsql . Wenn Sie als SuperUser die Prozedursprache installieren wollen (in Postgres 7.x und 8.x notwendig, in Postgres 9.x nicht mehr), geben Sie in der Shell ein:

createlang plpgsql

Damit ist Postgres installiert und für die SuperX-Installation konfiguriert. Bei dieser Gelegenheit sollten Sie den Datenbankserver gleich als Dienst beim Systemstart einrichten.

 

Es kann unter Umständen folgende Fehlermeldung in dem Postgres Logfile auftauchen:

FATAL:   could not create shared memory segment: Das Argument ist ungültig

DETAIL:   Failed system call was shmget(key=5433001, size=39149568, 03600).

HINT:   This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.   You can either reduce the request size or reconfigure the kernel with larger SHMMAX.   To reduce the request size (currently 39149568 bytes), reduce PostgreSQL's shared_buffers parameter (currently 4096) and/or its max_connections parameter (currently 100).

If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.

The PostgreSQL documentation contains more information about shared memory configuration.

Lösung:

Als erstes die zu ändernde Datei im Originalzustand sichern.

cp /etc/sysctl.conf /etc/sysctl.conf-orig

Danach mit vi die Datei /etc/sysctl.conf bearbeiten und folgendes am Ende einfügen:

# For postgres

kernel.shmmax = 104857600

Danach dürfte der Start von Postgres kein Problem mehr sein.

 

Vergl. http://www.postgresql.org/docs/current/static/kernel-resources.html#SYSVIPC

 


Druckversion HTML

Zur Superx-Homepage SuperX ist auch ein CampusSource-Projekt. Zur CampusSource-Homepage | Powered by FreeMarker Seite 30 / 386
Letzter Update: 11.7.2023
Impressum| Datenschutz