PHPPGADMIN : Postgres에서 사용자를 어떻게 쫓아 내므로 DB_DROP가 될 수 있습니까?

StackOverflow https://stackoverflow.com/questions/2432555

  •  19-09-2019
  •  | 
  •  

문제

PosgresQL 데이터베이스가 하나 있습니다 (저는 소유자입니다). 덤프에서 다시 만들고 싶습니다.

문제는 DB에 정기적으로 액세스하는 몇 가지 응용 프로그램 (2 개의 웹 사이트, 레일 및 Perl)이 있다는 것입니다. 따라서 "다른 사용자가 데이터베이스에 액세스하고 있습니다"오류가 발생합니다.

나는 한 가지 가능성이 관련된 프로세스의 PID를 얻고 개별적으로 죽이는 것임을 읽었습니다. 가능하면 더 깨끗한 일을하고 싶습니다.

PHPPGADMIN은 내가 원하는 것을 수행하는 것 같습니다. 웹 사이트가 켜져 있더라도 오류를 얻지 않고 웹 인터페이스를 사용하여 스키마를 삭제할 수 있습니다. 그래서 저는 코드의 작동 방식을 조사하고 있습니다. 그러나 저는 PHP 전문가가 아닙니다.

PHPPGadmin 코드를 이해하려고하는 방법을 확인하려고합니다. 내가 발견 라인 (schemas.php에서 257) 여기서 : 여기서 :

$data->dropSchema(...)

$data 글로벌 변수이며 정의 된 위치를 찾을 수 없었습니다.

모든 포인터는 크게 감사 할 것입니다.

도움이 되었습니까?

해결책

먼저 데이터베이스를 사용하여 현재 ProcesId의 모든 것을 찾으십시오.

SELECT usename, procpid FROM pg_stat_activity WHERE datname = current_database();

둘째, 원하지 않는 프로세스를 죽이십시오.

SELECT pg_terminate_backend(your_procpid);

이것은 버전 8.4에서 작동합니다. 그렇지 않으면 pg_terminate_backend ()는 알려지지 않았으며 OS 레벨에서 프로세스를 죽여야합니다.


주어진 데이터베이스에 연결된 모든 연결을 빠르게 삭제하려면이 바로 가기가 잘 작동합니다. 슈퍼 유저로 실행해야합니다.

SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname='YourDB';

보다 최근의 Postgres 버전 (최소 9.2+, 아마도 이전)에서 열 이름이 변경되었으며 쿼리는 다음과 같습니다.

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='YourDB';

다른 팁

PostgreSQL에 대해서는 확실하지 않지만 가능한 솔루션은 테이블을 잠그는 것이므로 다른 프로세스가 액세스하려고 할 때 실패 할 것입니다.

보다:http://www.postgresql.org/docs/current/static/sql-lock.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top