Sunucuda ayarlamadan pgAdmin'de bağlantıyı canlı tutmanın herhangi bir yolu var mı?


14

Veritabanlarımı barındırmak için postgres.heroku.com kullanıyorum. Bu, sunucu ayarlarını değiştirmenin bir yolu olmadığı anlamına gelir. Dolayısıyla cevabı bu soruya bana yardımcı olmuyor. Heroku ayarlarını değiştirmeye istekli değil (onlarla iletişime geçtim).

Bağlantıyı canlı tutmak için PgAdmin III'ü hacklemenin en iyi yolunun ne olacağını merak ediyorum. Ben PgAdmin arka planda iken kullanıcı arabirimi eylemleri otomatikleştirmek için bir Autohotkey makro oluşturma veya belki PgAdmins adına ağ iletileri göndermeye zorlamak için bir tür ağ aracı kullanarak gibi şeyler düşünüyorum.

Ayrıca birisi PgAmin III koduna değiştirmek için 500 $ teklif aldım. PgAdmin'in geliştiricisi, sadece Heroku nedeniyle kodu değiştirmeyecek.

Ne yapmalıyım? PgAdmin pek çok açıdan üstündür, sadece bu dezavantajı vardır.


FYI, Heroku bu sorunu yaşayan tek kişi değil. Bu sorunu Azure'da barındırılan bir Linux VM'de çalıştırıyoruz ve sorunun, Hizmet Sağlayıcı'nın boş TCP bağlantılarını kapatmakla ilgili olduğunu düşünüyorum. PgAdmin'in canlı tut seçeneğini göstermesi çok güzel olurdu
Jonas Stawski

1
2002'den beri pgadmin ile bu sorunu yaşadım! Elbette pgadmin, uygulamayı kapatmanız, tekrar açmanız ve tüm ağacı yeniden açmanız yerine zaman aşımına uğradığında otomatik olarak yeniden bağlanmak için kodlanabilir mi?
Matthew Lock

Yanıtlar:


18

libpqtemel PostgreSQL istemci kitaplığı, TCP saklayıcılarını etkinleştirme seçeneğine sahiptirkeepalives .

PgAdmin-III, rastgele bağlantı parametrelerini doğrudan belirtmenize izin vermiyor gibi görünüyor, ancak bir geçici çözüm var.

PgAdmin-III'teki bağlantı yapılandırmasına baktığınızda, bir "hizmet" seçeneği göreceksiniz. Bu bağlantı servis dosyasını ifade eder . Kullanmak için aşağıdakiler gibi bir ~/.pg_service.confiçerikle a oluşturun :

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

ve pgAdmin-III bağlanırken girmek myherokudbde servicesahada.

Bu, PgAdmin-III'ün saklayıcıların etkinleştirilmesi de dahil olmak üzere hizmet dosyasında belirtilen bağlantı parametrelerini kullanmasına neden olur.

(Windows kullanıyorsanız, hizmet dosyası başka bir konumda olabilir; belgelere bakın).

libpqKalıcıları kontrol etmek için herhangi bir ortam değişkeni yoktur , bu nedenle bu şekilde ayarlayamazsınız, bir hizmet dosyası kullanmanız gerekir.

PgAdmin-III'e ek bağlantı parametreleri için destek veya keepalives parametresini kontrol etmek için bağlantı seçeneklerinde bir onay kutusu eklemek oldukça önemsiz olmalıdır. Acaba Dave, işi finanse etme teklifiniz için ne istediğinizi anlayıp anlamadığını merak ediyor.


Güncelleme : Hizmet dosyası, PGSYSCONFDIRortam değişkeninde belirtilen konuma bakılır . Belirlenmezse, varsayılan olarak Windows için düzgün bir şekilde belgelenmiş görünmeyen platforma özgü bir konumdur. Bir belge yaması göndereceğim. İçin belgeler.pgpass yolunu gösteriyor %APPDATA%\postgresql\pgpass.conf, öyle ~/.pg_service.confolmalı %APPDATA%\postgresql\pg_service.conf... ama öyle görünmüyor.

Aslında, doğru yol:

%APPDATA%\postgresql\.pg_service.conf

