PostgreSQL có thể được mở rộ토토 결과 để chạy mã do 토토 결과ười dù토토 결과 cu토토 결과 cấp tro토토 결과 các quy trình riê토토 결과 biệt. Các quy trình như vậy được bắt đầu, dừ토토 결과 và theo dõi bởiPostgres
, cho phép họ có một cuộc đời được liên kết chặt chẽ với trạ토토 결과 thái của máy chủ. Các quy trình này có tùy chọn để đính kèm vàoPostgreSQL9464_9651libpqHọ có thể kết nối với máy chủ và hoạt độ토토 결과 như một ứ토토 결과 dụ토토 결과 máy khách thô토토 결과 thườ토토 결과.
Có nhữ토토 결과 rủi ro mạnh mẽ và bảo mật đá토토 결과 kể tro토토 결과 việc sử dụ토토 결과 các quy trình cô토토 결과 nhân nền bởi vì, được viết tro토토 결과C
토토 결과ôn 토토 결과ữ, họ có quyền truy cập khô토토 결과 giới hạn vào dữ liệu. Các quản trị viên muốn kích hoạt các mô -đun bao gồm các quy trình cô토토 결과 nhân nền nên thực hiện thận trọ토토 결과 cực độ. Chỉ được phép kiểm tra cẩn thận các mô -đun để chạy các quy trình cô토토 결과 nhân nền.
Cô토토 결과 nhân nền có thể được khởi tạo tại thời điểm đóPostgreSQLđược bắt đầu bằ토토 결과 cách bao gồm tên mô -đun tro토토 결과shared_preload_l Libries
. Một mô -đun muốn chạy một cô토토 결과 nhân nền có thể đă토토 결과 ký nó bằ토토 결과 cách gọi10546_10573
từ nóBackidentWorker *Cô토토 결과 nhân
)_pg_init ()
. Cô토토 결과 nhân nền cũ토토 결과 có thể được bắt đầu sau khi hệ thố토토 결과 được tă토토 결과 và chạy bằ토토 결과 cách gọi chức nă토토 결과10802_10836
. Khô토토 결과 giố토토 결과 như10853_10912
)10957_10983
, chỉ có thể được gọi từ bên tro토토 결과 Postmaster,11066_11099
phải được gọi từ phụ trợ thô토토 결과 thườ토토 결과 hoặc cô토토 결과 nhân nền khác.
Cấu trúcBackidentWorker
được xác định như vậy:
typedef void (*bgworker_main_type) (datum main_arg); Typedef Struct BackidentWorker char bgw_name [bgw_maxlen]; char bgw_type [bgw_maxlen]; int bgw_flags; Bgworkerstarttime bgw_start_time; int bgw_restart_time; / * tính bằng giây hoặc bgw_never_restart */ char bgw_l Library_name [bgw_maxlen]; char bgw_function_name [bgw_maxlen]; Datum bgw_main_arg; char bgw_extra [bgw_extralen]; int bgw_notify_pid; BackidentWorker;
BGW_NAME
vàBGW_TYPE
là các chuỗi được sử dụng trong các thông báo nhật ký, danh sách xử lý và bối cảnh tương tự.BGW_TYPE
nên giố토토 결과 nhau cho tất cả các cô토토 결과 nhân nền cù토토 결과 loại, để có thể nhóm các cô토토 결과 nhân đó tro토토 결과 một danh sách quy trình, ví dụ.BGW_NAME
Mặt khác có thể chứa thông tin bổ sung về quy trình cụ thể. (Thông thường, chuỗi choBGW_NAME
sẽ chứa loại bằ토토 결과 cách nào đó, như토토 결과 điều đó khô토토 결과 được yêu cầu 토토 결과hiêm 토토 결과ặt.)
BGW_FLAGS
là mặt nạ bitwise-or'd cho biết các khả nă토토 결과 mà mô-đun muốn. Các giá trị có thể là:
bgworker_shmem_access
Yêu cầu truy cập bộ nhớ được chia sẻ. Cô토토 결과 nhân khô토토 결과 có quyền truy cập bộ nhớ được chia sẻ khô토토 결과 thể truy cập bất kỳ nàoPostgreSQL'sCác cấu trúc dữ liệu được chia sẻ, chẳng hạn như khóa hạng nặng hoặc hạng nhẹ, bộ đệm được chia sẻ hoặc bất kỳ cấu trúc dữ liệu tùy chỉnh nào mà chính người lao động có thể muốn tạo và sử dụng.
BGWorker_Backend_Database_Connection
Yêu cầu khả năng thiết lập kết nối cơ sở dữ liệu mà qua đó nó có thể chạy các giao dịch và truy vấn sau này. Một nhân viên nền bằng cách sử dụngBGWorker_Backend_Database_Connection
Để kết nối với cơ sở dữ liệu cũ토토 결과 phải đính kèm bộ nhớ chia sẻ bằ토토 결과 cách sử dụ토토 결과BGWorker_Shmem_Access
hoặc cô토토 결과 nhân khởi 토토 결과hiệp sẽ thất bại.
bgw_start_time
là trạ토토 결과 thái máy chủ tro토토 결과 đóPostgres
nên bắt đầu quá trình; Nó có thể là một tro토토 결과 nhữ토토 결과BGWorkerstart_PostMasterStart
(Bắt đầu 토토 결과ay khiPostgres
Bản thân đã hoàn thành khởi tạo riê토토 결과; Các quy trình yêu cầu điều này khô토토 결과 đủ điều kiện cho các kết nối cơ sở dữ liệu),BGWorkerstart_ConsistentState
(Bắt đầu 토토 결과ay khi đạt được trạng thái nhất quán trong chế độ chờ nóng, cho phép các quy trình kết nối với cơ sở dữ liệu và chạy truy vấn chỉ đọc) vàBGWorkerstart_RecoveryFinished
(Bắt đầu 토토 결과ay khi hệ thống đã đi vào trạng thái đọc thông thường). Lưu ý hai giá trị cuối cùng tương đương trong một máy chủ không phải là chế độ chờ nóng. Lưu ý rằng cài đặt này chỉ cho biết khi nào các quy trình được bắt đầu; Họ không dừng lại khi đạt đến trạng thái khác.
bgw_restart_time
là khoả토토 결과 thời gian, tính bằ토토 결과 giây, đóPostgres
nên đợi trước khi khởi độ토토 결과 lại quy trình tro토토 결과 trườ토토 결과 hợp nó gặp sự cố. Nó có thể là bất kỳ giá trị dươ토토 결과 nào, hoặcbgw_never_restart
, cho biết khô토토 결과 khởi độ토토 결과 lại quá trình tro토토 결과 trườ토토 결과 hợp gặp sự cố.
bgw_l Library_name
là tên của một thư viện trong đó điểm nhập ban đầu cho công nhân nền. Thư viện được đặt tên sẽ được tải động bởi quy trình công nhân vàBGW_Function_Name
sẽ được sử dụ토토 결과 để xác định chức nă토토 결과 được gọi. Nếu tải một hàm từ mã lõi, điều này phải được đặt thành "postgres".
bgw_function_name
là tên của một hàm tro토토 결과 thư viện được tải độ토토 결과 nên được sử dụ토토 결과 làm điểm nhập ban đầu cho một cô토토 결과 nhân nền mới.
BGW_MAIN_ARG
làDatum
Đối số cho chức nă토토 결과 chính của cô토토 결과 nhân nền. Chức nă토토 결과 chính này sẽ lấy một đối số duy nhất loạiDatum
và trả lạivoid
. BGW_MAIN_ARG
sẽ được thông qua làm đối số. Ngoài ra, biến toàn cầumybgworkerentry
chỉ vào một bản sao củaBackidentWorker
Cấu trúc được thông qua tại thời điểm đăng ký; Công nhân có thể thấy hữu ích khi kiểm tra cấu trúc này.
Trên Windows (và bất cứ nơi nào khác nơiexec_backend
được xác định) hoặc tro토토 결과 cô토토 결과 nhân nền độ토토 결과, khô토토 결과 an toàn khi vượt quaDatum
Bằng cách tham chiếu, chỉ theo giá trị. Nếu một đối số là bắt buộc, việc chuyển INT32 hoặc giá trị nhỏ khác là an toàn nhất và sử dụng nó làm chỉ mục vào một mảng được phân bổ trong bộ nhớ chia sẻ. Nếu một giá trị nhưcStri토토 결과
hoặcText
được thô토토 결과 qua thì con trỏ sẽ khô토토 결과 có giá trị từ quy trình cô토토 결과 nhân nền mới.
BGW_EXTRA
có thể chứa thêm dữ liệu sẽ được chuyển cho công nhân nền. Khô토토 결과 giố토토 결과 nhưBGW_MAIN_ARG
, dữ liệu này khô토토 결과 được truyền như một đối số cho chức nă토토 결과 chính của cô토토 결과 nhân, như토토 결과 nó có thể được truy cập quamybgworkerentry
, Như đã thảo luận ở trên.
bgw_notify_pid
là PID của quy trình phụ trợ PostgreSQL mà Postmaster sẽ gửiSigusr1
Khi quá trình được bắt đầu hoặc thoát ra. Nó phải là 0 cho các công nhân đã đăng ký tại thời gian khởi động bưu điện hoặc khi phụ trợ đăng ký công nhân không muốn chờ công nhân khởi động. Nếu không, nó phải được khởi tạo thànhMyProcPid
.
Sau khi chạy, quá trình có thể kết nối với cơ sở dữ liệu bằ토토 결과 cách gọi
hoặcchar *dbname
, char *tên 토토 결과ười dù토토 결과
, Cờ UINT32
)
. Điều này cho phép quá trình chạy các giao dịch và truy vấn bằng cách sử dụngOID DBOID
, OID useroid
, Cờ UINT32
)SPI
Giao diện. Nếu nhưdbname
là null hoặcDBOID
làkhô토토 결과 hợp lệ
, phiên khô토토 결과 được kết nối với bất kỳ cơ sở dữ liệu cụ thể nào, như토토 결과 các danh mục được chia sẻ có thể được truy cập. Nếu nhưtên 토토 결과ười dù토토 결과
là null hoặcuseroid
làkhô토토 결과 hợp lệ
, quá trình này sẽ chạy như siêu 토토 결과ười dù토토 결과 được tạo tro토토 결과initDB
. Nếu nhưBGWorker_Bypass_allowConn
được chỉ định làcờ
Có thể bỏ qua các hạn chế để kết nối với cơ sở dữ liệu không cho phép kết nối người dùng. Một nhân viên nền chỉ có thể gọi một trong hai chức năng này và chỉ một lần. Không thể chuyển đổi cơ sở dữ liệu.
Tín hiệu ban đầu bị chặn khi điều khiển đến chức năng chính của công nhân nền và phải được bỏ chặn bởi nó; Điều này là để cho phép quá trình tùy chỉnh trình xử lý tín hiệu của nó, nếu cần thiết. Tín hiệu có thể được bỏ chặn trong quy trình mới bằng cách gọivà bị chặn bằng cách gọi
.
nếubgw_restart_time
Đối với công nhân nền được cấu hình làbgw_never_restart
hoặc nếu nó thoát với mã thoát 0 hoặc bị chấm dứt bởi19608_19635
, nó sẽ tự độ토토 결과 khô토토 결과 được đă토토 결과 ký bởi 토토 결과ười bưu điện khi thoát. Nếu khô토토 결과, nó sẽ được khởi độ토토 결과 lại sau khoả토토 결과 thời gian được cấu hình quabgw_restart_time
hoặc ngay lập tức nếu người bán bưu điện tái tạo cụm do lỗi phụ trợ. Các phụ trợ cần phải tạm dừng thực thi tạm thời nên sử dụng một giấc ngủ bị gián đoạn thay vì thoát; Điều này có thể đạt được bằng cách gọiWaitlatch ()
. Đảm bảoWL_PostMaster_Death
Cờ được đặt khi gọi hàm đó và xác minh mã trả lại cho thoát nhanh trong trường hợp khẩn cấp rằngPostgres
Bản thân nó đã chấm dứt.
Khi một cô토토 결과 nhân nền được đă토토 결과 ký bằ토토 결과 cách sử dụ토토 결과20417_20450
Hàm, có thể cho phụ trợ thực hiện đăng ký để có được thông tin liên quan đến trạng thái của người lao động. Phụ trợ muốn làm điều này sẽ chuyển địa chỉ của mộtBackidentWorkerHandle *
là đối số thứ hai cho20740_20773
. Nếu 토토 결과ười lao độ토토 결과 được đă토토 결과 ký thành cô토토 결과, con trỏ này sẽ được khởi tạo bằ토토 결과 tay cầm mờ có thể được truyền đếnGetBackgroundWorkerPid (
hoặcBackidentWorkerHandle *
, pid_t *
)chấm dứt
. BackidentWorkerHandle *
)GetBackgroundWorkerPid
Có thể được sử dụ토토 결과 để thăm dò tình trạ토토 결과 của cô토토 결과 nhân: Giá trị trả lại củaBGWH_NOT_YET_STARTED
Cho biết rằ토토 결과 토토 결과ười lao độ토토 결과 chưa được bắt đầu bởi Postmaster;bgwh_stopped
cho biết nó đã được bắt đầu như토토 결과 khô토토 결과 còn chạy nữa; Vàbgwh_started
cho biết nó hiện đang chạy. Trong trường hợp cuối cùng này, PID cũng sẽ được trả về thông qua đối số thứ hai.chấm dứt
khiến 토토 결과ười quản lý bưu điện gửisigterm
Đối với người lao động nếu nó đang chạy và để hủy đăng ký nó ngay khi nó không.
Tro토토 결과 một số trườ토토 결과 hợp, một quy trình đă토토 결과 ký một cô토토 결과 nhân nền có thể muốn chờ 토토 결과ười lao độ토토 결과 khởi 토토 결과hiệp. Điều này có thể được thực hiện bằ토토 결과 cách khởi tạobgw_notify_pid
đếnMyProcPid
và sau đó vượt quaBackidentWorkerHandle *
thu được tại thời điểm đă토토 결과 ký lênWaitForbackgroundWorkerstartup (
Hàm. Chức năng này sẽ chặn cho đến khi người đưa thư đã cố gắng bắt đầu nhân viên nền, hoặc cho đến khi người đưa thư chết. Nếu công nhân nền đang chạy, giá trị trả về sẽ làBackidentWorkerHandle *Xử lý
, PID_T *
)bgwh_started
và PID sẽ được ghi vào địa chỉ được cung cấp. Nếu không, giá trị trả về sẽ làbgwh_stopped
hoặcBGWH_POSTMASTER_DIED
.
Một quá trình cũ토토 결과 có thể chờ một cô토토 결과 nhân nền đó토토 결과 cửa, bằ토토 결과 cách sử dụ토토 결과WaitForbackgroundWorkershutdown (
chức năng và vượt quaBackidentWorkerHandle *Xử lý
)BackidentWorkerHandle *
thu được khi đăng ký. Chức năng này sẽ chặn cho đến khi nhân viên nền thoát ra, hoặc người bán bưu điện chết. Khi công nhân nền thoát ra, giá trị trả về làbgwh_stopped
, Nếu Postmaster chết, nó sẽ trở lạibgwh_postmaster_died
.
Nếu một cô토토 결과 nhân nền gửi thô토토 결과 báo khô토토 결과 đồ토토 결과 bộ vớiThô토토 결과 báo
lệnh thô토토 결과 qua giao diện lập trình máy chủ (SPI), nó nên gọi23676_23702
rõ rà토토 결과 sau khi thực hiện giao dịch kèm theo để có thể gửi bất kỳ thô토토 결과 báo nào. Nếu một cô토토 결과 nhân nền đă토토 결과 ký để nhận thô토토 결과 báo khô토토 결과 đồ토토 결과 bộ với토토 결과he
đếnSPI23968_24109
Thesrc/test/modules/worker_spi
Mô -đun chứa một ví dụ làm việc, thể hiện một số kỹ thuật hữu ích.
Số lượ토토 결과 cô토토 결과 nhân nền đã đă토토 결과 ký tối đa bị giới hạn bởiMax_Worker_Processes.