kebingungan port postgresql 5433 atau 5432?

128

Saya telah menginstal postgresql di OSX. Ketika saya menjalankan psql, saya mengerti

$ 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"?

Namun, dari / 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 ditempati oleh pyrrho, 5432 ditugaskan untuk hal. Saya dapat terhubung dengan

psql -p 5432

tetapi mengapa psql berpikir itu 5433 dan bagaimana cara membuat psql terlihat di tempat yang tepat secara default?

highBandWidth
sumber
5
Periksa apakah variabel lingkungan PGPORTdidefinisikan: postgresql.org/docs/current/static/libpq-envars.html
a_horse_with_no_name

Jawaban:

187

/etc/serviceshanya saran, ini adalah daftar port yang terkenal. Itu tidak berarti bahwa apa pun benar-benar berjalan pada port itu atau bahwa layanan yang disebutkan akan berjalan pada port itu.

Dalam kasus PostgreSQL biasanya menggunakan port 5432 jika tersedia. Jika tidak, sebagian besar penginstal akan memilih port gratis berikutnya, biasanya 5433.

Anda dapat melihat apa yang sebenarnya berjalan menggunakan netstatalat (tersedia di OS X, Windows, dan Linux, dengan sintaks baris perintah bervariasi di ketiga).

Ini lebih rumit pada sistem Mac OS X oleh kekacauan mengerikan dari paket PostgreSQL yang berbeda - versi kuno PostgreSQL Apple yang terintegrasi dengan OS, Postgres.app, Homebrew, Macports, pemasang EnterpriseDB, dll.

Apa yang akhirnya terjadi adalah bahwa pengguna menginstal Pg dan memulai server dari satu kemasan, tetapi menggunakan psqldan libpqklien dari kemasan yang berbeda. Biasanya ini terjadi ketika mereka menjalankan Postgres.app atau Pg homebrew dan menghubungkan dengan psqlyang dikirimkan dengan OS. Tidak hanya ini kadang-kadang memiliki port default yang berbeda, tetapi Pg yang dikirimkan dengan Mac OS X memiliki jalur soket unix default yang berbeda , sehingga bahkan jika server berjalan pada port yang sama, itu tidak akan mendengarkan soket unix yang sama.

Sebagian besar pengguna Mac mengatasi ini dengan hanya menggunakan tcp / ip with psql -h localhost. Anda juga dapat menentukan porta jika diperlukan, mis psql -h localhost -p 5433. Anda mungkin memiliki beberapa instance PostgreSQL berjalan jadi pastikan Anda terhubung ke yang benar dengan menggunakan select version()dan SHOW data_directory;.

Anda juga dapat menentukan direktori soket unix; periksa unix_socket_directoriespengaturan instance PostgreSQL yang ingin Anda sambungkan dan tentukan dengan psql -h, misalnya psql -h /tmp.

Solusi yang lebih bersih adalah memperbaiki sistem Anda PATHsehingga psqldan libpqterkait dengan PostgreSQL yang Anda jalankan sebenarnya adalah yang pertama ditemukan di Internet PATH. Rinciannya tergantung pada versi Mac OS X Anda dan paket Pg mana yang telah Anda instal. Saya tidak menggunakan Mac dan tidak bisa menawarkan lebih banyak detail di sisi itu tanpa menghabiskan lebih banyak waktu daripada yang tersedia saat ini.

Craig Ringer
sumber
24

Jawaban cepat di OSX, atur variabel lingkungan Anda.

>export PGHOST=localhost

>export PGPORT=5432

Atau apa pun yang Anda butuhkan.

DavidLStacy
sumber
16

Port default Postgres biasanya dikonfigurasi di:

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

Di Ubuntu ini mungkin:

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

Cari portdi file ini.

Risadinha
sumber
Pada Mac OSX dengan distro BigSQL di sini:~/PostgreSQL/data/pg96
Shane
7

Berkat @a_horse_with_no_name 's komentar , saya mengubah definisi PGPORT saya untuk 5432 di pg_env.sh. Itu memperbaiki masalah bagi saya. Saya tidak tahu mengapa postgres menetapkannya sebagai 5433 pada awalnya ketika hosting layanan di 5432.

highBandWidth
sumber
7

Tampaknya salah satu alasan paling umum hal ini terjadi adalah jika Anda menginstal versi baru PostgreSQL tanpa menghentikan layanan instalasi yang ada. Ini juga sakit kepala saya. Sebelum menginstal atau memutakhirkan, khususnya pada OS X dan menggunakan installer satu klik dari Enterprise DB, pastikan Anda memeriksa status instalasi lama sebelum melanjutkan.

Eron Lloyd
sumber
Ya, kami menginstal postgresql-9.5 ketika 9.4 sudah diinstal, jadi 9.5 memilih 5433 sebagai port default
vikingsteve
Saya telah menggunakan 5432 & 5433 untuk waktu yang lama, saya telah melihat 5436 tetapi tidak tahu apakah itu hanya kreativitas seseorang atau default pada beberapa os-es.
Deil
3

Saya mengalami masalah ini juga, ternyata saya memiliki dua server postgres yang berjalan pada saat yang sama. Saya menghapus salah satu dari mereka dan mengubah port kembali ke 5432 dan berfungsi dengan baik sekarang.

Krazzzeee
sumber
2

Bagi saya di PgAdmin 4 di Mac OS High Sierra , Mengklik database PostrgreSQL10 di bawah Server di kolom kiri, lalu tab Properties , menunjukkan 5433 sebagai port di bawah Connection . (Saya tidak tahu mengapa, karena saya memilih 5432 saat menginstal). Bagaimanapun, saya mengklik ikon Edit di bawah tab Properties , ubah ke 5432 , disimpan, dan itu menyelesaikan masalah. Sosok pergi.

Alan Simpson
sumber
Semua yang dilakukan adalah memungkinkan Anda untuk terhubung ke server yang sudah berjalan pada 5432, itulah sebabnya Anda dapat terhubung setelah melakukan itu. Server berjalan pada 5432 per instalasi Anda seperti yang Anda sebutkan dengan benar.
Shane