pg_ctl
là một tiện ích rất hữu ích nhưng bị đánh giá thấp, có thể giúp cho các nhóm phát triển của cuộc sống trở nên dễ dàng hơn. Đọc để tìm hiểu thêm về pg_ctl
và làm thế nào nó có thể cải thiện quy trình phát triển và kiểm tra công việc của bạn.
pg_ctl là gì?
pg_ctl là một công cụ dòng lệnh được bao gồm trong bản phân phối Postgres tiêu chuẩn. Nó có sẵn ở mọi nơi mà bản thân Postgres cũng có, tương tự như các công cụ đi kèm như psql và pg_dump .
Tập tin thực thi sẽ nằm trong cùng một thư mục với các tệp nhị phân Postgres khác. Vị trí chính xác thay đổi theo phiên bản Linux distro và Postgres:
# debain, ubuntu, ...
/usr/lib/postgresql/11/bin
# rhel, centos, ...
/usr/pgsql-11/bin
Bạn có thể muốn thêm thư mục này vào PATH của mình hoặc bí danh pg_ctl vào đường dẫn đầy đủ.
Tạo Cụm cơ sở dữ liệu
Không giống như các RDBMS khác, một quy trình máy chủ cơ sở dữ liệu Postgres (trước đây được gọi là postmaster ), quản lý cụm cơ sở dữ liệu . Việc sử dụng thuật ngữ cụm không hiện đại và không đề cập đến một nhóm các nút được nối mạng. Adatabase cluster lưu trữ một tập hợp các cơ sở dữ liệu, với một số tính năng (vai trò, bản sao vật lý, tệp WAL, v.v.) chung cho tất cả chúng. Dịch vụ Postgressystemd được cài đặt bởi bản phân phối Linux của bạn cung cấp một cụm cơ sở dữ liệu đơn.
Bạn có thể sử dụng pg_ctl
để tạo một cụm cơ sở dữ liệu. Khi tạo, cụm nằm hoàn toàn trong một thư mục duy nhất. Nó chứa tất cả các cấu hình cần thiết ( postgres.conf , pg_hba.conf , v.v.) và các tệp dữ liệu. Nó độc lập và có thể được chuyển sang một máy tương tự khác nếu quyền tệp được xử lý chính xác. Bạn thậm chí có thể đặt các tệp nhật ký bên trong thư mục để bạn có tất cả các tệp liên quan (cấu hình, dữ liệu, nhật ký) ở một nơi.
Để tạo một cụm cơ sở dữ liệu, hãy sử dụng:
$ pg_ctl -D myclus initdb
Điều này tạo ra một thư mục có tên là myclus trong thư mục hiện tại và phổ biến nó với tất cả các tệp cần thiết để khởi động máy chủ từ nó.
Đây là một phiên mẫu:
$ pg_ctl -D myclus initdb
The files belonging to this database system will be owned by user "alice".
This user must also own the server process.
The database cluster will be initialized with locale "C.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
creating directory myclus ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default timezone ... Etc/UTC
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/usr/lib/postgresql/11/bin/pg_ctl -D myclus -l logfile start
Khởi động Máy chủ Cơ sở dữ liệu
“Máy chủ Postgres” về cơ bản là quản trị viên bưu điện quá trình được bắt đầu với vị trí của một thư mục cụm cơ sở dữ liệu. Quy trình quản trị viên bưu điện này lần lượt sinh ra nhiều quy trình thực hiện các hoạt động nền khác nhau cũng như xử lý các kết nối đến. Bạn có thể thấy mô hình quy trình này đang hoạt động bằng cách xem xét cây quy trình hệ thống bằng cách sử dụng một công cụ như htop chẳng hạn.
Để bắt đầu quy trình quản trị viên bưu điện cho cụm cơ sở dữ liệu mới của bạn, hãy sử dụng:
$ pg_ctl -D myclus -l myclus/log start
-l
tùy chọn chỉ định vị trí của tệp nhật ký Postgres, trong trường hợp này, tệp này nằm trong chính thư mục cụm. Không có gì lạ khi đặt tệp nhật ký trong thư mục cụm.
Bạn sẽ thấy một kết quả như thế này:
waiting for server to start.... done
server started
Việc tải lại, khởi động lại và dừng diễn ra như bạn mong đợi:
$ pg_ctl -D myclus -l myclus/log reload
server signaled
$ pg_ctl -D myclus -l myclus/log restart
waiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started
$ pg_ctl -D myclus -l myclus/log stop
waiting for server to shut down.... done
server stopped
Bây giờ bạn có thể kết nối với cụm mới này bằng các ứng dụng khách như psql và pgAdmin .
Cài đặt cổng và các tùy chọn khác
Tuy nhiên, trên thực tế, nếu bạn đã cài đặt Postgres trên máy của mình, bạn có thể cần chỉnh sửa myclus/postgres.conf
và thay đổi các giá trị cho cổng , unix_socket_directories và cũng có thể nghe_địa_chỉ trước khi cụm khởi động sạch sẽ. Điều này là do Postgresservice được cài đặt hệ thống đã chạy trên cổng 5432 và các thư mục trong unix_socket_directories không thể được viết bởi một người dùng thông thường. Listen_address mặc định là localhost, nghĩa là bạn sẽ không thể kết nối với cụm từ bên ngoài localhost.
Nếu bạn đang sử dụng pg_ctl để tạo và chia nhỏ các cụm trong các tập lệnh tự động thử nghiệm của bạn, sẽ dễ dàng hơn nếu bạn có thể chỉ định các tùy chọn này trực tiếp từ dòng lệnh so với chỉnh sửa theo chương trình myclus/postgres.conf
.Bạn có thể chỉ định các tùy chọn như sau:
$ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i" start
Thao tác này khởi động máy chủ trên cổng 6000, với ổ cắm unix được tạo trong thư mục / tmp và nghe trên tất cả các giao diện.
Bạn chỉ cần chỉ định các tùy chọn này cho “start”, bạn có thể bỏ qua chúng đối với các lệnh khác, kể cả “khởi động lại”.
Các Tùy chọn Khởi động Hữu ích Khác
Có một số tùy chọn khác mà bạn có thể sử dụng bên trong “-o” có thể hữu ích:
-
-F
tắt fsync, hữu ích để hoàn thành tập lệnh thử nghiệm nhanh hơn -
-B shared_bufffers
đặt giá trị của shared_buffers , ví dụ-B 100MB
-
-c conf_var=value
đặt bất kỳ giá trị cấu hình nào, ví dụ-c wal_level=logical
Dưới đây là một ví dụ với một số bộ này:
$ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i -B 100MB -c wal_level=logical" start
Các tùy chọn này về thực tế là các tùy chọn dòng lệnh của postgres quy trình, danh sách đầy đủ được ghi lại ở đây.
Chạy Cơ sở dữ liệu của Phiên bản Postgres Khác
EnterpriseDB lưu trữ các tệp nhị phân được tạo sẵn cho các phiên bản Postgres khác nhau cho các nền tảng khác nhau. Đây là những tarball không có trình cài đặt.
Lấy tarball bạn muốn, giải nén, định vị pg_ctl
nhị phân với nó và sử dụng nó để tạo một cụm. pg_ctl
sẽ tự động tìm các mã nhị phân initdb / postgres / khác liên kết mà nó cần để tạo / startthe cluster.
Bạn có thể sử dụng điều này bất kể và độc lập với bất kỳ cài đặt PostgreSQL nào hiện có trên máy.
Tạo Dịch vụ trên Windows
pg_ctl
có sẵn trên tất cả các nền tảng, bao gồm cả MacOS và Windows. Đặc biệt, bạn có thể sử dụng nó để dễ dàng tạo một dịch vụ có thể khởi động và dừng thông qua Trình quản lý kiểm soát dịch vụ (SCM). Để tạo một dịch vụ, hãy sử dụng:
pg_ctl -D myclus -N myclus_service register
Điều này tạo ra một dịch vụ tự động khởi động có tên là “myclus_service”.
Tính năng này chỉ khả dụng trong Postgres v10 trở lên.