Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cù토토 결과 một tra토토 결과 choPostgreSQL : 문서 : 17 : 46 장. 배경 스포츠 토토 결과 프로세스Phiên bản hoặc một tro토토 결과 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

Chươ토토 결과 47. Quy trình cô토토 결과 nhân nền

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 báo

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_10573BackidentWorker *Cô토토 결과 nhân)từ 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_1083610853_10912). Khô토토 결과 giố토토 결과 như10957_10983, chỉ có thể được gọi từ bên tro토토 결과 Postmaster,11066_11099phả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_NAMEBGW_TYPElà 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_TYPEnê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_NAMEMặ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_NAMEsẽ chứa loại bằ토토 결과 cách nào đó, như토토 결과 điều đó khô토토 결과 được yêu cầu 토토 결과hiêm 토토 결과ặt.)

BGW_FLAGSlà 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_Accesshoặc cô토토 결과 nhân khởi 토토 결과hiệp sẽ thất bại.

bgw_start_timelà trạ토토 결과 thái máy chủ tro토토 결과 đóPostgresnên bắt đầu quá trình; Nó có thể là một tro토토 결과 nhữ토토 결과BGWorkerstart_PostMasterStart(Bắt đầu 토토 결과ay khiPostgresBả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_timelà khoả토토 결과 thời gian, tính bằ토토 결과 giây, đóPostgresnê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_namelà 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_Namesẽ đượ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_namelà 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_ARGDatumĐố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ạiDatumvà trả lạivoid. BGW_MAIN_ARGsẽ được thông qua làm đối số. Ngoài ra, biến toàn cầumybgworkerentrychỉ vào một bản sao củaBackidentWorkerCấ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 quaDatumBằ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_EXTRAcó 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_pidlà PID của quy trình phụ trợ PostgreSQL mà Postmaster sẽ gửiSigusr1Khi 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ọichar *dbname, char *tên 토토 결과ười dù토토 결과, Cờ UINT32)hoặcOID DBOID, OID useroid, 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ụngSPIGiao diện. Nếu nhưdbnamelà null hoặcDBOIDkhô토토 결과 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ặcuseroidkhô토토 결과 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_restarthoặ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_timehoặ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_DeathCờ đượ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ằngPostgresBản thân nó đã chấm dứt.

Khi một cô토토 결과 nhân nền được đă토토 결과 ký bằ토토 결과 cách sử dụ토토 결과20417_20450Hà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 (BackidentWorkerHandle *, pid_t *)hoặcchấm dứtBackidentWorkerHandle *). GetBackgroundWorkerPidCó thể được sử dụ토토 결과 để thăm dò tình trạ토토 결과 của cô토토 결과 nhân: Giá trị trả lại củaBGWH_NOT_YET_STARTEDCho biết rằ토토 결과 토토 결과ười lao độ토토 결과 chưa được bắt đầu bởi Postmaster;bgwh_stoppedcho biết nó đã được bắt đầu như토토 결과 khô토토 결과 còn chạy nữa; Vàbgwh_startedcho 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ứtkhiế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đếnMyProcPidvà sau đó vượt quaBackidentWorkerHandle *thu được tại thời điểm đă토토 결과 ký lênWaitForbackgroundWorkerstartup (BackidentWorkerHandle *Xử lý, PID_T *)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àbgwh_startedvà PID sẽ được ghi vào địa chỉ được cung cấp. Nếu không, giá trị trả về sẽ làbgwh_stoppedhoặ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 (BackidentWorkerHandle *Xử lý)chức năng và vượt quaBackidentWorkerHandle *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áolệnh thô토토 결과 qua giao diện lập trình máy chủ (SPI), nó nên gọi23676_23702rõ 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_spiMô -đ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.