Adakah cara untuk menjaga koneksi tetap hidup di pgAdmin tanpa mengaturnya di server?

14

Saya menggunakan postgres.heroku.com untuk meng-host database saya. Ini berarti bahwa saya tidak memiliki cara untuk mengubah pengaturan server. Oleh karena itu, jawaban ini pertanyaan tidak membantu saya. Heroku tidak mau mengubah pengaturan mereka (saya telah menghubungi mereka).

Saya bertanya-tanya apa cara terbaik untuk meretas PgAdmin III agar koneksi tetap hidup. Saya memikirkan hal-hal seperti membuat makro Autohotkey untuk mengotomatiskan tindakan antarmuka pengguna saat PgAdmin di latar belakang, atau mungkin menggunakan beberapa jenis alat jaringan untuk memaksa mengirim pesan jaringan atas nama PgAdmins.

Saya juga mendapat tawaran $ 500 bagi seseorang untuk mengubah kode PgAmin III. Pengembang PgAdmin, tidak akan mengubah kode, hanya karena Heroku.

Apa yang harus saya lakukan? PgAdmin lebih unggul dalam banyak hal, ia hanya memiliki kelemahan ini.

David
sumber
FYI, Heroku bukan satu-satunya dengan masalah ini. Kami mengalami masalah ini pada VM Linux yang di-host di Azure dan saya pikir masalahnya adalah Penyedia Layanan menutup koneksi TCP yang menganggur. Akan sangat baik jika PgAdmin dapat mengekspos opsi
keep live
1
Saya punya masalah dengan pgadmin sejak 2002! Tentunya pgadmin dapat dikodekan untuk menyambung kembali secara otomatis setelah habis daripada membuat Anda menutup aplikasi, membukanya lagi, dan membuka kembali seluruh pohon?
Matthew Lock

Jawaban:

18

libpq, pustaka klien PostgreSQL yang mendasarinya, memiliki keepalivesopsi untuk mengaktifkan TCP keepalives .

Sepertinya PgAdmin-III tidak memungkinkan Anda untuk menentukan parameter koneksi sewenang-wenang secara langsung, tetapi ada solusinya.

Ketika Anda melihat konfigurasi koneksi di PgAdmin-III, Anda akan melihat opsi "service". Ini merujuk ke file layanan koneksi . Untuk menggunakannya, buat ~/.pg_service.confdengan isi seperti:

[myherokudb]
user=myusername
keepalives=1
connect_timeout=20
keepalives_idle=10

dan saat terhubung dari PgAdmin-III masukkan myherokudbdi servicebidang.

Ini akan menyebabkan PgAdmin-III untuk menggunakan parameter koneksi yang ditentukan dalam file layanan, termasuk mengaktifkan keepalives.

(Jika Anda menggunakan Windows, file layanan mungkin berada di lokasi lain; lihat dokumentasinya).

Tidak ada variabel lingkungan libpquntuk mengontrol keepalives, jadi Anda tidak dapat mengaturnya seperti itu, Anda harus menggunakan file layanan.

Menambahkan dukungan untuk parameter koneksi tambahan ke PgAdmin-III, atau kotak centang di opsi koneksi untuk mengontrol parameter keepalives, seharusnya cukup sepele. Saya ingin tahu apakah Dave mengerti apa yang Anda minta untuk tawaran Anda untuk mendanai pekerjaan.


Pembaruan : File layanan melihat ke lokasi yang ditentukan dalam PGSYSCONFDIRvariabel lingkungan. Jika tidak disetel, default ke lokasi spesifik platform, yang sepertinya tidak didokumentasikan dengan baik untuk Windows. Saya akan mengirimkan tambalan dokumentasi. Dokumentasi untuk.pgpass menunjukkan jalannya seolah- %APPDATA%\postgresql\pgpass.confolah, jadi ~/.pg_service.confseharusnya %APPDATA%\postgresql\pg_service.conf... tapi sepertinya tidak.

Sebenarnya, jalur yang benar adalah:

%APPDATA%\postgresql\.pg_service.conf

