PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Periksa apakah Postgresql mendengarkan

Saya pikir Anda perlu mendefinisikan apa yang ingin Anda capai dengan lebih baik. Apakah Anda hanya ingin tahu jika sesuatu mendengarkan pada titik tertentu? Jika PostgreSQL mendengarkan pada port tertentu? Jika PostgreSQL berjalan dan benar-benar menerima koneksi? Jika Anda dapat terhubung ke PostgreSQL, autentikasi berhasil dan buat kueri?

Salah satu opsi adalah memanggil psql untuk menghubungkannya dan memeriksa kode hasil. Jangan mencoba mengurai teks keluaran, karena teks tersebut dapat diterjemahkan ke dalam bahasa yang berbeda.

Lebih baik, gunakan pustaka klien untuk bahasa pilihan Anda - psycopg2 untuk Python, PgJDBC untuk Java, permata Pg untuk Ruby, DBD::Pg untuk Perl, nPgSQL untuk C#, dll. Ini adalah pendekatan yang saya sarankan. SQLSTATE atau detail pengecualian dari kesalahan koneksi apa pun akan memberi tahu Anda lebih banyak tentang mengapa koneksi gagal - Anda akan dapat membedakan antara server yang tidak mendengarkan, kegagalan otentikasi, dll dengan cara ini. Misalnya, dengan Python:

import psycopg2
try:
    conn = psycopg2.connect("host=localhost dbname=postgres")
    conn.close()
except psycopg2.OperationalError as ex:
    print("Connection failed: {0}".format(ex))

Ada detail pengecualian di ex.pgcode (SQLSTATE ) untuk memberi tahu Anda lebih banyak tentang kesalahan yang dihasilkan di sisi server, seperti kegagalan autentikasi; itu akan kosong untuk kesalahan sisi klien.

Jika Anda hanya ingin melihat apakah sesuatu mendengarkan pada port IP dan TCP tertentu, Anda dapat menggunakan netcat (*nix saja), atau skrip sederhana dalam bahasa pilihan Anda yang membuat soket dan melakukan koneksi() lalu menutup soket jika mendapat respons yang berhasil. Misalnya script Python sepele berikut ini:

import socket                                                                                                                                                              
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    s.connect(('localhost',5432))
    s.close()
except socket.error as ex:
    print("Connection failed with errno {0}: {1}".format(ex.errno, ex.strerror))            

Pendekatan yang sama berlaku dalam bahasa pemrograman apa pun, hanya detail pustaka soket dan penanganan kesalahan yang bervariasi.

Untuk beberapa tujuan juga berguna untuk menggunakan netstat alat untuk secara pasif mendaftar proses mana yang mendengarkan di soket jaringan mana. netstat . bawaan pada Windows cukup mati otak sehingga Anda harus melakukan lebih banyak penguraian output daripada dengan netstat untuk platform lain, tetapi tetap berfungsi. Kehadiran soket di netstat tidak berarti menghubungkannya akan berhasil; jika proses gagal dalam beberapa cara yang membuatnya rusak tetapi masih berjalan (terjebak dalam infinite loop, diblokir oleh debugger, SIGSTOP ed, dll) maka itu tidak akan menanggapi upaya koneksi yang sebenarnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menerapkan hubungan banyak ke banyak di PostgreSQL?

  2. Heroku dan Rails:Kesalahan Pemuatan Permata dengan Postgres, namun Ditentukan dalam GEMFILE

  3. UUID yang valid bukan UUID yang valid

  4. Kutipan dolar tanpa henti

  5. 'otentikasi kata sandi gagal untuk postgres pengguna'