我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PostgreSQL在执行逻辑优化中相关的数据结构有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PostgreSQL在执行逻辑优化中相关的数据结构有哪些

这篇文章主要介绍“PostgreSQL在执行逻辑优化中相关的数据结构有哪些”,在日常操作中,相信很多人在PostgreSQL在执行逻辑优化中相关的数据结构有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PostgreSQL在执行逻辑优化中相关的数据结构有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

PostgreSQL在执行逻辑优化中相关的数据结构包括RangeSubselect/Alias/RangeVar/ResTarget/ColumnRef.

一、数据结构

RangeSubselect
出现在FROM语句中的子查询


typedef struct RangeSubselect
{
  NodeTag   type;
  //是否有LATERAL?
  bool    lateral;    
  //未转换的子查询语句
  Node     *subquery;   
  //表别名和可选的列别名
  Alias    *alias;      
} RangeSubselect;

Alias
为RangeVar指定别名.别名可能同时重命名了表列.


typedef struct Alias
{
  NodeTag   type;
  //别名
  char     *aliasname;    
  //列别名链表
  List     *colnames;   
} Alias;

RangeVar
range variable,用于FROM语句中.


typedef struct RangeVar
{
  NodeTag   type;
  char     *catalogname;  
  char     *schemaname;   
  char     *relname;    
  bool    inh;      
  char    relpersistence; 
  Alias    *alias;      
  int     location;   
} RangeVar;

ResTarget
结果目标列(用于先前已转换的解析树的目标链表中)


typedef struct ResTarget
{
  NodeTag   type;
  //列名或NULL
  char     *name;     
  //子脚本,字段名称,'*'或NIL
  List     *indirection;  
  //需要计算或赋值的值表达式
  Node     *val;      
  //token的位置,-1表示未知
  int     location;   
} ResTarget;

ColumnRef
指定对列或整个元组的引用


typedef struct ColumnRef
{
  NodeTag   type;
  //字段名称(字符串值)链表或A_Star
  List     *fields;     
  //token位置
  int     location;   
} ColumnRef;

二、源码解读

N/A

三、跟踪分析

RangeSubselect/Alias

(gdb) p *(Node *)($stmt->fromClause->head.data->ptr_value)
$15 = {type = T_RangeSubselect} #实际类型是范围子查询RangeSubselect
(gdb) set $fromclause=(RangeSubselect *)($stmt->fromClause->head.data->ptr_value)
(gdb) p *$fromclause
$16 = {type = T_RangeSubselect, lateral = false, subquery = 0x1666c18, alias = 0x1666d40}
(gdb) p *($fromclause->subquery) #subquery,子查询是SelectStmt类型的节点
$17 = {type = T_SelectStmt}
(gdb) p *($fromclause->alias) #alias,别名,实际值是字符串ret
$18 = {type = T_Alias, aliasname = 0x1666d28 "ret", colnames = 0x0}

RangeVar

...
$43 = {type = T_RangeVar}
(gdb) p *(RangeVar *)((JoinExpr *)($joinexpr->larg))->larg
$44 = {type = T_RangeVar, catalogname = 0x0, schemaname = 0x0, relname = 0x1643380 "t_dwxx", inh = true, 
  relpersistence = 112 'p', alias = 0x0, location = 82}
...

ResTarget

...
(gdb) p *(Node *)($subquerylarg->targetList->head.data->ptr_value)
$26 = {type = T_ResTarget}
(gdb) set $subvar=(ResTarget *)($subquerylarg->targetList->head.data->ptr_value)
(gdb) p *$subvar 
{type = T_ResTarget, name = 0x0, indirection = 0x0, val = 0x1642c70, location = 23}
...

ColumnRef

...
(gdb) p *$restarget->val
$25 = {type = T_ColumnRef}
(gdb) p *(ColumnRef *)$restarget->val
$26 = {type = T_ColumnRef, fields = 0x1a47a08, location = 7}
(gdb) p *((ColumnRef *)$restarget->val)->fields
$27 = {type = T_List, length = 2, head = 0x1a47a88, tail = 0x1a479e8}
(gdb) p *(Node *)(((ColumnRef *)$restarget->val)->fields)->head.data->ptr_value
$32 = {type = T_String}
#fields链表的第1个元素是数据表,第2个元素是数据列
(gdb) p *(Value *)(((ColumnRef *)$restarget->val)->fields)->head.data->ptr_value
$37 = {type = T_String, val = {ival = 27556248, str = 0x1a47998 "t_dwxx"}}
(gdb) p *(Value *)(((ColumnRef *)$restarget->val)->fields)->tail.data->ptr_value
$38 = {type = T_String, val = {ival = 27556272, str = 0x1a479b0 "dwmc"}}
...

到此,关于“PostgreSQL在执行逻辑优化中相关的数据结构有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PostgreSQL在执行逻辑优化中相关的数据结构有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录