Esecuzione del server PostgreSQL su Void Linux. Dopo linstallazione ha eseguito initdb
come utente del sistema operativo “postgres”:
[user@host]$ sudo -u postgres -i $ initdb -D "/var/lib/postgresql/data"
Output ricevuto:
creazione directory / var / lib / postgresql / data … ok creazione di sottodirectory … ok selezione di max_connections predefinite … 100 selezione di default shared_buffers … 128MB selezione di dynamic shared implementazione della memoria … posix creazione dei file di configurazione … ok esecuzione dello script di bootstrap … ok esecuzione dellinizializzazione post-bootstrap … locale: impossibile impostare LC_MESSAGES alla localizzazione predefinita: nessun file o directory di questo tipo ok sincronizzazione dei dati su disco … ok
ATTENZIONE: abilitare lautenticazione “trust” per le connessioni locali Puoi cambiarlo modificando pg_hba.conf o usando lopzione -A, o –auth-local e –auth-host, la prossima volta esegui initdb.
Operazione riuscita. Ora puoi avviare il server del database utilizzando: pg_ctl -D / var / lib / postgresql / data -l logfile start
Ho quindi proceduto alla creazione del servizio, concesso la proprietà a “postgres” e avviato:
[user@host]$ ln -s /etc/sv/postgresql /var/service [user@host]$ sudo chown postgres: /var/service/postgresql [user@host]$ sudo sv start postgresql [user@host]$ ls -l /var/service/postgresql lrwxrwxrwx 1 postgres postgres 18 nov 2 17:05 /var/service/postgresql -> /etc/sv/postgresql
In esecuzione:
[user@host]$ sudo -u postgres psql ...
mi darà il seguente errore:
psql: FATAL: role "postgres" does not exist
Ho “provato a concedere la proprietà di /etc/sv/postgresql
a “postgres”, ma senza fortuna.
Queste erano le mie fonti:
https://wiki.voidlinux.eu/PostgreSQL
Errore PostgreSQL: irreversibile: il ruolo “nome utente” non esiste
Non so cosa fare dopo.
EDIT: inciampato su psql: FATAL: il ruolo “postgres” no esistono . Impossibile eseguire psql -l
perché ottengo lo stesso errore, indipendentemente dallutente che eseguo psql
come.
Commenti
Risposta
Non una risposta completa, ma considera il manuale su initdb
qui :
-U
username
--username=
username
Seleziona il nome utente del superutente del database. Il valore predefinito è il nome dellutente effettivo che esegue
initdb
. Non è davvero importante quale sia il nome del superutente, ma si potrebbe scegliere di mantenere il nome abituale postgres, anche se il nome dellutente del sistema operativo è diverso.
Significato …
-
Quando si esegue
initdb
come utente del sistema operativopostgres
, anche il ruolo di superutente DB iniziale èpostgres
, in Postgres standard. Ho sentito parlare di sistemi che piegano questa regola … -
Dovresti essere in grado di forzare il nome
postgres
con--username=postgres
per il superutente iniziale, a meno che il tuo pacchetto non abbia seriamente incasinato tutto questo.
Commenti
- Wow , questo mi ha indirizzato nella giusta direzione, daccordo. Sapevo di aver visto quel
-U
flag da qualche parte ed era da qui: stackoverflow.com/questions/50746147/… Potrei aver letto male la risposta di Laurenz ' lì, ma ho eseguitoinitdb -U UTF8 -D /var/lib/postgresql/data
e indovina un po il ruolo di superutente DB iniziale era. Ad ogni modo, ho finito per mandare in crash il mio intero sistema a causa dellesaurimento. Una giornata abbastanza produttiva. Grazie per la tua dedizione Erwin, il tuo aiuto è molto apprezzato. - @Jakov:
-U UTF8
. Ahia. Doveva essere-E UTF8
presumo? Ci scusiamo per la tua giornata persa a causa di una subdola lettera criptata. Poi di nuovo: se tu avessi mostrato il tuo vero comando nella domanda per cominciare, avremmo potuto risparmiare metà della tua giornata …
role "postgres" does not exist
: non esiste un ruolo del database denominato " postgres ". È lunica installazione di Postgres sulla stessa macchina? (Quindi sei sicuro di connetterti allistanza giusta?) In tal caso, la domanda è: quale ruolo del database è impostato dalla tua installazione. Non ' so abbastanza Void Linux o il gestore di pacchetti XPBS per aggiungere altro. Potrebbe essere più adatto per superuser.SE o unix.SE.initdb
, quindi connettiti con lutente del sistema operativo con lo stesso nome per ottenere laccesso da " trust " metodo di autenticazione. Ovviamente non " postgres " (che sarebbe il corretto valore predefinito).session_replication_role = 'origin'
. Non molto utile, credo.:%s/XPBS/XBPS/g