Wo sind die Templates?

Das Thema ist nicht neu; ich habe es bereits früher einmal gepostet, doch ich erhalte dort keine Hilfe (mehr).

Nach einer vollständigen Deinstallation (apt-get purge); nach Löschen alter Datenbanken (früher fehlerhaft installierte Cluster-Verzeichnisse); nach Löschen von .profile für “postgres”; bei einem meines Erachtens also völlig jungfäulichen Debian System, installiert mir apt-get postgresql keine Templates.

Nach dem “apt-get install” wechsle ich zu “su - postgres” und versuche, die Clusters zu erzeugen: INITDB. Dies wird reklamiert, obwohl ich nach dem (vermeintlich erfolgreichen) install PGDATA gesetzt habe (echo $PGDATA zeigt mir “/usr/local/psql/data”). Also, zweiter Versuch: INITDB -D /usr/local/psql/data". Diesmal sieht wieder alles ok aus; keine Fehlermeldungen.

Und nun? Der Server läuft zwar, sieht eigentlich alles i.O. aus, doch PhpPgAdmin zeigt mir ausschliesslich ein LEERES Schema “public” (im tablespace “pg_default”).

“Volltextsuche” ist da, ansonsten aber nichts.

Wohin sind die Templates “verschwunden”? Was läuft hier schief? Was mache ich falsch?

Kann mir wirklich niemand dabei weiterhelfen? :frowning:

So sieht übrigens mein .profile für postgres aus. Ich habe es direkt nach “apt-get install” aktiviert:

# /home/postgres/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# rts 2011-10-11 >
PGDATA="/usr/local/psql/data"

PATH="$PATH:/usr/lib/postgresql/8.4/bin"

function mypath(){
    old=$IFS
    IFS=:
    printf "%s\n" $PATH
    IFS=$old
}
# rts 2011-10-11 <

Kann es sein, daß hier ein Irrtum Deinerseits vorliegt?

Templates sind Datenbanken, aus denen andere Datenbanken generiert werden. Ich kenne PGAdmin nicht, aber versuche mal, als User postgres, ein “psql -l” auszuführen. Vermutlich siehst Du dort template0 und template1, außerdem eine postgres.


Andreas

Was phpPGAdmin macht weiß ich nicht, aber PGAdmin blendet die in der Oberfläche aus und bietet sie nur beim Erstellen einer neuen DB an. Unter psl -l sollten sie aber erscheinen.

Gruß Uwe

Danke Euch beiden!

Es sieht tatsächlich so aus, als hätte ich ein Phanton gejagt: “psql -l” zeigt mir die Templates an, es ist bloss PhpPgAdmin, der das nicht tut.

Was mich noch immer etwas verwirrt, ist folgendes:

  1. Die Installation (apt-get) startet automatisch den DB-Server “main”.
  2. Danach habe ich ja INITDB gemacht. Dieses sagt mir zum Schluss, ich könne den Server jetzt (zB mit pg-ctl) starten; müsse dabei aber (mit -D) das Verzeichnis angeben.

Meine Fragen dazu sind:
a) Was ist das: ZWEI DB-Servers starten?
b) Mit welchem Verzeichnis läuft denn der erste (der automatisch durch apt-get gestartet worden ist)?
c) Im .profile von postgres habe ich PGDATA gesetzt. echo bestätigt mir das auch. Trotzdem sagt mir pg-ctl, ich müsse das Verzeichnis angeben (oder PGDATA setzen).
d) Wenn ich meine Kiste (Debian) neu starte: Wo ist festgelegt, welcher DB-Server mit welchem Verzeichnis gestartet werden soll?

Ich weiss, dass das “dumme Fragen” sind. Aber ich verspreche: Wenn ich das mal begriffen habe (bin Linux-Neuling), werde ich dasselbe nicht nochmal fragen :slight_smile:

