Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3
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ùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

Chương 47. Quy trình kèo tỷ số bóng đá euro hôm nay

PostgreSQL có thể được mở rộng để chạy mã do người dùng cung cấp trong các quy kèo tỷ số bóng đá euro hôm nay riêng biệt. Các quy kèo tỷ số bóng đá euro hôm nay như vậy được bắt đầu, dừng và theo dõi bởiPostgres9297_9423PostgreSQL9464_9651libpqHọ có thể kết nối với máy chủ và hoạt động như một ứng dụng máy khách thông thường.

cảnh báo

Có những rủi ro mạnh mẽ và bảo mật đáng kể trong việc sử dụng các quy trình kèo tỷ số bóng đá euro hôm nay bởi vì, được viết trongCNgôn ngữ, họ có quyền truy cập không 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 kèo tỷ số bóng đá euro hôm nay nên thực hiện thận trọng cực độ. Chỉ được phép kiểm tra cẩn thận các mô -đun để chạy các quy trình kèo tỷ số bóng đá euro hôm nay.

kèo tỷ số bóng đá euro hôm nay có thể được khởi tạo tại thời điểm đóPostgreSQLđược bắt đầu bằng cách bao gồm tên mô -đun trongshared_preload_l Libries. Một mô -đun muốn chạy một kèo tỷ số bóng đá euro hôm nay có thể đăng ký nó bằng cách gọi10546_10573BackidentWorker *Công kèo tỷ số bóng đá euro hôm nay)từ nó_pg_init (). kèo tỷ số bóng đá euro hôm nay cũng có thể được bắt đầu sau khi hệ thống được tăng và chạy bằng cách gọi chức năng10802_1083610853_10912). Không giống như10957_10983, chỉ có thể được gọi từ bên trong Postmaster,11066_11099phải được gọi từ phụ trợ thông thường hoặc kèo tỷ số bóng đá euro hôm nay khác.

Cấu trúcBackidentWorkerđược xác định như vậy:

11296_11821

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ống nhau cho tất cả các kèo tỷ số bóng đá euro hôm nay cùng loại, để có thể nhóm các công nhân đó trong 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 kèo tỷ số bóng đá euro hôm nay cụ thể. (Thông thường, chuỗi choBGW_NAME12375_12444

BGW_FLAGSlà mặt nạ bitwise-or'd cho biết các khả năng 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ông kèo tỷ số bóng đá euro hôm nay không có quyền truy cập bộ nhớ được chia sẻ không 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 kèo tỷ số bóng đá euro hôm nay 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ũng phải đính kèm bộ nhớ chia sẻ bằng cách sử dụngBGWorker_Shmem_Accesshoặc công kèo tỷ số bóng đá euro hôm nay khởi nghiệp sẽ thất bại.

bgw_start_timelà trạng thái máy chủ trong đóPostgresnên bắt đầu quá kèo tỷ số bóng đá euro hôm nay; Nó có thể là một trong nhữngBGWorkerstart_PostMasterStart(Bắt đầu ngay khiPostgresBản thân đã hoàn thành khởi tạo riêng; Các quy kèo tỷ số bóng đá euro hôm nay yêu cầu điều này không đủ điều kiện cho các kết nối cơ sở dữ liệu),BGWorkerstart_ConsistentState(Bắt đầu ngay khi đạt được trạng thái nhất quán trong chế độ chờ nóng, cho phép các quy kèo tỷ số bóng đá euro hôm nay 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 ngay 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 kèo tỷ số bóng đá euro hôm nay được bắt đầu; Họ không dừng lại khi đạt đến trạng thái khác.

bgw_restart_time14756_14793Postgresnên đợi trước khi khởi động lại quy kèo tỷ số bóng đá euro hôm nay trong trường hợp nó gặp sự cố. Nó có thể là bất kỳ giá trị dương nào, hoặcbgw_never_restart, cho biết không khởi động lại quá kèo tỷ số bóng đá euro hôm nay trong trường 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 kèo tỷ số bóng đá euro hôm nay. 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ụng để xác định chức năng đượ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 trong thư viện được tải động nên được sử dụng làm điểm nhập ban đầu cho một kèo tỷ số bóng đá euro hôm nay mới.

BGW_MAIN_ARGDatumĐối số cho chức năng chính của kèo tỷ số bóng đá euro hôm nay. Chức năng 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 kèo tỷ số bóng đá euro hôm nay 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 trong kèo tỷ số bóng đá euro hôm nay động, không 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ưcStringhoặcTextđược thông qua thì con trỏ sẽ không có giá trị từ quy trình kèo tỷ số bóng đá euro hôm nay mới.

BGW_EXTRA16828_16900BGW_MAIN_ARG, dữ liệu này không được truyền như một đối số cho chức năng chính của công kèo tỷ số bóng đá euro hôm nay, nhưng nó có thể được truy cập quamybgworkerentry, Như đã thảo luận ở trên.

bgw_notify_pid17164_17246Sigusr117280_17519MyProcPid.

Sau khi chạy, quá kèo tỷ số bóng đá euro hôm nay có thể kết nối với cơ sở dữ liệu bằng cách gọichar *dbname, char *tên người dùng, Cờ UINT32)hoặcOID DBOID, OID useroid, Cờ UINT32). Điều này cho phép quá kèo tỷ số bóng đá euro hôm nay 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ông hợp lệ, phiên không được kết nối với bất kỳ cơ sở dữ liệu cụ thể nào, nhưng các danh mục được chia sẻ có thể được truy cập. Nếu nhưtên người dùnglà null hoặcuseroidkhông hợp lệ, quá kèo tỷ số bóng đá euro hôm nay này sẽ chạy như siêu người dùng được tạo tronginitDB. 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 kèo tỷ số bóng đá euro hôm nay 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 kèo tỷ số bóng đá euro hôm nay 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ọi19255_19287và bị chặn bằng cách gọi.

