làm thế nào để dừng tất cả các quá trình postgres


33

Làm thế nào để bạn dừng tất cả các quá trình postgres với pg_ctl(hoặc nếu không), khi bạn không nhớ thư mục cơ sở dữ liệu là gì, cũng như không có biến môi trường PGDATA được xác định?

Câu trả lời:


58

An toàn để:

sudo pkill -u postgres

Điều đó giết chết tất cả các quá trình chạy như người dùng postgres. Hoặc là:

pkill postgres

Điều đó giết chết tất cả các quy trình có tên là 'postgres'.

Đừng không sử dụng kill -9( kill -KILL). Chỉ cần kill(không có tùy chọn) làm một SIGTERM, đó là những gì bạn muốn.

Ngoài ra, bạn có thể kiểm tra vị trí pgdata nếu bạn có thể kết nối với PostgreSQL. Ví dụ:

sudo -u postgres psql -c "SHOW data_directory";

... hoặc bằng cách kiểm tra các biến môi trường của nó , nơi bạn xác định người quản lý bưu điện . Tìm kiếm cái mà cha mẹ của các quá trình khác . Ví dụ:/proc/[postmaster pid]/environps -fHC postgrespostgres

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 của nó thường sẽ được hiển thị trên dòng lệnh của nó.


3

Nó làm cho tôi lo lắng khi thấy kill và postgres trong cùng một lệnh. Để trả lời câu hỏi chỉ sử dụng pg_ctl, đó sẽ là:

pg_ctl -D $(psql -Xtc 'show data_directory') stop

Đối số -X nói bỏ qua .psqlrctệp. Điều này rất hữu ích nếu bạn đã cấu hình psql để phát ra thời gian thực hiện bởi một truy vấn (thông qua lệnh \ time).

Đối số -t nói để xóa tên cột ở đầu ra và tổng số hàng được tạo.

Đối số -c chứa mã SQL được thực thi.

Chạy trần psql -c 'show data_directory'có thể sẽ tạo ra đầu ra sau:

      data_directory
--------------------------
 /path/to/postgresql/data
(1 row)

Do đó, việc sao lưu thông qua $( ... )này sẽ phân phối /path/to/postgresql/datađến đối số -D của pg_ctl, sau đó sẽ dừng cơ sở dữ liệu một cách có trật tự.


1
Tôi đoán, nếu điều này chính thức có nghĩa là để làm việc, đây sẽ là câu trả lời chính xác. Nó có phải là một lựa chọn mới?
matt

Giải pháp này sẽ có lợi từ việc giải thích các tùy chọn đang được sử dụng, cũng như việc sử dụng PGDATAbiến môi trường. Nỗ lực của tôi trong việc chạy lệnh này đã dẫn đến thất bại vì không có cơ sở dữ liệu như vậy dưới tên người dùng Linux của tôi.
Stephane

show data_directorycó thể được chạy mà không chỉ định cơ sở dữ liệu và thực sự không có máy chủ nào của tôi có cơ sở dữ liệu trong tên của tôi. Nó cũng không yêu cầu PGDATA, vì vậy tôi không thể giải thích được sự thất bại của bạn.
dland

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.