confusione della porta postgresql 5433 o 5432?


128

Ho installato Postgresql su OSX. Quando eseguo psql, ottengo

$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5433"?

Tuttavia, da / etc / services

postgresql      5432/udp    # PostgreSQL Database
postgresql      5432/tcp    # PostgreSQL Database
#                          Tom Lane <tgl@sss.pgh.pa.us>
pyrrho          5433/tcp    # Pyrrho DBMS
pyrrho          5433/udp    # Pyrrho DBMS

5433 è occupato da pyrrho, 5432 è assegnato a pag. Posso connettermi con

psql -p 5432

ma perché psql pensa che sia 5433 e come faccio a fare in modo che psql appaia nel posto giusto per impostazione predefinita?


5
Verifica se la variabile di ambiente PGPORTè definita: postgresql.org/docs/current/static/libpq-envars.html
a_horse_with_no_name

Risposte:


187

/etc/servicesè solo consultivo, è un elenco di porte ben note. Ciò non significa che qualcosa sia effettivamente in esecuzione su quella porta o che il servizio denominato verrà eseguito su quella porta.

Nel caso di PostgreSQL è tipico usare la porta 5432 se è disponibile. In caso contrario, la maggior parte degli installatori sceglierà la prossima porta libera, di solito 5433.

Puoi vedere cosa è effettivamente in esecuzione utilizzando lo netstatstrumento (disponibile su OS X, Windows e Linux, con la sintassi della riga di comando che varia tra i tre).

Ciò è ulteriormente complicato sui sistemi Mac OS X dall'orribile pasticcio di diversi pacchetti PostgreSQL: l'antica versione di PostgreSQL di Apple integrata nel sistema operativo, Postgres.app, Homebrew, Macports, il programma di installazione EnterpriseDB, ecc. Ecc.

Ciò che finisce è che l'utente installa Pg e avvia un server da un pacchetto, ma utilizza il client psqle libpqda un pacchetto diverso. In genere ciò si verifica quando eseguono Postgres.app o homebrew Pg e si connettono con psqlquello fornito con il sistema operativo. A volte non solo queste hanno porte predefinite diverse, ma il Pg fornito con Mac OS X ha un percorso socket unix predefinito diverso , quindi anche se il server è in esecuzione sulla stessa porta non ascolterà lo stesso socket unix.

La maggior parte degli utenti Mac aggira questo problema semplicemente usando tcp / ip con psql -h localhost. È inoltre possibile specificare una porta, se necessario, ad es psql -h localhost -p 5433. Potresti avere più istanze PostgreSQL in esecuzione, quindi assicurati di connetterti a quello giusto usando select version()e SHOW data_directory;.

È inoltre possibile specificare una directory socket unix; controllare l' unix_socket_directoriesimpostazione dell'istanza PostgreSQL alla quale si desidera connettersi e specificarla con psql -h, ad es psql -h /tmp.

Una soluzione più pulita è quella di correggere il tuo sistema in PATHmodo che quello psqle libpqassociato a PostgreSQL che stai effettivamente eseguendo sia quello che si trova per primo sul PATH. I dettagli dipendono dalla versione di Mac OS X e dai pacchetti Pg installati. Non uso il Mac e non posso offrire molti più dettagli da quel lato senza spendere più tempo di quanto sia attualmente disponibile.


24

Risposta rapida su OSX, imposta le variabili di ambiente.

>export PGHOST=localhost

>export PGPORT=5432

O di qualunque cosa tu abbia bisogno.


16

La porta predefinita di Postgres è comunemente configurata in:

sudo vi /<path to your installation>/data/postgresql.conf

Su Ubuntu potrebbe essere:

sudo vi /<path to your installation>/main/postgresql.conf

Cerca portin questo file.


Su Mac OSX con la distribuzione BigSQL è qui:~/PostgreSQL/data/pg96
Shane


7

Sembra che uno dei motivi più comuni che ciò avvenga sia se si installa una nuova versione di PostgreSQL senza interrompere il servizio di un'installazione esistente. Anche questo era un mio mal di testa particolare. Prima di procedere all'installazione o all'aggiornamento, in particolare su OS X e utilizzando il programma di installazione con un clic da Enterprise DB, assicurati di controllare lo stato della vecchia installazione prima di procedere.


Sì, abbiamo installato postgresql-9.5 quando 9.4 era già installato, quindi 9.5 ha scelto 5433 come porta predefinita
vikingsteve

Ho usato 5432 e 5433 per molto tempo, ho visto 5436, ma non ho idea se solo la creatività di qualcuno o un po 'di default su diversi sistemi operativi.
Deil

3

Ho riscontrato anche questo problema, alla fine ho avuto due server Postgres in esecuzione contemporaneamente. Ne ho disinstallato uno e ho ripristinato la porta su 5432 e ora funziona perfettamente.


2

Per me in PgAdmin 4 su Mac OS High Sierra , facendo clic sul database PostrgreSQL10 in Server nella colonna di sinistra, quindi nella scheda Proprietà , ho mostrato 5433 come porta in Connessione . (Non so perché, perché ho scelto 5432 durante l'installazione). Ad ogni modo, ho fatto clic sull'icona Modifica nella scheda Proprietà , l'ho cambiata in 5432 , salvata e risolto il problema. Vai a capire.


Tutto ciò che fa è consentirti di connetterti al server già in esecuzione su 5432, motivo per cui potresti collegarti dopo averlo fatto. Il server era in esecuzione su 5432 per l'installazione, come indicato correttamente.
Shane,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.