Begitu:

  • Mulai-> Jalankan
  • `% APPDATA%
  • buat direktori "postgresql" jika tidak ada
  • buat file ".pg_service.conf" sebagai file teks dengan konten yang diberikan di atas (lihat catatan di bawah penamaan file)
  • Di PgAdmin-III, masukkan "localhost" di nama Host, dan nama layanan di bidang layanan.

Saya menguji pada Windows, dan menemukan bahwa Anda tidak dapat meninggalkan hostbidang di PgAdmin-III kosong pada Windows. PgAdmin-III tampaknya menimpa semua host yang ditentukan dalam file layanan dengan apa yang ditentukan dalam dialog koneksi. Jadi Anda tidak harus memasukkan hostkunci dalam file layanan. (Saya akan melaporkan bug).

Jadikan "sembunyikan ekstensi file untuk tipe file yang dikenal" dimatikan di Windows, jadi Anda tidak sengaja menyebutnya .pg_service.conf.txt. Jika Anda tidak yakin apakah namanya benar atau tidak, periksa kolom "Jenis" di Windows Explorer dalam tampilan daftar; ia akan membaca "Dokumen Teks" jika namanya tidak benar .pg_service.conf.txt, dan CONF Filejika namanya benar .pg_service.conf. Jika Anda memiliki masalah mengubah nama itu, matikan "sembunyikan ekstensi file untuk jenis file yang diketahui", atau gunakan editor teks yang masuk akal seperti notepad ++ yang akan memungkinkan Anda membuat file dengan nama yang Anda suka.

Catat periode terkemuka (titik) dalam nama file. Ya, itu berbeda dengan pgpass.conf, dan ya, itu menjengkelkan, berbatasan dengan bug.

Craig Ringer
sumber
Terima kasih banyak untuk ini! Saya sekarang menghabiskan 45 menit mencoba ini di komputer Windows 7 saya. Hal pertama adalah bahwa saya tidak dapat membiarkan bidang "host" kosong. Ini akan menonaktifkan tombol "OK" dalam dialog itu. Saya mencoba memanfaatkan "-" sebagai tuan rumah, yang membuat saya ke masalah kedua. Saya tidak tahu di mana harus meletakkan file pg_service.conf. Saya mencoba melakukan percobaan dan kesalahan dan meletakkannya di semua sub direktori yang berhubungan dengan PgAdmin III dan juga di C: \ Users \ pc \ AppData \ Roaming \ postgresql. Saya selalu mendapat kesalahan: "Definisi layanan" myherokudb "tidak ditemukan
David
1
Saya juga berusaha membaca tentang pg_service.conf, tetapi sepertinya saya hanya menemukan dokumentasi yang merujuknya dalam konteks sisi server.
David
Saya tidak tahu dari mana Anda mendapat "konteks sisi server" karena dokumentasi yang saya tautkan merujuk ke klien. Kecuali Anda menganggap "unix / linux" berarti "server", yang tidak. Karena Anda awalnya tidak repot-repot menyebutkan OS apa yang Anda gunakan, saya tidak bisa lebih spesifik. Saya sekarang telah memperbarui jawaban dengan informasi khusus Windows (dan terus terang, cukup adil sehingga Anda bingung). Juga, pada Windows PgAdmin-III tampaknya menimpa host yang ditentukan dalam file layanan dengan yang ditentukan dalam UI, jadi biarkan hostdalam file layanan kosong.
Craig Ringer
Terima kasih banyak atas bantuannya! Solusi Anda hanya berfungsi! Itu adalah titik terdepan dalam nama file yang membingungkan saya, saya pikir itu adalah hal Linux. Terima kasih lagi!
David
2
Sebenarnya, solusi ini tidak berhasil. Butuh waktu lama bagi saya untuk sampai pada kesimpulan itu, berpikir bahwa itu disebabkan ketidakstabilan jaringan saya, dll., Tetapi koneksi memang masih time out. Saya yakin bahwa saya telah mengikuti deskripsi Anda. Bisa jadi itu suatu kasus, jika heroku telah meletakkan sesuatu untuk menghindari ribuan koneksi ke server pengujian gratis yang menampung ratusan database gratis.
David