nếubgw_restart_timeĐối với kèo tỷ số bóng đá euro hôm nay đượ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ự động không được đăng ký bởi người bưu điện khi thoát. Nếu không, nó sẽ được khởi động lại sau khoảng 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 kèo tỷ số bóng đá euro hôm nay được đăng ký bằng cách sử dụng20417_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 người lao động được đăng ký thành công, con trỏ này sẽ được khởi tạo bằng tay cầm mờ có thể được truyền đếnGetBackgroundWorkerPid (BackidentWorkerHandle *, pid_t *)hoặcchấm dứtBackidentWorkerHandle *). GetBackgroundWorkerPidCó thể được sử dụng để thăm dò tình trạng của công kèo tỷ số bóng đá euro hôm nay: Giá trị trả lại củaBGWH_NOT_YET_STARTEDCho biết rằng người lao động chưa được bắt đầu bởi Postmaster;bgwh_stoppedcho biết nó đã được bắt đầu nhưng không 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 ngườ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.

21913_22062bgw_notify_pidđếnMyProcPidvà sau đó vượt quaBackidentWorkerHandle *thu được tại thời điểm đăng 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 kèo tỷ số bóng đá euro hôm nay đ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ũng có thể chờ một kèo tỷ số bóng đá euro hôm nay đóng cửa, bằng cách sử dụngWaitForbackgroundWorkershutdown (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 kèo tỷ số bóng đá euro hôm nay 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 kèo tỷ số bóng đá euro hôm nay gửi thông báo không đồng bộ vớiThông báolệnh thông qua giao diện lập kèo tỷ số bóng đá euro hôm nay máy chủ (SPI), nó nên gọi23676_23702rõ ràng sau khi thực hiện giao dịch kèm theo để có thể gửi bất kỳ thông báo nào. Nếu một kèo tỷ số bóng đá euro hôm nay đăng ký để nhận thông báo không đồng bộ vớingheđế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ượng kèo tỷ số bóng đá euro hôm nay đã đăng ký tối đa bị giới hạn bởiMax_Worker_Processes.