首页 > 其他分享 >ltgtt_create_temp_table 实现逻辑分析

ltgtt_create_temp_table 实现逻辑分析

时间:2023-06-25 21:01:53浏览次数:38  
标签:ltgtt CreateStmt 函数 temp TableLikeClause create foo schema

本文主要分析 lightdb 全局临时表实现时使用到的函数 ltgtt_create_temp_table.

  1. 通过 makeNode 函数创建 TableLikeClauseCreateStmt.
    create table lt_gtt_schema_123456_6.g_foo (like public.g_foo);
    
    TableLikeClause 对应上面的 (like public.g_foo); CreateStmt 对应上面整个 sql 语句。
  2. 创建上面的 schema 名字并赋权。类似执行:
    create schema lt_gtt_schema_123456_6;
    GRANT ALL ON SCHEMA lt_gtt_schema_123456_6 TO public;
    
    上面的两条 sql 语句,在 lightdb/postgresql 内部,可以通过函数 NamespaceCreateProcessUtility 函数实现。这两个函数分别在 ltgtt_create_user_temp_schema 和 ltgtt_grant_user_temp_schema 中被调用。
  3. 关联一些数据结构字段
    lt_gtt_schema_123456_6.g_foo 用一个 RangeVar 结构体变量 a 记录;
    public.g_foo 用另一个 RangeVar 结构体变量 b 记录;
    like public.g_fooTableLikeClause.relation = b 记录;
    将 a 变量绑定到 CreateStmt 的 relation 字段上;
    将 TableLikeClause 变量绑定到 CreateStmt 的 tableElts 字段上;
    将 CreateStmt->relation->relpersistence 的值设置为 RELPERSISTENCE_UNLOGGED.
    等等。。。
  4. 接下来,代码中还使用了 transformCreateStmt 处理 CreateStmt. 该函数待以后研究。
  5. 遍历第 4 步生成的一组 CreateStmt,对于每一个 CreateStmt,根据创建类型调用 PostgreSQL 内部不同的函数处理。
    • 如果是 create table语句,就调用 DefineRelation 建表;
    • 如果是 create index 语句,就调用 DefineIndex 建索引;
    • 如果是 TableLikeClause,则调用 expandTableLikeClause 获取更多的 CreateStmt
    • ...

第 4, 5 步骤中涉及到的更底层的 PostgreSQL 的函数,如:transformCreateStmt, DefineRelation 函数将在后续文章介绍。

标签:ltgtt,CreateStmt,函数,temp,TableLikeClause,create,foo,schema
From: https://www.cnblogs.com/lddcool/p/17503943.html

相关文章

  • create-react-app 除了NODE_ENV如何区分环境变量
    比如webpack打包的时候,可能要打包到测试环境或者生产环境,但是这时候NODE_ENV的值都是production,这个时候如何区分呢。答案是:cross-env和webpack.DefinePlugin1.定义环境变量到编译环境:测试环境: cross-envNODE_STAGE=testnpmrunbuild预上线: cross-envNODE_STAGE=s......
  • Ubuntu提示【Authentication is required to create a color profile/managed device
    1.安装vimaptinstallvim-y2.修改文件 vim/etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla3.粘贴以下内容[AllowColordallUsers]Identity=unix-user:*Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-......
  • C:\Windows\Temp 目录是 Windows 操作系统中用于存储临时文件的默认目录。在这个目
    C:\Windows\Temp目录是Windows操作系统中用于存储临时文件的默认目录。在这个目录下,系统和应用程序可能会创建、存储和临时使用各种文件。临时文件通常是在程序运行期间产生的,用于存储临时数据、缓存数据或执行特定任务。它们可以包括但不限于以下类型的文件:安装程序临时文件......
  • create build make generate 的区别
    在英语中,create、build、make、generate都可以表示“创造”或“制造”的意思,但它们的用法略有不同。其中,create与make的语意范围有相当的重叠,两者都可用来表示“从无到有”的“创造”或“制造”,但create更强调创造出新事物的过程,而make更强调制造出实用的东西。build则更......
  • python: How to Create a Python Package
    上篇博文的两个类文件,拖着一个创建好的包名Model中,有些代码会自己生成变化"""StudentScoreInfo.py学生成绩类date2023-06-16edit:GeovinDu,geovindu,涂聚文ide:PyCharm2023.1python11"""importdatetimeimportsysimportosclassStudentScore(object):......
  • OpenAI.ChatCompletion.create 接口参数说明
    引言:对于接口,不了解参数含义,就不知道它能咋用?而了解参数的含义最好有例子,基于这个认知,整理了OpenAI几个主要API的接口参数说明。OpenAI的ChatCompletion和Completion都是自然语言生成模型的接口,但它们的用途和应用场景略有不同。ChatCompletionCompletion区别专为生成对话和聊天场......
  • openai.Completion.create 接口参数说明
    引言:对于接口,不了解参数含义,就不知道它能咋用?而了解参数的含义最好有例子,基于这个认知,整理了OpenAI几个主要API的接口参数说明。OpenAI的completions接口是一种自然语言处理API,可用于各种文本生成任务,例如:文本摘要:给定一篇文章,生成一个简短的摘要。语言翻译:将一种语言的文本翻译成......
  • ant design vue的customRender()方法中使用$createElement提示undefined
    antdesignvue的customRender()方法中使用$createElement提示undefined报错信息如下:TypeError:Cannotreadpropertiesofundefined(reading'$createElement')原因:如果index.vue文件中是从另一个columns.js的文件中引用的列配置,在columns.js文件中的customRender()方法中使......
  • json中omitempty字段的使用
    总结1.omitempty是省略的意思2.json中字段若有omitempty标记,则这个字段为空时,json序列化为string时不会包含该字段3.json中字段若没有omitempty标记,则这个字段为空时,json序列化为string时会包含该字段看代码packagemainimport( "encoding/json" "fmt")//学生信息......
  • systemPath 打包问题
    systemPath打包问题<systemPath><systemPath/>标签的作用是导入外部的jar包。 某次项目中在使用<systemPath>标签导入jar包,该项目本地跑的好好的,但是当打包到线上的时候,出现了找不到该jar包下的某个类的报错。 经过查询,发现使用<systemPath>标签打包的话,需要在<plugin>中......