圣光照耀联盟—PostgreSQL临时表的创建与使用过程

圣光照耀联盟—PostgreSQL临时表的创建与使用过程,第1张

概述1、临时表的创建与普通表没什么区别,都是通过 DefineRelation 函数 (定义于 src/backend/commands/tablecmds.c),临时表具有属性 relation->relpersistence == RELPERSISTENCE_TEMP #define RELPERSISTENCE_PERMANENT 'p' /* regular table */#d

1、临时表的创建与普通表没什么区别,都是通过defineRelation 函数(定义于 src/backend/commands/tablecmds.c),临时表具有属性relation->relpersistence == RELPERSISTENCE_TEMP

#define		  RELPERSISTENCE_PERMANENT	'p'		/* regular table */#define		  RELPERSISTENCE_UNLOGGED	'u'		/* unlogged permanent table */#define		  RELPERSISTENCE_TEMP		't'		/* temporary table */

2、首先为临时表创建临时schema,命名为"pg_temp_%d",MyBackendID,也就是以客户端后台进程的PID为后缀,保证各进程不冲突。(消耗 OID)
函数InitTemptablenamespace定义于src/backend/catalog/namespace.c

3、随后的创建过程与普通表区别不大,仍然消耗 OID

4、我们直接跳到缓存的分配看:

bool		isLocalBuf = SmgrIstemp(smgr);
if (isLocalBuf)	{		bufHdr = LocalBufferAlloc(smgr,forkNum,blockNum,&found);		if (found)			pgBufferUsage.local_blks_hit++;		else			pgBufferUsage.local_blks_read++;	}

这里 isLocalBuf 就是临时表的意思

#define SmgrIstemp(smgr) \	RelfileNodeBackendIstemp((smgr)->smgr_rnode)
/* * Augmenting a relfilenode with the backend ID provIDes all the information * we need to locate the physical storage.  The backend ID is InvalIDBackendID * for regular relations (those accessible to more than one backend),or the * owning backend's ID for backend-local relations.  Backend-local relations * are always transIEnt and removed in case of a database crash; they are * never WAL-logged or fsync'd. */typedef struct RelfileNodeBackend{	RelfileNode node;	BackendID	backend;} RelfileNodeBackend;

5、临时表缓存

if (LocalBufHash == NulL)		InitLocalBuffers();

这里就是文档Chapter 18. Server Configuration,18.4.1. Memory 里边关于temp_buffers 的说明:The setting can be changed within indivIDual sessions,but only before the first use of temporary tables within the session; subsequent attempts to change the value will have no effect on that session.
第一次使用时才会初始化,随后再修改将不起作用。

-------------------------------------------- 权宗亮 神州飞象(北京)数据科技有限公司 我们的力量源自最先进的开源数据库Postgresql zongliang.quan@postgresdata.com

总结

以上是内存溢出为你收集整理的圣光照耀联盟—PostgreSQL临时表的创建与使用过程全部内容,希望文章能够帮你解决圣光照耀联盟—PostgreSQL临时表的创建与使用过程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1174305.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存