O frontend e o backend são processos diferentes, comunicando-se através de um protocolo de rede.
O mais parecido com o que você quer é uma variável GUC ("grand unified configuration"). Você pode definir um GUC personalizado no servidor backend com DefineCustomIntVariable
e definir o sinalizador GUC_REPORT
para que quando ele for alterado por uma instrução SET
, etc., o novo valor seja relatado ao cliente usando uma notificação assíncrona no protocolo de fio. O aplicativo cliente pode detectar essa alteração e aplicar a nova configuração.
Da mesma forma, quando a variável é alterada no cliente, ela pode enviar uma consulta SET
para atribuir um novo valor ao servidor.
Obviamente, há atrasos impostos por isso, especialmente porque o protocolo permite apenas SET
de consultas e respostas de notificação em determinados momentos. Na prática, você verá apenas alterações nas variáveis após as consultas serem concluídas. Então não é a mesma coisa que apenas definir uma variável na memória.
Além disso, um GUC pode ter um valor separado em cada sessão de back-end no PostgreSQL, uma vez que é uma arquitetura de multiprocess shared-nothing-by-default. Portanto, se você deseja definir uma variável em todas as sessões, um GUC não é adequado e você precisa alocar uma variável na memória compartilhada usando sua extensão ... mas, nesse caso, não é possível relatar automaticamente o valor para o cliente.
O que quer que você esteja tentando fazer, eu suspeito strongmente que essa não é a maneira de fazê-lo.
A propósito, você realmente não deveria ter que consertar o PostgreSQL para isso. O _PG_init()
de uma extensão pode ser executado no tempo de inicialização do servidor, se estiver listado em shared_preload_libraries
. Ele pode alocar segmentos de memória compartilhada, definir GUCs, etc. naquele momento.
Se você realmente precisa garantir que exista uma variável que seja a mesma entre frontend e backend, e se o frontend e o backend forem executados no mesmo host do mesmo usuário, você poderá fazer algo usando mmap'd memória anônima e atomics. Seria difícil fazer isso certo e, no seu nível atual, envolverá um muito estudo.