서버에서 설정하지 않고 pgAdmin에서 연결을 유지하는 방법은 무엇입니까?


14

postgres.heroku.com을 사용하여 데이터베이스를 호스팅하고 있습니다. 이것은 서버 설정을 변경할 방법이 없다는 것을 의미합니다. 따라서이 질문에 대한 답변은 도움 되지 않습니다. Heroku는 그들의 설정을 기꺼이 바꾸지 않습니다 (저는 그들에게 연락했습니다).

PgAdmin III를 해킹하여 연결을 유지하는 가장 좋은 방법이 무엇인지 궁금합니다. PgAdmin이 백그라운드에있는 동안 사용자 인터페이스 작업을 자동화하기 위해 Autohotkey 매크로를 작성하거나 PgAdmins를 대신하여 네트워크 메시지를 강제 전송하는 일종의 네트워크 도구를 사용하는 것과 같은 것을 생각하고 있습니다.

또한 누군가 PgAmin III 코드로 변경할 수있는 500 $의 제안을 받았습니다. PgAdmin 개발자는 Heroku로 인해 코드를 수정하지 않습니다.

어떻게해야합니까? PgAdmin은 여러면에서 뛰어나며이 단점이 있습니다.


참고로,이 문제는 Heroku만이 아닙니다. Azure에서 호스팅되는 Linux VM에서이 문제가 발생하고 있으며 서비스 공급자가 유휴 TCP 연결을 닫는 데 문제가 있다고 생각합니다. PgAdmin는 킵 살아 옵션에 노출 될 수 있다면 그것은 아주 좋은 것입니다
조나스 Stawski

1
2002 년 이후 pgadmin 에서이 문제가 발생했습니다! 분명히 pgadmin은 앱을 닫고 다시 열고 전체 트리를 다시 열지 않고 시간이 초과되면 자동으로 다시 연결하도록 코딩 할 수 있습니까?
Matthew Lock

답변:


18

libpq기본 PostgreSQL 클라이언트 라이브러리 인 TCP keepalives를 활성화 하는 keepalives옵션이 있습니다 .

PgAdmin-III를 사용하면 임의의 연결 매개 변수를 직접 지정할 수 없지만 해결 방법이 있습니다.

PgAdmin-III에서 연결 구성을 보면 "서비스"옵션이 표시됩니다. 연결 서비스 파일을 나타냅니다 . 그것을 사용하려면 ~/.pg_service.conf다음과 같은 내용 으로 with를 만드십시오 .

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

및 PgAdmin-III에서 접속시 입력 myherokudb에서 service필드.

이로 인해 PgAdmin-III은 keepalives 활성화를 포함하여 서비스 파일에 지정된 연결 매개 변수를 사용합니다.

(Windows를 사용하는 경우 서비스 파일이 다른 위치에있을 수 있습니다. 설명서를 참조하십시오).

libpq킵 얼라이브를 제어하기위한 환경 변수는 없으므로 , 그렇게 설정할 수 없으므로 서비스 파일을 사용해야합니다.

PgAdmin-III에 추가 연결 매개 변수에 대한 지원 또는 keepalives 매개 변수를 제어하기위한 연결 옵션의 확인란을 추가하는 것은 매우 간단합니다. Dave가 작업에 자금을 제공하기 위해 귀하의 제안을 요청한 내용을 이해했는지 궁금합니다.


업데이트 : 서비스 파일이 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에서 테스트 한 결과 Windows host에서 PgAdmin-III 의 필드를 비워 둘 수 없습니다 . PgAdmin-III는 서비스 파일에 지정된 호스트를 연결 대화 상자에 지정된 호스트로 재정의하는 것 같습니다. 따라서 host서비스 파일에 키를 포함하지 않아야 합니다. (버그를보고하겠습니다).

Windows에서 "알려진 파일 형식의 파일 확장명 숨기기"가 해제되어 있으므로 실수로 .pg_service.conf.txt대신 호출하지 마십시오 . 이름이 올바른지 확실하지 않으면 목록보기에서 Windows 탐색기의 "유형"열을 확인하십시오. 그것이 잘못이라는 않다면 "텍스트 문서"를 읽어 것 .pg_service.conf.txt, 그리고 CONF File그것을 제대로 이름 않다면 .pg_service.conf. 이름을 바꾸는 데 문제가 있으면 "알려진 파일 형식의 파일 확장명 숨기기"를 끄거나 notepad ++ 와 같은 합리적인 텍스트 편집기를 사용하여 원하는 이름의 파일을 만들 수 있습니다.

파일 이름에서 선행 마침표 (점)를 확인하십시오. 그렇습니다 pgpass.conf. 버그와는 다른 성가신 일입니다.


고마워요! 이제 Windows 7 컴퓨터에서 45 분 동안이 작업을 시도했습니다. 첫 번째는 "호스트"필드를 비워 둘 수 없다는 것입니다. 해당 대화 상자에서 "확인"버튼을 비활성화합니다. 호스트로 "-"를 사용하려고했는데 두 번째 문제가 발생했습니다. pg_service.conf 파일을 어디에 둘지 모르겠습니다. 시행 착오를 시도하여 PgAdmin III과 관련된 모든 하위 디렉토리와 C : \ Users \ pc \ AppData \ Roaming \ postgresql에 배치했습니다. "서비스 정의"myherokudb "를 찾을 수 없습니다.
David

1
또한 pg_service.conf에 대해 읽으려고했지만 서버 쪽 컨텍스트에서만 참조하는 문서를 찾는 것 같습니다.
David

내가 링크 한 문서가 클라이언트를 참조한다는 것을 감안할 때 "서버 측 컨텍스트"가 어디에 있는지 모르겠습니다. "unix / linux"가 "server"를 의미한다고 가정하지 않으면 그렇지 않습니다. 원래 어떤 OS를 언급했는지 귀찮게하지 않았기 때문에 더 구체적으로 말할 수 없었습니다. 이제 Windows 관련 정보로 답변을 업데이트했습니다 (솔직히 말해서 혼란 스러웠습니다). 또한 Windows PgAdmin-III는 서비스 파일에 지정된 호스트를 UI에 지정된 호스트로 대체하는 것으로 보이므로 host서비스 파일을 비워 두십시오.
Craig Ringer

도와 주셔서 정말 감사합니다! 당신의 솔루션은 작동합니다! 나를 혼란스럽게 한 것은 파일 이름의 주요한 점이었다. 나는 그것이 리눅스라고 생각했다. 다시 감사합니다!
David

2
실제로이 솔루션은 결국 작동하지 않습니다. 네트워크 불안정 등의 원인이되었다고 생각하여 결론에 도달하는 데 오랜 시간이 걸렸지 만 연결은 여전히 ​​시간 초과되었습니다. 나는 당신의 설명을 따 랐음을 확신합니다. Heroku가 수백 개의 무료 데이터베이스를 호스팅하는 무료 테스트 서버에 수천 번의 연결을 피하기 위해 무언가를 배치 한 경우가 있습니다.
David
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.