sql-info.de
DeutschEnglish

3. Administration

3.1. Wie strukturiert PostgreSQL seine Datendateien? Was sind die nummerierten Dateien und Verzeichnissen in dem $PG_DATA/base/-Verzeichnis?

Die Nummern beziehen sich auf die oid des jeweiligen Objekts in dem Systemkatalog.

Die Verzeichnisnamen entsprechen Datenbanken, genauer dem Wert der oid-Spalte in der Tabelle pg_database. Diese Abfrage:

  SELECT oid, datname 
    FROM pg_database
ORDER BY oid

gibt eine komplette Liste zurück.

Innerhalb jedes Verzeichnisses entsprechen Dateinamen der Spalte relfilenode in der Tabelle pg_class:

  SELECT relfilenode, oid, relname 
    FROM pg_class
ORDER BY oid

Die Werte der Spalten relfilenode und oid sind normalerweise identisch. Einige internen Operationen (z.B. REINDEX and CLUSTER) haben Änderung des Dateinamens eines Objekts zur Folge; der geänderte Dateiname wird in relfilenode festgehalten, um den Bezug zwischen Datei und oid wiederherstellen zu können.

3.2. Wie kann ich die Definition von Views und Funktionen usw. sehen?

Trigger:

Mit psql, wenn Sie wissen, für welche Tabelle der Trigger gilt:

\dt (Name der Tabelle)

Eine einfache SQL-Abfrage wäre:

SELECT pg_catalog.pg_get_triggerdef(t.oid)
  FROM pg_catalog.pg_trigger t
 WHERE t.tgname = 'name_des_triggers'

View:

In psql:

\d name_of_view

Mit einer SQL-Abfrage gibt es eine nützliche Sicht im Systemkatalog pg_catalog.pg_view, z.B.:

SELECT definition
  FROM pg_catalog.pg_views
 WHERE viewname = 'name_der_sicht'

(Diese Abfrage berücksichtigt den Schemanamen der Funktion nicht).

Funktion:

In psql:

\df+ name_der_funktion

Mit einer SQL-Abfrage

SELECT prosrc 
  FROM pg_catalog.pg_proc 
 WHERE proname = 'name_der_funktion'

(Diese Abfrage berücksichtigt den Schemanamen der Sicht nicht).

Die obigen Abfragen funktionieren in PostgreSQL ab Version 7.3. Sie sollten auch in früheren Versionen funktionieren, die keine Schemata kennen, wenn man den Schemanamen pg_catalog. weglässt.

3.3. Wie veranlasse ich den automatischen Start bzw. Stopp von PostgreSQL beim Systemstart / -Stopp?

Dies hängt von Ihrem System und der Installationsweise von PostgreSQL ab. Bei vorkompilierten ("binary") Installationen (.rpm, .deb., FreeBSD ports usw.) wird normalerweise ein Start- / Stopp-Skript automatisch eingefügt. Bei manuellen Installation - etwa durch Kompilieren der Quellen - müssen Sie selber dafür sorgen.

Skripte für manche Systeme befinden sich im Quellverzeichnis contrib/start-scripts.

3.4. Wie kann ich eine Datenbank einem neuen Besitzer zuordnen?

Ab PostgreSQL 8.0 gibt es den Befehl ALTER DATABASE name OWNER TO new_owner.

Bis einschließlich 7.4 müssen die Systemtabellen direkt bearbeitet werden, z.B.:

       UPDATE pg_catalog.pg_database 
          SET datdba=(SELECT usesysid 
                       FROM pg_shadow 
                      WHERE usename='user_name')
        WHERE datname='db_name'
      

(Bei PostgreSQL-Versionen vor 7.3 lassen Sie pg_catalog. weg).

Eine direkte Bearbeitung der Systemtabellen ist mit Sorgfalt durchzuführen!

3.5. Wie sehe ich, welche Nutzer mit der Datenbank verbunden sind?

Die Sicht (VIEW) des Systemkatalogs pg_catalog.pg_stat_activity enthält Information über alle aktuellen Konnektionen.

In manchen Installationen ist die statistische Auswertung aus Performanzgründen nicht eingeschaltet, wodurch pg_catalog.pg_stat_activity nicht zur Verfügung steht.

Die Dokumentation: http://www.postgresql.org/docs/current/static/monitoring-stats.html (engl.) enthält weitere Information.

3.6. PostgreSQL verursacht Totalabstürze meines Intel-Linux-Systems

PostgreSQL läuft als unpriviligierte Anwendung. Es kann und wird nicht unter dem Nutzer root laufen und kann einen Systemabsturz nicht direkt verursachen.

PostgreSQL - wie jede anspruchsvolle Anwendung - kann intensive Platten- und Netzwerkzuggriffe auslösen, die bei fehlerhafter Hardware zu Systemabstürzen führen könnten.

Falls Sie Abstürze während des Betriebs von PostgreSQL erleben, versuchen Sie, diese auf einem anderen System zu reproduzieren, um die genaue Fehlerursache näher zu lokalisieren.