PostgreSQL을 확장하여 사용자가 제공 한 코드를 별도로 실행할 수 범퍼카 토토.PostgresPostgreSQL의 공유 메모리 영역 및 연결libpq할 수 범퍼카 토토
경고 |
사용에는 상당한 견고성과 보안 위험이 범퍼카 토토C언어, 제한되지 않은 액세스가 범퍼카 토토 |
나열된 모듈 만shared_preload_libraries배경 작업자를 운영 할 수 범퍼카 토토.RegisterBackgroundWorker (BackgroundWorker *Worker)
에서_pg_init ()
. 구조배경 worker따라서 정의됩니다.
typedef void (*bgworker_main_type) (Datum main_arg);
bgw_name사용되는 문자열입니다
bgw_flags는 비트 마스크입니다bgworker_shmem_access(요청bgworker_backend_database_connection(요청bgworker_backend_database_connectionTObgworker_shmem_access또는 작업자 스타트 업
BGW_START_TIME는 서버 상태입니다Postgres시작해야합니다bgworkerstart_postmasterstart(즉시 시작Postgres자체가 자체적으로 완료되었습니다bgworkerstart_consistentstate(곧 시작하십시오bgworkerstart_recoveryfinished(시작 AS
BGW_RESTART_TIME간격입니다.Postgres기다려야합니다BGW_NEVER_RESTART,
bgw_mainDatum및void. BGW_MAIN_ARG는 그것으로 전달됩니다MyBgworkerentry를 가리 킵니다배경 worker등록시 통과 된 구조
일단 실행되면 프로세스가 전화하여 데이터베이스에 연결할 수 범퍼카 토토BackgroundWorkerInitializeConnection (char *dbname, char)
. 이를 통해 프로세스가 트랜잭션을 실행할 수 범퍼카 토토SPI인터페이스. 만약에dbname는 NULL입니다. 세션은 그렇지 않습니다사용자 이름과정은 null입니다initdb. BackgroundWorkerInitializeConnection 할 수 범퍼카 토토
컨트롤에 도달하면 신호가 처음 차단됩니다bgw_main함수BackgroundWorkerUnblockSignals
BackgroundWorkerBlockSignals
.
배경 작업자는 지속적으로 달리기를 예상합니다. 만약에Postgres다시 시작합니다Waitlatch ()
. 확인하십시오wl_postmaster_death플래그는 호출 할 때 설정됩니다Postgres자체가 범퍼카 토토
theWorker_SPIContrib 모듈이 포함되어 범퍼카 토토