This page (revision-18) was last changed on 03-Aug-2012 15:46 by ThomasBayen 

This page was created on 14-Jun-2007 17:19 by MarkusMonderkamp

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
18 03-Aug-2012 15:46 7 KB ThomasBayen to previous Neue Seite für Postgres-Metadatenanalyse
17 08-Jan-2012 12:48 7 KB ThomasBayen to previous | to last Link ins FreiBier-Wiki zu meiner Queries-Sammlung
16 08-Jan-2012 12:46 6 KB ThomasBayen to previous | to last
15 25-Dec-2011 15:41 6 KB ThomasBayen to previous | to last Admin-User Passwort ändern
14 16-Dec-2011 01:45 6 KB ThomasBayen to previous | to last Vergleichen von ganzen Datensätzen
13 19-Nov-2011 00:10 5 KB ThomasBayen to previous | to last Binärdaten per Kommandozeile lesen
12 30-Apr-2011 17:07 4 KB ThomasBayen to previous | to last Passwort setzen, wenn man Benutzer anlegt
11 27-Mar-2011 19:02 4 KB ThomasBayen to previous | to last Link zu neuer Seite eingefügt
10 27-Mar-2011 19:02 4 KB ThomasBayen to previous | to last Link zu neuer Seite eingefügt
9 24-Feb-2011 09:27 4 KB ThomasBayen to previous | to last Link zu PostgresVolltext
8 30-Nov-2010 12:59 4 KB Markus Monderkamp to previous | to last PostGIS
7 30-Nov-2010 11:32 4 KB ThomasBayen to previous | to last Erste Schritte mit PostgreSQL unter Debian Linux
6 30-Nov-2010 10:11 4 KB ThomasBayen to previous | to last Erste Schritte mit PostgreSQL unter Debian Linux
5 31-Jan-2008 16:33 1 KB ThomasBayen to previous | to last Tagging
4 17-Jan-2008 17:20 1 KB PeterHormanns to previous | to last Tagging
3 15-Jun-2007 15:04 1 KB MarkusMonderkamp to previous | to last Querverweis zu Datenbank
2 14-Jun-2007 17:32 1 KB MarkusMonderkamp to previous | to last psql, der Pg-Konsolen-Client
1 14-Jun-2007 17:19 1 KB MarkusMonderkamp to last Startschuss mit Link zu postgres.de

Page References

Incoming links Outgoing links

Version management

Difference between version and

!!! ~PostgreSQL

~PostgreSQL ist laut http://www.postgres.de ein ''objekt-relationales Datenbank-Managementsystem...''


!!Schnellstart unter Debian Linux

Wenn man ~PostgreSQL nicht selber kompiliert und lokal als User installiert (was auch geht), wird man in den meisten Fällen ein fertiges Paket des Betriebssystems installieren. Unter Debian Squeeze war es bei mir nun so, daß man dort im ersten Moment gar nicht direkt auf die Datenbank zugreifen konnte, weil noch keine Benutzer eingerichtet waren. In einer neu installierten ~PostgreSQL-Datenbank ist der Superuser der Benutzer "postgres". Dieser hat kein Passwort, sondern kann sich nur an der Datenbank authentifizieren, wenn man als Unix-Benutzer "postgres" auf ihn zugreift. Dieser Unix-Benutzer ist bereits angelegt, hat aber auch kein Passwort. Also wird man zuerst "root", wecchselt dann mittels "su" zu "postgres" und kann dann auf die Datenbank zugreifen.

Man kann Benutzer mit Hilfe von "psql" anlegen, mit dem man direkte SQL-BEfehle an die Datenbank schicken kann. Für einige Dinge (wie das Anlagen von Benutzern) gibt es jedoch vereinfachende Konsolenbefehle. Also nimmt man "createuser". Ich habe die Option "-d" hinzugefügt, damit der neue Benutzer eigenständig Datenbanken anlegen kann.

Eventuell ist noch die Option "-P" sinnvoll, um ein Passwort vergeben zu können. Ansonsten kann man nur per "ident"-Authenfifizierung, d.h. nur lokal bei einer Socket-Connection von einem gleichnamigen Unix-Account aus auf die Datenbank zugreifen. Weitere Optionen stehen in der Manpage zu "createuser".

 $ su root
 # su postgres
 $ createuser -dSR meinbenutzer

Wenn man "meinbenutzer" gleich seinem Unix-Account gewählt hat, kann dieser Account nun direkt auf die Datenbank zugreifen. Wer anders zugreifen möchte, muss noch die Option "P" anfügen, um ein Passwort zu setzen.

 $ createdb test
 $ psql test

Nun kann man munter SQL-Befehle absetzen, was nicht mehr Teil dieses Artikels ist. -- ThomasBayen

Wer in Zukunft auch direkt (z.B. per PGAdmin3) Administrationsbefehle absetzen will, ohne sich jedesmal als Unixbenutzer "postgres" einloggen zu müssen, sollte dem Datenbank-Benutzer "postgres" ebenfalls ein Passwort spendieren:

 $ su root
 # su postgres
 $ psql -c "ALTER USER postgres WITH PASSWORD 'geheimespasswort';"


