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.
Jawaban:
libpq
, pustaka klien PostgreSQL yang mendasarinya, memilikikeepalives
opsi 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.conf
dengan isi seperti:dan saat terhubung dari PgAdmin-III masukkan
myherokudb
diservice
bidang.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
libpq
untuk 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
PGSYSCONFDIR
variabel 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.conf
olah, jadi~/.pg_service.conf
seharusnya%APPDATA%\postgresql\pg_service.conf
... tapi sepertinya tidak.Sebenarnya, jalur yang benar adalah:
Begitu:
Saya menguji pada Windows, dan menemukan bahwa Anda tidak dapat meninggalkan
host
bidang 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 memasukkanhost
kunci 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
, danCONF File
jika 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.sumber
host
dalam file layanan kosong.