#include "postgres.h" #include "miscadmin.h" #include "fmgr.h" #include <string.h> #include "postmaster/bgworker.h" #ifdef PG_MODULE_MAGIC PG_MODULE_MAGIC; #endif PG_FUNCTION_INFO_V1(get_worker_processes_status); Datum get_worker_processes_status(PG_FUNCTION_ARGS) { int32 i = PG_GETARG_INT32(0); BackgroundWorker worker; BackgroundWorkerHandle *handle; BgwHandleStatus status; text* greeting; text* towhom; char greet[] = "False"; int greetlen; int towhomlen; greetlen = strlen(greet); towhomlen = VARSIZE(towhom) - VARHDRSZ; memset(&worker, 0, sizeof(worker)); worker.bgw_flags = BGWORKER_SHMEM_ACCESS | BGWORKER_BACKEND_DATABASE_CONNECTION; worker.bgw_start_time = BgWorkerStart_RecoveryFinished; worker.bgw_restart_time = BGW_NEVER_RESTART; sprintf(worker.bgw_library_name, "worker_spi"); sprintf(worker.bgw_function_name, "worker_spi_main"); snprintf(worker.bgw_name, BGW_MAXLEN, "worker %d", i); worker.bgw_main_arg = Int32GetDatum(i); worker.bgw_notify_pid = MyProcPid; towhomlen = VARSIZE(towhom) - VARHDRSZ; greeting = (text*)palloc(greetlen + towhomlen); VaraTT_SIZEP(greeting) = greetlen + towhomlen + VARHDRSZ; strncpy(VARDATA(greeting), greet, greetlen); strncpy(VARDATA(greeting) + greetlen, VARDATA(towhom), towhomlen); if (!RegisterDynamicBackgroundWorker(&worker, &handle)) { PG_RETURN_TEXT_P(greeting); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。