Ich empfehle ansonsten alternativ den Artikel [Use PostgreSQL Relational Databases on on Debian 5 (Lenny)|http://library.linode.com/databases/postgresql/debian-5-lenny]


!!selbst kompilieren

Alles halb so wild.
Im Gegensatz zu MySQL (siehe dort) habe ich [PostGreSQL|http://www.postgres.de/] auch unter HPUX kompilieren können.

{{{
Geht auch ohne Root-Rechte mit
configure --PREFIX=/home/dau
make && make install
}}}



!! wichtige Konsolenbefehle

Die Verwaltung erfolgt mit pg_ctl, einfach das Pg-bin-Verzeichnis in den Suchpfad einbinden:

{{{
% > pg_ctl --help
pg_ctl is a utility to start, stop, restart, reload configuration files,
report the status of a PostgreSQL server, or signal a PostgreSQL process.

Usage:
 pg_ctl start   [-w] [-D DATADIR] [-s] [-l FILENAME] [-o "OPTIONS"]
 pg_ctl stop    [-W] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]
 pg_ctl restart [-w] [-D DATADIR] [-s] [-m SHUTDOWN-MODE] [-o "OPTIONS"]
 pg_ctl reload  [-D DATADIR] [-s]
 pg_ctl status  [-D DATADIR]
 pg_ctl kill    SIGNALNAME PID

Common options:
 -D, --pgdata DATADIR   location of the database storage area
 -s, --silent           only print errors, no informational messages
 -w                     wait until operation completes
 -W                     do not wait until operation completes
 --help                 show this help, then exit
 --version              output version information, then exit
(The default is to wait for shutdown, but not for start or restart.)
[...]
}}}

Der Konsolen-Client lauscht auf den Namen psql:

{{{
% > psql --help
[... alle Parameter ...]

% > psql -d __DB__ -U __User__ -W -h __Horst__ -p __Port__

DB => \? ->listet Hilfe am psql-Prompt auf
DB => \l -> listet alle Postgres-Datenbanken auf dem Pg-Server
DB => \c Blumenkohl -> verbindet mit Datenbank aus der Gattung Sellerie
DB => \dt -> listet Tabellen der aktuell verbundenen DB
DB => \q -> beendet den Klienten
}}}

--MarkusMonderkamp


!! Volltextsuche

Postgres hat eine recht ausgefeilte Möglichkeit zur Volltextsuche. Mehr dazu auf der Seite PostgresVolltext.

!! Metadaten verstehen

Die Metadaten von Postgres können ebenfalls per Datenbank-Abfrage ausgelesen werden. Mehr dazu auf der Seite [pg_catalog].

!!
automatische Erzeugung von IDs

Hierzu habe ich auf der Seite AutoIncrementMitPostgreSQL einen Artikel geschrieben. -- ThomasBayen

!! Extrahieren von Binärdaten

Die Arbeit mit Binärdaten ist in den meisten Programmen, die einem die Pflege der Datenbank erleichtern sollen, recht schwierig. Dabei geht es oftmals nur darum, eine abgespeicherte Binärdatei auslesen zu können. Auch das Kommandozeilentool {{psql}} hilft einem auf den ersten Blick dabei nicht weiter. Zum Glück geht das auch dennoch von der Kommandozeile aus (habe ich von [Stackoverflow|http://stackoverflow.com/questions/6730729/how-to-download-postgres-bytea-column-as-file]). Hier lese ich z.B. eine Datei aus dem Archiv von [Adempiere]:

 psql -U adempiere -h localhost -c "\copy (select encode(binarydata,'hex') from ad_archive limit 1) to stdout" | xxd -p -r >datei

speziell für Adempiere kann man dann die Pipe noch um {{zcat}} erweitern und erhält als Ergebnis eine PDF-Datei des Dokumentenarchivs.

!! Vergleichen von Datensätzen

Wenn man überprüfen will, ob zwei Datensätze identisch sind, geht das mit [row-wise comparison|http://www.postgresql.org/docs/8.2/static/functions-subquery.html#AEN14047]. Leider ist das nicht mit Beispielen versehen, weshalb ich hier eins hinsetze:

 (SELECT ROW("Artikel1".*) IN (SELECT * FROM "Artikel1" WHERE "ArtikelNr"='01450') FROM "Artikel1" WHERE "ArtikelNr"='01450');

Diese Abfrage ergibt so "true". Sie macht natürlich keinen Sinn, weil die beiden vergleichten Datensätze identisch sind, aber man kann die Datensätze natürlich auch aus zwei verschiedenen Tabellen holen. Damit kann man dann z.B. prüfen, ob sich Daten im Vergleich zu einer Backup-Tabelle geändert haben.

!!! Links

* http://www.postgresql.org - Projekt-Homepage
* http://www.postgresql.org/docs/books/pghandbuch.html.de - Das "offizielle Handbuch", das im Web komplett verfügbar ist. Augenscheinlich ist es seit 2003 nicht mehr aktualisiert worden, allerdings sollte das für Einsteiger erstmal kein riesiges Problem sein. Es ist ordentlich geschrieben und deutsch.
* https://www.opensourcepress.de/index.php?26&backPID=178&tt_products=242 - weitergehendes Buch, das auch Themen wie Optimierung und Programmierung tiefgehend darstellt. (Papierbuch - nicht im Web lesbar! Wen es interessiert, der kann ThomasBayen fragen, der es besitzt.)
* http://postgis.refractions.net/ - neue Horizonte: erweitert ~PostGreSQL Server zum Geographie-Backend für [GIS-Anwendungen|http://www.geomagazin.net/karto/gis.htm]
* https://sourceforge.net/apps/mediawiki/freibier/index.php?title=SQL_Queries - Sammlung von SQL-Queries, die ThomasBayen für [Adempiere] angelegt hat, die aber auch allgemeine Tips zu Queries enthält
<<
[{Tag Datenbank}]