Newsgroup: it.comp.os.linux.development
Titolo: Postgres: non riesco ad avviare psql

Ciao a tutti,
oggi ho provato ad installare postgresql 8.2 sulla mia macchina. Mi
serve solo per un esame all'uni, quindi lo userò soltanto in locale.
Prima ho installato coi repo, poi ho trovato una guida in rete che
consigliava di compilarsi il sorgente e ho provato anche così. Dato
che però avevo dei problemi (era come se Ubuntu trovasse due versioni
di postgresql, benché in quel momento ne avessi installata solo una)
ho fatto (da root) "make uninstall" (giusto, vero?) e quindi ho
rimosso la cartella.
Fatto ciò ho re-installato postgresql coi repo, ma ora quando provo ad
avviare psql mi da questo messaggio d'errore:
psql: could not connect to server: Nessun file o directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/
postgresql/.s.PGSQL.5432"?
Cosa significa?

 postgresql/.s.PGSQL.5432"?
controlla che in postgresql.conf ci siano le righe:
listen_addresses = '*'
port = 5432
e riavvia ...
-- 
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0};printf("%s",c);return 0;}

 e riavvia ...
Grazie mille, ora provo :-)
comunque nel mio file postgresql.conf ho le righe
   listen_addresses = 'localhost'
   port = 5432
per cui non credo cambierà molto...
Che possa influire il fatto che il file "/var/run/postgresql/.s.PGSQL.
5432" NON esiste???
MarKco

 5432" NON esiste???
prova a creare la directory postgresql sotto /var/run e metti come
proprietario 'pgsql', o chiunque sia l'utente sotto cui lo fai girare ..
ciao ..


 ciao ..
La directory esiste già ed è, giustamente, di proprietà dell'utente
postgres... il problema è che è inesorabilmente vuota :-/
MarKco

 postgres... il problema è che è inesorabilmente vuota :-/
prova a lanciare
# postgres -d 5 -r /var/log/pgsql.log -D </directory/dei/database>
e vedi che ti dice ... e guarda anche nel logfile ...
ciao ...


 e vedi che ti dice ... e guarda anche nel logfile ...
Ottima idea!
In effetti dice qualcosa che non mi aspettavo...
FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 19186) running in data directory "/
var/lib/postgresql/pgData"?
(ho cercato con ps -aux, ma non c'è nessun processo con PID 19186. Ho
anche cercato il fantomatico postmaster.pid, ma... non c'è!!! Forse la
entry nel log è vecchia, in effetti non ha una data...)
Che casino...
MarKco

 var/lib/postgresql/pgData"?
c'e' qualcosa in questa directory 'pgData' ? se e' cosi', prova a passare
questa dir con l'opzione -D a pg_ctl start ...


 allora:
Nono so perché non abbia pubblicato il mio primo messaggio di
risposta... mah.
Ne approfitterò per riscriverlo in modo pià chiaro :-P
Ho trovato pg_ctl e initdb in /usr/lib/postgresql/8.2/bin/ e ho
avviato
/usr/lib/postgresql/8.2/bin/initdb -D /var/lib/postgresql/pgData
(fra l'altro la cartella è tutto fuorché vuota, contiene questo
base    pg_clog      pg_ident.conf  pg_subtrans  pg_twophase
pg_xlog          postmaster.opts
global  pg_hba.conf  pg_multixact   pg_tblspc    PG_VERSION
postgresql.conf)
Il risultato è stato
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 initialised with locale it_IT.UTF-8.
La codifica stantard del database è stata di conseguenza impostata su
UTF8.
initdb: la cartella "/var/lib/postgresql/pgData" esiste ma non è
vuota
Se vuoi creare un nuovo database di sistema, rimuovete o svuotate
la cartella "/var/lib/postgresql/pgData" oppure eseguite initdb
con un argomento diverso da "/var/lib/postgresql/pgData".
e quando poi ho avviato /usr/lib/postgresql/8.2/bin/pg_ctl start -D /
var/lib/postgresql/pgData/ -l /var/log/postgresql/postgresql-8.2-
main.log
mi ha restituito un tranquillo "server starting".
Il problema però non è risolto. Che debba davvero passargli un'altra
directory al posto di /var/lib/postgresql/pgData?
Mi dispiace non dare suggerimenti geniali, ma... non sto capendo
granché di quello che sto facendo :-/
MarKco

 granché di quello che sto facendo :-/
