Tanto quanto eu posso entender temp_buffers
a configuração serve para armazenar dados de tabelas temporárias.
Mas como eu criei uma tabela temporária imediatamente os arquivos são criados para ela PGDATA
junto com o banco de dados principal. Então gostaria de ajuda em várias questões.
O que acontece com
um. dados da tabela temporária setemp_buffers
é suficiente para armazenar dados da tabela temporária?b. dados da tabela temporária se
temp_buffers
não for suficiente para armazenar dados da tabela temporária?Existe algum caso em que a
temp_buffers
configuração não suficiente acaba derramandopgsql_tmp
?
As entradas em
pg_class
,pg_attributes
(e outros dados relacionados empg_catalog
) junto com arquivos relacionados vazios são sempre criados durante cada arquivocreate temp table
. Não posso me referir a um lugar no código-fonte do postgresql onde esse comportamento seria claramente visível. A criação de arquivos está muito longe de sercreate temp table
. É possível começar a ler a partir daquiOs dados gravados nessas tabelas temporárias serão armazenados em
temp_buffers
, uma estrutura de memória especial na memória privada do backend. Funciona comoshared_buffers
, mas muito mais simples, porque não nos importamos com acesso simultâneo e recuperação de tais dados temporários após uma falha.Se
temp_buffers
não for suficiente para dados - as páginas antigas dentro datemp_buffers
área serão despejadas e gravadas nos arquivos de relação correspondentes.Não nunca. As tabelas temporárias explícitas são armazenadas no diretório regular do banco de dados com o
t<backendOID>_
prefixo visível nos nomes dos arquivos (como$PGDATA/base/13709/t3_226351
).Por favor, não crie ou elimine tabelas temporárias frequentemente no postgresql (dezenas de vezes por segundo). Isso causa inchaço no catálogo do sistema e, portanto, torna as consultas mais lentas. Tabelas temporárias não são "livres" no postgresql.