Yani:

  • Başlat-> Çalıştır
  • `% APPDATA%
  • yoksa "postgresql" dizini yarat
  • Yukarıda verilen içeriklerle bir metin dosyası olarak ".pg_service.conf" dosyası oluşturun (dosya adlandırma ile ilgili aşağıdaki nota bakın)
  • PgAdmin-III'de, Ana makine adına "localhost" ve hizmet alanına hizmet adını girin.

Windows'ta test ettim ve Windows'ta hostPgAdmin-III'teki alanı boş bırakamayacağınızı buldum. PgAdmin-III, hizmet dosyasında belirtilen tüm ana bilgisayarları bağlantı iletişim kutusunda belirtilenlerle geçersiz kılıyor gibi görünüyor. Bu nedenle host, hizmet dosyasına bir anahtar eklememelisiniz . (Bir hata bildireceğim).

Windows'ta "bilinen dosya türleri için dosya uzantılarını gizle" seçeneğinin kapalı olduğundan emin olun, bunun .pg_service.conf.txtyerine yanlışlıkla çağırmazsınız . Adının doğru olup olmadığından emin değilseniz, liste görünümünde Windows Gezgini'nde "Tür" sütununu kontrol edin; yanlış adlandırılmışsa .pg_service.conf.txtve CONF Filedoğru adlandırılmışsa "Metin Belgesi" ni okur .pg_service.conf. Yeniden adlandırma konusunda sorun yaşıyorsanız, "bilinen dosya türleri için dosya uzantılarını gizle" seçeneğini kapatın veya notepad ++ gibi istediğiniz gibi adlandırılmış dosyalar oluşturmanıza izin veren anlamlı bir metin düzenleyicisi kullanın .

Dosya adındaki baştaki noktaya (nokta) dikkat edin. Evet, bu farklı pgpass.confve evet, bu sinir bozucu, bir böceğe sınır.


Bunun için çok teşekkürler! Windows 7 bilgisayarımda bunu denemek için 45 dakika geçirdim. İlk şey "host" alanını boş bırakamam. Bu iletişim kutusundaki "Tamam" düğmesini devre dışı bırakır. Beni ikinci soruna götüren ev sahibi olarak "-" kullanmaya çalıştım. Pg_service.conf dosyasını nereye yerleştireceğimi bilmiyorum. Deneme ve hata yapmaya çalıştım ve PgAdmin III ile ilgili tüm alt dizinlere ve ayrıca C: \ Users \ pc \ AppData \ Roaming \ postgresql'ye yerleştirdim. Her zaman hatayı aldım: "Hizmetin tanımı" myherokudb "bulunamadı
David

1
Ayrıca pg_service.conf hakkında okumaya çalıştım, ancak sadece sunucu tarafı bağlamında başvurulan belgeleri bulmak gibi görünüyor.
David

Bağlandığım belgelerin istemciye başvurduğu göz önüne alındığında, "sunucu tarafı bağlamı" nı nereden aldığınızı bilmiyorum. Eğer "unix / linux" un "sunucu" anlamına gelmediği varsayılmaz. Başlangıçta hangi işletim sistemini kullandığınızdan bahsetmediğiniz için daha spesifik olamazdım. Şimdi cevabı Windows'a özel bilgilerle güncelledim (ve açıkçası, kafanızın karışması yeterince adil). Ayrıca, Windows PgAdmin-III'te hizmet dosyasında belirtilen ana bilgisayarı kullanıcı arabiriminde belirtilenle geçersiz kılıyor gibi görünüyor, bu nedenle hosthizmet dosyasını boş bırakın .
Craig Ringer

Yardımın için çok teşekkür ederim! Çözümünüz işe yarıyor! Beni karıştıran dosya isminin başında gelen nokta buydu, bunun Linux işi olduğunu düşündüm. Tekrar teşekkürler!
David

2
Aslında, bu çözüm sonuçta işe yaramıyor. Bu sonuca varmak, ağ kararsızlığım vb. Neden olduğunu düşünmek uzun zaman aldı, ancak bağlantı gerçekten de zaman aşımına uğradı. Açıklamanızı izlediğimden eminim. Bir durum olabilir, heroku yüzlerce ücretsiz veritabanına ev sahipliği yapan ücretsiz test sunucularına binlerce bağlantıdan kaçınmak için bir şey koymuştu.
David
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.