답변:
다음이 안전합니다.
sudo pkill -u postgres
user로 실행중인 모든 프로세스가 종료됩니다 postgres
. 또는:
pkill postgres
그러면 'postgres'라는 모든 프로세스가 종료됩니다.
마십시오 하지 사용 kill -9
( kill -KILL
). kill
(옵션없이) 그냥 SIGTERM
원하는 것을 수행합니다.
또는 PostgreSQL에 연결할 수 있으면 pgdata 위치를 확인할 수 있습니다. 예를 들면 다음과 같습니다.
sudo -u postgres psql -c "SHOW data_directory";
또는에서 환경 변수 를 확인하여에서 포스트 마스터를 식별합니다 . 다른 프로세스 의 부모 인 것을 찾으십시오 . 예를 들면 다음과 같습니다./proc/[postmaster pid]/environ
ps -fHC postgres
postgres
postgres 794 1 0 Nov06 ? 00:00:03 /usr/pgsql-9.3/bin/postgres -D /var/lib/pgsql/9.3/data -p 5432
postgres 857 794 0 Nov06 ? 00:00:00 postgres: logger process
postgres 871 794 0 Nov06 ? 00:00:00 postgres: checkpointer process
postgres 872 794 0 Nov06 ? 00:00:00 postgres: writer process
postgres 873 794 0 Nov06 ? 00:00:00 postgres: wal writer process
postgres 874 794 0 Nov06 ? 00:00:03 postgres: autovacuum launcher process
postgres 875 794 0 Nov06 ? 00:00:07 postgres: stats collector process
datadir은 일반적으로 명령 행에 표시됩니다.
그것은 같은 명령으로 kill과 postgres를 보는 것을 긴장하게 만듭니다. 만 사용하여 질문에 대답하려면 다음과 pg_ctl
같습니다.
pg_ctl -D $(psql -Xtc 'show data_directory') stop
-X 인수는 .psqlrc
파일 을 무시하도록 지시 합니다. 이는 psql이 \ timing 명령을 통해 쿼리에 걸리는 시간을 내도록 구성한 경우에 유용합니다.
-t 인수는 출력 맨 위에있는 열 이름과 생성 된 총 행 수를 제거하도록 지시합니다.
-c 인수는 실행될 SQL 코드를 포함합니다.
베어 psql -c 'show data_directory'
를 실행 하면 아마도 다음과 같은 출력이 생성됩니다.
data_directory
--------------------------
/path/to/postgresql/data
(1 row)
따라서 이것을 통해 틱하면 pg_ctl의 -D 인수로 $( ... )
전달 /path/to/postgresql/data
되어 순서대로 데이터베이스가 중지됩니다.
PGDATA
환경 변수 의 사용법을 설명하면 도움이됩니다 . Linux 사용자 이름 아래에 해당 데이터베이스가 없으므로이 명령을 실행하려고하면 실패했습니다.
show data_directory
데이터베이스를 지정하지 않고 실행할 수 있으며 실제로 내 서버에 내 이름의 데이터베이스가 없습니다. PGDATA도 필요하지 않으므로 실패에 대해 설명하지 못했습니다.
이것은 나를 위해 일합니다. https://stackoverflow.com/a/5408501/248616
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'YOUR_NAME';