Ich fasse mich kurz: Nachdem ich PostgreSQL einmal installiert, testweise betrieben danach aber wieder deinstalliert hatte, habe ich es kürzlich neu installiert (apt-get). Nun läuft das Ding, doch ich habe keine "template0" Datenbank. Bevor ich eigene DBs anzulegen beginne, möchte ich dies jetzt richtig stellen.
Frage: Wie kann ich mir "template0" (und "template1") wieder erstellen lassen?
Das Verzeichnis dafür existiert bereits (/usr/local/pgsql/data...), doch ich habe darin noch nichts Eigenes erstellt. Ich könnte also problemlos riskieren, dieses zu löschen und vollständig neu erstellen zu lassen.
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ich meinte eigentlich: ja - woher sonst sollte das Verzeichnis (und dessen Inhalt) stammen?
Trotzdem habe ich das jetzt nochmal versucht (erst su postgres, dann):Der liefert mir jetzt aber:Code:/usr/lib/postgresql/8.4/bin/initdb -D /usr/local/psql/data
Das Verzeichnis existiert jedoch bereits mit owner "root" und group "postgres". Die darunter liegenden Verzeishnisse /8.4/bin und /8.4/lib ebenfalls.Code:could not change directory to "/root" 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_CH.UTF-8. The default database encoding has accordingly been set to UTF8. The default text search configuration will be set to "german". creating directory /usr/local/psql/data ... initdb: could not create directory "/usr/local/psql": Keine Berechtigung
Soll ich dieses ganze Verzeichnis erst löschen?
Übrigens: Die ERSTE Meldung (could not change directory to "/root") kommt mir auch spanisch vor. Woher kommt diese denn? Etwas falsch mit "passwd"? Das sieht bei mir so aus:Nachtrag: Ich habe das Verzeichnis jetzt gelöscht und (natürlich via user postgres) mittels INITDB neu anlegen lassen. So sieht das aus:Code:postgres:x:108:113:PostgreSQL administrator,,,:/usr/lib/postgresql/8.4/bin:/bin/bash
Trotzdem: Logge ich mich mit phpgAdmin dort ein (nach einem Server-Restart, sicherheitshalber) sehe ich dort nur ein Schema "public" OHNE Tabellen, Sichten, Sequenzen, Funktionen und Domänen. Da sind keine "templates"...Code:could not change directory to "/root" 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_CH.UTF-8. The default database encoding has accordingly been set to UTF8. The default text search configuration will be set to "german". creating directory /usr/local/psql/data ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 24MB creating configuration files ... ok creating template1 database in /usr/local/psql/data/base/1 ... ok initializing pg_authid ... ok initializing dependencies ... ok creating system views ... ok loading system objects' descriptions ... ok creating conversions ... ok creating dictionaries ... ok setting privileges on built-in objects ... ok creating information schema ... ok vacuuming database template1 ... ok copying template1 to template0 ... ok copying template1 to postgres ... ok WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the -A option the next time you run initdb. Success. You can now start the database server using: /usr/lib/postgresql/8.4/bin/postgres -D /usr/local/psql/data or /usr/lib/postgresql/8.4/bin/pg_ctl -D /usr/local/psql/data -l logfile start
Geändert von Rolf Tschan (03.10.2011 um 10:41 Uhr)
Noch ein Nachtrag. Was oben (Meldungen von INITDB) ersichtlich ist, sehe ich auch hier:
1. Mich irritiert noch immer die erste Fehlermeldung bzgl. "root". Was soll das?Code:postgres@nas:/root$ psql -l could not change directory to "/root" List of databases Name | Owner | Encoding | Collation | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | de_CH.UTF-8 | de_CH.UTF-8 | template0 | postgres | UTF8 | de_CH.UTF-8 | de_CH.UTF-8 | =c/postgres : postgres=CTc/postgres template1 | postgres | UTF8 | de_CH.UTF-8 | de_CH.UTF-8 | =c/postgres : postgres=CTc/postgres (3 rows)
2. WO LIEGT diese Datenbank und wo sind diese (frisch angelegten) Templates?
1. kann ich Dir nicht sagen.
2.
der physische Speicherort kann eigentlich egal sein. Die Datenbanken (templateX sind Datenbanken) liegen unterhalb von $data_directory/base in ordnern, die mit Zahlen benannt sind. Was wo liegt, bekommst Du aus der Tabelle pg_database raus:
Die Spalte "oid" ist dabei der Name des Ordners.Code:test=*# select oid, datname from pg_database ; oid | datname -------+----------- 1 | template1 12690 | template0 12698 | postgres 16385 | test (4 rows)
Aber, wie gesagt, der physische Speicherort kann Dir eigentlich egal sein...
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hmmm... Also die Templates existieren. INITDB hat sie "nachweislich" erstellt und ich sehe sie auch in /usr/local/psql/data/base/...(nummern). Soweit sieht das IMO ok aus.
Jetzt aber wird's komisch:
Die Clusters sind doch nicht DORT, sondern - siehe oben: in /usr/local/...Code:postgresql status --liefert--> Running clusters: 8.4/main ...
Mir scheint, dass da irgendeine Config schief ist. Doch WELCHE Config? Die von postgresql oder die vom Admin?
Ich würde jetzt gerne erst mal die von postgresql verifizieren:
a) Weshalb zeigt mit Status diesen (IMO falschen) Cluster an?
b) Kann ich einen geeigneten SQL-Befehl absetzen, der mir mit Sicherheit anzeigt, ob PG korrekt (mit den neu angelegten templates) funktioniert?
Übrigens: Auch dies wird bei mir korrekt angezeigt:
Code:postgres=# select oid, datname from pg_database ; oid | datname -------+----------- 1 | template1 11563 | template0 11564 | postgres (3 rows)
Geändert von Rolf Tschan (04.10.2011 um 13:07 Uhr)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ja, der zeigt mir genau das an, was eben gerade nicht stimmt:
Dort liegen schon auch Datenbanken; doch ich habe keine Ahnung WESHALB. Jedenfalls: Dort WILL ICH SIE NICHT :-)Code:postgres@nas:/root$ psql -c "show data_directory" template1 could not change directory to "/root" data_directory ------------------------------ /var/lib/postgresql/8.4/main (1 row)
Wie kommt der auf diese Idee? Welche Config nimmt der denn, wenn er "auto-gestartet" wird? Wie kann ich das verifizieren? (jene im data-Verzeichnis kann er ja erst dann berücksichtigen, wenn er weiss, welches das data-Verzeichnis ist)
Ausserdem: Ich habe PG eben gestoppt und manuell mit "-D /usr/local/psql/data" neu gestartet. Doch in PhpPgAdmin hat sich dadurch gar nichts geändert.
Übrigens: Kann mir jemand die Zeile für "postgres" aus "password" zeigen? Meine sieht so aus - ist das korrekt (und sinnvoll)?
Code:postgres:x:108:113:PostgreSQL administrator,,,:/usr/lib/postgresql/8.4/bin:/bin/bash
Geändert von Rolf Tschan (04.10.2011 um 14:03 Uhr)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen