Pesquisando essa questão , vejo que existe um valor para SetFunctionReturnMode
chamado SFRM_Materialize_Preferred
. O que é isto? Isso pode ser usado para escrever funções com mais desempenho?
Existem múltiplas ocorrências de SRFM_Materialize
in,contrib/
mas nenhuma deSRFM_Materalize_Preferred
SFRM_Materialize_Preferred
permite- lhe escrever uma função que aceite uma dica do chamador que pode aceitarMaterialize
ouValuePerCall
mode da documentação no READMEIsso está documentado como dica -- uma extensão para
SFRM_Materialize
-- na fonte,Você também pode ver que isso é usado no código do PostgreSQL Function Manager para SQL
fmgr_sql
Minha própria demonstração
Eu criei minha própria demonstração muito simplificada
SFRM_Materialize_Preferred
para fins de benchmarking. Você pode ver isso no meu repositório para o meu arquivopg-srf-repeat
. Basicamente, o modelo se resume a isso,Isso geralmente parece executar o mais rápido de
Materialize
ouValuePerCall
e a sobrecarga da implementação é menor (em comparação com uma implementação pura).Em Pg-Python
Estou mantendo isso aqui por causa da escassez geral de informações pertinentes. Eu determinei que este
SRF_SHOULD_MATERIALIZE
caso de macro é realmente muito bobo (eu abri um problema nele) ; o problema com aSRF_SHOULD_MATERIALIZE
macro éSFRM_Materialize
eSFRM_ValuePerCall
sempre é verdade , então essencialmente é apenas uma versão mais lenta deSFRM_Materialize_Preferred
**Ele também parece ser usado no
pg-python
projeto que permite acessar o Python 3 a partir do PostgreSQL Functions , mas não há casos de uso em todo o GitHub . Apg-python
macro paraSRF_SHOULD_MATERIALIZE
é a seguinte (veja a nota acima)Você pode ver a
SRF_SHOULD_MATERIALIZE
macro usada uma vez no site da chamada