
\d tablename
(entspricht desc tablename; bei mysql)
Installation
sudo apt-get install postgresql
Vorarbeiten: Um zu ermöglichen, dass die postgreSQL mittels der Variable shared_buffers einen Cache mit mehr als ca. 32MB vorhalten kann, muss zunächst ein Kernel-Parameter namens SHMMAX hochgesetzt werden:
Unter ubuntu 11.04 kann man in der Datei /etc/sysctl.d/30-postgresql-shm.conf die folgende Zeile setzen (hier: bis zu 4GB für shared_buffers)
Bei anderen Distributionen kann man diese Datei neu in /etc/sysctl.d/ anlegen oder man kann die Zeile in die /etc/sysctl.conf einfügen.
SHMMAX muss größer sein als shared_buffers. Sonst kommt folgender Fehler beim Start des postgreSQL-Servers:
Konfiguration:
Variable | Beschreibung |
|---|---|
shared_buffers | Arbeitsspeicher, der für Caching verwendet werden kann. Sinnvoll ist z.B. 25-40% des verfügbaren Arbeitsspeichers. |
temp_buffers | Speicher für temporäre Tabellen im Arbeitsspeicher. Benötigen temporäre Tabellen mehr Speicher, wird auf Festplatte gespeichert. Dieser Wert sollte nur hochgesetzt werden, wenn oft große temporäre Tabellen (SQL: create temporary table ...) oft benutzt werden. |
work_mem | Arbeitsspeicher, der für Sortier- oder Hashoperationen benutzt werden darf. Sinnvoll sind 3-10% des verfügbaren Arbeitsspeichers. |
Bei einer Standard-Installation stehen dem Benutzer postgres zunächst nicht alle Befehler auf der Konsole zur Verfügung. Zur Abhilfe kann der entsprechende Pfad zur PATH-Variable des postgres-Benutzers hinzugefügt werden:
Dort neue Zeile eintragen und speichern:
Jetzt sollten alle postgreSQL-Befehle zur Verfügung stehen. Man muss den Pfad bei einem Wechsel der postgreSQL-Version unbedingt anpassen.
Dieses Beispiel initialisiert die postgreSQL mit folgenden Einstellungen
Hinweis: die vom Betriebsystem zur Verfügung gestellten locales kann man ansehen mit
Damit die locales auch beim Start Startskript verwendet werden, muss zuerst folgendes in der Datei /etc/postgresql/8.4/main/postgresql.conf gepflegt werden:
Außerdem kann man postgreSQL so konfigurieren, dass immer ein Passwort übergeben werden muss. Dies gilt auch für bereits angemeldete Benutzer:
Hierbei sollte man TCP-Verbindungen möglichst nicht zulassen (mit listen_addresses = 'localhost' in der Datei /etc/postgresql/8.4/main/postgresql.conf)
Achtung: Die Initialisierung löscht möglicherweise alle Datenbanken (und somit alle Daten!) sowie Benutzer. Die postgreSQL sollte daher am besten vor dem Anlegen von Datenbanken initialisiert werden.
Das alte Verzeichnis /var/lib/postgresql/8.4/main_ kann bei Gelegenheit gelöscht werden. Damit sind dann allerdings auch die alten Daten gelöscht.
Quellen:
http://www.postgresql.org/docs/8.4/static/app-initdb.html
http://www.postgresql.org/docs/8.4/static/multibyte.html
http://www.postgresql.org/docs/8.4/static/locale.html
in psql:
\db
Benutzer anlegen:
Zunächst wird ein neues Passwort zweimalig abgefragt. Im Anschluss fragt postgresql, ob der Benutzer superuser sein soll. Normalerweise sollte die Antwort "nein" lauten. Zum Schluss muss man evtl. noch das Datenbank-Passwort von posgres eingeben.
Zu beachten ist, dass das Passwort zur Authentifizierung nur nötig ist, wenn die Datei /etc/postgresql/8.4/main/pg_hba.conf entsprechend konfiguriert ist (md5 als method)
ALTER USER myuser with encrypted PASSWORD '123';
In der shell:
In der Shell:
Beenden mit \q
in SQL:
in psql:
weitere Encodings:
Damit PL/pgSQL zur Verfügung steht, muss es aktiviert werden mit
CREATE FUNCTION plpgsql_call_handler ()
RETURNS OPAQUE AS '/usr/local/pgsql/lib/plpgsql.so' LANGUAGE 'C';
CREATE LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler LANCOMPILER 'PL/pgSQL';
[bisher nicht getestet!]
Mit folgendem SQL-Statement können alle laufenden User-Prozesse auf dem postgresql-Server angezeigt werden:
SELECT datname,procpid,current_query FROM pg_stat_activity;
datname | procpid | current_query
-----------+---------+-------------------------------------------------------------
dwmteam1b | 27527 | SELECT datname,procpid,current_query FROM pg_stat_activity;
(1 Zeile)
Mit folgendem SQL-Statement kann ein User-Prozess auf dem postgresql-Server beendet werden:
select pg_cancel_backend(22345);
22345 ist in diesem Fall die procpid eines User-Prozesses. Bei Erfolg gibt die Funktion true zurück, sonst false.
Man muss hierzu superuser sein, sonst kommt eine Meldung:
ERROR: must be superuser to signal other server processes
Wenn man INSERT-Statements innerhalb einer Transaktion laufen lässt, kann man eine massive Beschleunigung erreichen. Im Test auf einem Laptop stieg der Durchsatz von 200 INSERTs pro Sekunde auf ca. 2000 INSERTs pro Sekunde. Eine Transaktion lässt sich erzeugen mit: