Будь-який спосіб зберегти зв’язок живим у pgAdmin, не встановлюючи його на сервері?


14

Я використовую postgres.heroku.com для розміщення моїх баз даних. Це означає, що я не можу змінити налаштування сервера. Тому відповідь на це питання мені не допомагає. Heroku не бажає змінювати їх налаштування (я зв’язався з ними).

Мені цікаво, що найкращим способом було б зламати PgAdmin III, щоб зберегти зв’язок живим. Я маю на увазі такі речі, як створення макросу Autohotkey для автоматизації дій інтерфейсу користувача, коли PgAdmin знаходиться у фоновому режимі, або, можливо, використовується якийсь мережевий інструмент, щоб змусити надсилати мережеві повідомлення від імені PgAdmins.

Я також отримав пропозицію в розмірі 500 доларів за те, щоб хтось змінив код PgAmin III. Розробник PgAdmin, не змінює код, лише через Heroku.

Що я повинен зробити? PgAdmin перевершує стільки способів, він просто має цей недолік.


FYI, Heroku - не єдиний із цією проблемою. Ми зіткнулися з цією проблемою в VM Linux, розміщеному на Azure, і я думаю, що проблема полягає в тому, що постачальник послуг закриває непрацюючі TCP-з'єднання. Було б дуже приємно, якби PgAdmin міг викрити варіант збереження в живих
Йонас Ставський,

1
У мене ця проблема з pgadmin з 2002 року! Невже pgadmin може бути зашифрований для автоматичного підключення, як тільки він вийде, а не змушує вас закрити додаток, відкрити його знову та відкрити все дерево?
Метью Лок

Відповіді:


18

libpq, основна бібліотека клієнтів PostgreSQL, має keepalivesможливість увімкнути збереження TCP .

Схоже, що PgAdmin-III не дозволяє вам вказувати довільні параметри з'єднання безпосередньо, але існує обхід.

Переглянувши конфігурацію підключення в PgAdmin-III, ви побачите параметр "послуга". Це стосується файлу служби зв'язку . Щоб використовувати його, створіть ~/.pg_service.confвміст на зразок:

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

а при підключенні від PgAdmin-III введіть myherokudbу serviceполе.

Це призведе до того, що PgAdmin-III буде використовувати параметри з'єднання, визначені у файлі служби, включаючи активацію збереження.

(Якщо ви працюєте в Windows, файл служби може знаходитися в іншому місці; див. Документацію).

Немає змінної середовища libpqдля керування збереженням, тому ви не можете встановити його таким чином, вам доведеться використовувати службовий файл.

Додавання підтримки додаткових параметрів підключення до PgAdmin-III або прапорця в опціях підключення для керування параметром keepalives, має бути досить тривіальним. Цікаво, чи Дейв зрозумів, що ви просите про свою пропозицію для фінансування твору.


Оновлення : файл служби служби шукається у місці, вказаному в PGSYSCONFDIRзмінній оточення. Якщо він не встановлений, він за замовчуванням розміщується на певному платформі, який, здається, не є належним чином зафіксованим для Windows. Я надішлю виправлення документації. Документація для.pgpass показує, як шлях %APPDATA%\postgresql\pgpass.conf, такий ~/.pg_service.confповинен бути %APPDATA%\postgresql\pg_service.conf... Але, схоже, це не так.

Насправді правильний шлях:

%APPDATA%\postgresql\.pg_service.conf

Так:

  • Старт-> Виконати
  • `% APPDATA%
  • створити каталог "postgresql", якщо він не існує
  • створити файл ".pg_service.conf" як текстовий файл із наведеним вище вмістом (див. примітку нижче щодо повторного іменування файлів)
  • У PgAdmin-III введіть "localhost" у назві хоста, а ім'я служби - у службовому полі.

Я перевірив Windows, і виявив, що ви не можете залишити hostполе в пусті PgAdmin-III в Windows. PgAdmin-III, схоже, переосмислює будь-який хост, вказаний у службовому файлі, тим, що вказано у діалоговому вікні підключення. Таким чином, ви не повинні включати hostключ у службовий файл. (Повідомлю про помилку).

Переконайтеся, що "приховати розширення файлів для відомих типів файлів" вимкнено в Windows, тому ви не випадково викликаєте його .pg_service.conf.txt. Якщо ви не впевнені, чи названо його правильним чи ні, перевірте стовпець «Тип» у Windows Explorer у поданні списку; він буде читати "Текстовий документ", якщо він неправильно названий .pg_service.conf.txt, і CONF Fileякщо він правильно названий .pg_service.conf. Якщо у вас є проблеми з перейменуванням, вимкніть "приховати розширення файлів для відомих типів файлів" або скористайтеся розбірливим текстовим редактором, таким як блокнот ++, який дозволить створювати файли, названі як завгодно.

Зверніть увагу на провідний період (крапку) у назві файлу. Так, це інакше pgpass.conf, і так, це дратує, що межує з помилкою.


Дякую за це! Зараз я витратив 45 хвилин на те, щоб спробувати це на своєму комп'ютері з Windows 7. Перше, що я не можу залишити поле "хост" порожнім. У цьому діалоговому вікні вимкнеться кнопка "ОК". Я спробував використати "-" як хост, що привів мене до другої проблеми. Я не знаю, де розмістити файл pg_service.conf. Я спробував зробити пробну помилку і розмістив її у всіх підкаталогах, пов'язаних з PgAdmin III, а також у C: \ Users \ pc \ AppData \ Roaming \ postgresql. Я завжди отримував помилку: "Визначення послуги" myherokudb "не знайдено.
David

1
Я також намагався прочитати про pg_service.conf, але, здається, я знаходжу лише документацію, що стосується цього, у контексті на сервері.
Девід

Я не знаю, звідки у вас "контекст на стороні сервера", враховуючи, що документація, до якої я посилався, стосується клієнта. Якщо ви не припускаєте, що "unix / linux" означає "сервер", якого він не робить. Оскільки ви спочатку не намагалися згадати, на якій ОС ви працювали, я не можу бути більш конкретним. Зараз я оновив відповідь інформацією, що стосується Windows (і, чесно кажучи, досить справедливо, що ви заплуталися). Крім того, у Windows PgAdmin-III, схоже, перекриває вказаний у сервісному файлі хост на той, який вказаний в інтерфейсі, тому залиште hostв службовому файлі порожнім.
Крейг Рінгер

Дуже дякую за допомогу! Ваше рішення просто працює! Саме провідна точка в імені файлу мене збентежила, я вважав, що це річ Linux. Ще раз дякую вам!
Девід

2
Насправді це рішення не працює зрештою. Мені знадобилося багато часу, щоб прийти до цього висновку, думаючи, що це спричинило мою нестабільність мережі тощо, але зв’язок насправді все ще вичерпується. Я впевнений, що я стежив за вашим описом. Це може бути так, якби heroku поставив щось на місці, щоб уникнути тисячі підключень до своїх безкоштовних тестових серверів, що розміщують сотні безкоштовних баз даних.
David David
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.