a) Naja, dann laufen da halt zwei Serverprozesse, dazu müssen sie unterschiedliche Ports und Datenverzeichnisse benutzen.
b) Kenn mich in debian nicht aus, aber vermutlich sollte er das Verzeichnis benutzen, das irgendwo in der Konfiguration oder bei der Installation per default festgelegt wurde. Könnte auch in /var/ irgendwo sein.
c) was sagt denn echo $PGDATA als user postgres ausgeführt? Aber du würdest ein Problem mit dem 2. Server bekommen wenn er das Verzeichnis vom ersten benutzen soll.
d) Du wirst in /etc/init.d ein Startskript postgresql finden. Dort werden die Umgebungsvariablen gelesen und die Dienste gestartet. Wenn du einen 2. Server starten möchtest, kannst du das kopieren und dort z.B. auf eine andere Variable für das Verzeichnis angeben, z.B. $PGDATA2. Diese kannst du analog zur ersten in .profile anlegen. Der Rest der Konfiguration findet in der Datei postgresql.conf im Datenverzeichnis statt.

Soweit erstmal.

Gruß Uwe

a) Aha. Na gut: Zwei Serverprozesse will ich nicht. Wozu auch?

b) Wenn ich wüsste, wie sich das herausfinden (verifizieren) lässt, dann wüsste ich auch, welche “postgresql.conf” zum Tragen kommt.
In /var/lib/postgresql/8.4/main/… ist durch “apt-get install” eine DB erstellt worden; doch ist es DIESES Verzeichnis, mit welchem der erste (von “install” gestartete) Server läuft? Gibt es einen Trick, den Serverprozess zur Laufzeit danach abzufragen?
Und wenn dem so ist: Weshalb muss man nach der Installation mit INITDB eine ZWEITE DB anlegen? Wenn ich keinen 2ten Serverprozess laufen lassen will: Wozu dient dann diese zweite?

c)

root@nas:~# su - postgres
postgres@nas:~$ echo $PGDATA
/usr/local/psql/data

(s. mein .profile für postgres. Im ersten Beitrag kopiert)

d) Das Startskript in init.d verweist auf “/etc/postgresql///environment”. Diese Datei ist jedoch (bis auf ein paar Kommentare) leer:

# environment variables for postmaster process
# This file has the same syntax as postgresql.conf: 
#  VARIABLE = simple_value
#  VARIABLE2 = 'any value!'
# I. e. you need to enclose any value which does not only consist of letters,
# numbers, and '-', '_', '.' in single quotes. Shell commands are not
# evaluated.

psql ist Dein Freund :wink:

test=*# show config_file;
              config_file
---------------------------------------
 /usr/local/pgsql/data/postgresql.conf
(1 row)

test=*# show data_directory;
    data_directory
-----------------------
 /usr/local/pgsql/data
(1 row)

Und mit show all; bekommst richtig viel zu lesen …


Andreas

Das sieht bei mir jetzt so aus:

show config_file;
               config_file
------------------------------------------
 /etc/postgresql/8.4/main/postgresql.conf
(1 Zeile)

postgres=# show data_directory;
        data_directory
------------------------------
 /var/lib/postgresql/8.4/main
(1 Zeile)

Soweit also alles klar. :slight_smile:

Doch: Wozu jetzt die zweite DB anlegen (INITDB), wenn ich nicht zwei Serverprozesse laufen lassen (und dadurch 2 Ports besetzen) will?
Ich habe, ganz offensichtlich, noch nicht ganz alles verstanden… :confused:

Debian erzeugt Dir IMHO alles schon, INITDB ist unnötig.


Andreas

Aha :slight_smile:

Dann ist also die Installationsanleitung (zumindest für Debian-Installationen mittels “apt-get install”) nicht so ganz richtig. Das alles hat mich jetzt ziemlich verwirrt. :rolleyes:

Immerhin: Für den Moment scheint alles klar zu sein. Konsequenterweise habe ich jetzt mein .profile für postgres (setzen von PGDATA) richtig gestellt und kann demnächst mal mit meinen ersten ECHTEN Datenbanken loslassen.

Macht Euch gefasst, Leute: ICH KOMME WIEDER :rolleyes: :rolleyes: :rolleyes:

Das macht mir Angst…


Andreas