non e' difficile ... con 'initdb' inizializzi la directory dove vuoi siano
creati i files e le directory dei database ... con initdb stabilisci
la codifica di default del database 'template1', che diventa il punto di
partenza di ogni db creato successivamente ...
poi con pg_ctl fai partire il server, specificando come directory di
configurazione e di immagazzinamento dati la stessa directory che hai
creato prima ...
l'unica cosa, devi fare TUTTE queste operazioni come utente del db 
(postgres o pgsql che sia) e non come root ...


 (postgres o pgsql che sia) e non come root ...
Purtroppo, come ho detto sopra, non sembra avere alcun effetto :-/
MarKco

 contenuti in questa cartella in base ai permessi che avrà...
giusto ...
fammi sapere ...


 ma psql come lo avvii ?
prima faccio su - postgres
quindi avvio "psql"... tutto qui. Non è il metodo giusto?
Comunque grazie davvero per come mi stai "seguendo" nella mia
ignoranza... se un giorno dovessimo trovarci ti offrirò una birra! ;-)
MarKco

 
-- 
Roberto Tagliaferri-Linux user #30785 <-> r.tagliaferri@(forse)
tosnet.it
Captain Penny's Law:
	You can fool all of the people some of the time, and some of
the people all of the time, but you Can't Fool Mom.

 Oddio.. io una baladin la accetto volentieri :D
Ehm... e se ti offrissi una Nastro Azzurro? :-)
MarKco

MarKco ha scritto:

Allora...
touch /var/log/pglog
chown postgres /var/log/pglog
poi fai partire postgres con pg_ctl -l /var/log/pglog -D /directory_del_db start
Infine posti un bel catendpeist di pglog
-- 
Roberto Tagliaferri-Linux user #30785 <-> r.tagliaferri@(forse)
tosnet.it
For every credibility gap, there is a gullibility fill.
		-- R. Clopton

 Infine posti un bel catendpeist di pglog
Eccolo qua:
FATAL:  i file del database sono incompatibili col server
DETAIL:  Il cluster database è stato inizializzato senza
HAVE_INT64_TIMESTAMP ma il server è stato compilato con
HAVE_INT64_TIMESTAMP.
HINT:  Sembra che tu abbia bisogno di ricompilare o di initdb
Buffo, vero?
Io avevo lanciato pg_ctl usando come cartella del database quella /var/
lib/postgresql/pgData che conteneva già dei files.
Ora provo a lanciare initdb e poi pg_ctl nella cartella /database
vuota... vediamo cosa succede...
MarKco

 vuota... vediamo cosa succede...
D'oh!
Ho lanciato "initdb -D /database" e ecco l'output
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 initialised with locale it_IT.UTF-8.
La codifica stantard del database è stata di conseguenza impostata su
UTF8.
modifica dei permessi sulla directory esistente /database ... ok
creating subdirectories ... ok
selecting default max_connections... 100
selecting default shared_buffers/max_fsm_pages ... 24MB/153600
creazione dei file di configurazione ... ok
creating template1 database in /database/base/1... ok
inizializzazione pg_authid ... ok
initialising dependencies... ok
creazione delle viste di sistema ... ok
loading system objects' descriptions ... ok
creazione delle conversioni ... FATAL:  could not access file "$libdir/
ascii_and_mic": Nessun file o directory
STATEMENT:  CREATE OR REPLACE FUNCTION ascii_to_mic (INTEGER, INTEGER,
CSTRING, INTERNAL, INTEGER) RETURNS VOID AS '$libdir/ascii_and_mic',
'ascii_to_mic' LANGUAGE C STRICT;
il processo figlio è uscito con codice di uscita 1
initdb: rimozione dei contenuti della data directory "/database"
Cosa significa tutto ciò?
MarKco