Будь-який спосіб зберегти зв’язок живим у 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.