首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HAWQ技术解析(十) —— 过程语言

SQL函数可执行任意条数SQL语句。SQL函数,每条SQL语句必须以分号(;)分隔。SQL函数可以返回void或返回return语句指定类型数据。...图7          某些场景下,函数返回结果依赖于调用它参数。为了支持这种情况,表函数可以被声明为返回伪类型(pseudotype)记录。...图9 六、多态类型         PostgreSQLanyelement、anyarray、anynonarray和anyenum四种伪类型被称为多态类型。使用这些类型声明函数叫做多态函数。...如果一个函数返回值被声明为多态类型,那么它参数至少应该有一个是多态,并且参数与返回结果实际数据类型必须匹配。...';         说明: 变量不能定义类型,但可以通过参数进行引用,如上面函数l_i v%type。

4.2K50

进阶数据库系列(十一):PostgreSQL 存储过程

一个函数完整文本必须是一个块。存储过程语法如上所示。 一个块每一个声明和每一个语句都由一个分号终止。 所有的关键词都是大小写无关。...collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ]; 自定义函数声明一个变量,并给这个变量赋值时候可以用这个方法...declare a constant integer default 32; a :=1; -- 报错2 -- 声明变量时候选择了not null,就应该在声明赋值,否则哪怕后面赋值还是会报错...返回setof sometype SETOF修饰符表示该函数将返回一个项集合而不是一个单一项。...当被返回setof sometype时,函数最后一个查询执行完后输出每一行都会被作为结果集一个元素返回。 sometype可以是某一张已经存在表,也可以是record。也可以是某个字段类型

1.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

Postgresql源码(97)returns setof函数分析(oracle管道函数pipelined)

0 总结 【功能】 Oraclereturn pipelined管道函数可以使一次返回集合类型,变为 逐条返回pipe row(集合一条)给SQL层,大大减少内存使用。...:管道函数是什么,应用于什么场景 oracle支持pipelined函数,可以函数定义时指定RETURN 集合类型 PIPELINED 来说明当前函数是管道函数。...) ); PG,普通return语句也是需要一次性返回数据,但PG应该是参考ORACLE实现了return next功能,也希望逐条返回数据(PG没有集合类型,已普通类型为例): drop...所以PGreturn setof函数并不能起到降低内存使用效果。下面来分析具体过程。...数据类型datatype:foo 数据类型oidrectypeid:17117->foo if (rec->erh == NULL) instantiate_empty_record_variable

89140

PostgreSQL 使用递归SQL 找出数据库对象之间依赖关系 - 例如视图依赖

背景: 在数据库对象与对象之间存在一定依赖关系,例如继承表之间依赖,视图与基表依赖,主外键依赖,序列依赖等等。...删除对象时,数据库也会先检测依赖,如果有依赖,会报错,需要使用cascade删除。 另外一方面,如果需要重建表,使用重命名方式是有一定风险,例如依赖关系没有迁移,仅仅迁移了表是不够。...10; 创建一个解析函数,得到依赖OID -- 注意下search_path,下面建function都是只能在指定search_path下访问到。...\d+)', 'g')) from pg_rewrite where ev_class = $1 union select unnest(regexp_matches(ev_action...get_dep_oids('sm1.v1'::regclass); get_dep_oids ────────────── {24971} (1 row) 再创建一个函数,递归得到依赖对象。

1.3K40

PostgreSQL函数|内置函数之GENERATE_SERIES详解(一)

1关于内置函数对于SQL内置函数,应该不会太陌生。所谓内置,就是安装服务软件后就已存在函数,它对应应该是UDF(用户自定义函数)。...SQL,有许多内置函数(或称为系统函数、内建函数)可用于处理数据。这些函数允许你执行复杂计算、转换数据类型、处理字符串和日期等。...( start bigint, stop bigint [, step bigint ] ) → setof bigintgenerate_series ( start numeric, stop numeric...interval [, timezone text ] ) → setof timestamp with time zone【参数】从上面的函数结构,可以看到generate_series这个函数支持三种类型输入参数...类型,最终导致 PostgreSQL 12版本无法执行。

17320

Postgresql源码(49)plpgsql函数编译执行流程分析总结

前文 《Postgresql源码(41)plpgsql函数编译执行流程分析》 《Postgresql源码(46)plpgsql变量类型及对应关系》 《Postgresql源码(49)plpgsql...触发器等其他函数执行过程大同小异,核心流程基本不变,就是多了几个默认工具变量。相比《Postgresql源码(46)plpgsql变量类型及对应关系》这篇总结更清晰简单。...; select sn(2, 3); 整体流程理解总结 src/pl/plpgsql下是plpgsql语言功能模块。...(函数代码整理包装放到pg_proc系统表里面),pl要经历两大步骤:编译、执行 【pl编译】过程会重新把函数代码从系统表取出,用pl自己pl_gram.y解析,识别语法结构各部分,包装成语法块...【pl执行】执行前会给相关变量赋值,执行时会for循环遍历语法块链表,根据语法块类型走不同分支;执行可能经常会递归进入语法块,因为大部分语法结构可以互相包含,比如函数循环结构包含判断。

1.1K20

Postgresql源码(50)语法解析时关键字判定原理(函数名不能使用关键字为例)

; 从下面这里开始有问题了,函数名normalize被解析关键字了,base_yylex返回是NORMALIZE,如果是普通函数名应该返回IDENT。...core_yylex需要返回它遇到标识符类型并将其值存储yylval,这些标识符gram.y定义: gram.y %token ABORT_P ABSOLUTE_P ACCESS...这些标识符主要是给lex使用lex匹配到正则规则时,返回其中一个token。...col_name_keyword:可用于列名、表名,但不能用于函数名。 type_func_name_keyword:可用于函数名、类型名。...增加方法:先确定新增关键字会不会造成语法冲突歧义等,加到上面5个list,然后根据能否用于表名、列名、as等场景,kwlist增加即可。

73830

Greenplum对表批量授权

背景   DBA管理数据仓库时候,往往会创建多个帐号,每个帐号有不同用途。因此这里就有不同帐号间表授权需求。   ...setof text as $$ declare r record ; grantstmt text; begin for r in select * from pg_class...;   简单解释一下以上代码,该函数接受2个参数,schema text : 需要授权schema名称,usr text : 需要授权role名称,然后代码会遍历参数schema下所有表,轮询去做授权操作...运行以上代码,就可以使用如下语法完成对某个schema下所有表授权 select grant_on_all_tables('schema_name','user_name'); 注意 Snova函数可见性是数据库内...,因此如果要在其它数据库使用该函数,还需要在该数据库内运行上述代码 该函数只会对当前schema下表进行授权,授权后创建表还需要再次进行操作

2.8K82

Postgresql RECORD与%ROWTYPE类型

1 实例分析 ROWTYPE Postgresql使用plpgsql定义函数时,支持定义行类型,即可以完全继承表行定义: row1 table1%ROWTYPE; row2 table2%ROWTYPE...RECORD plpgsql中支持另一种行类型:record,这种类型定义时不必指定具体类型: rec1 record; rec2 record; 使用时,record内部结构由赋值时指定...,PG给行类型赋值只有两种方式: SELECT into row1 SELECT into rec1 FOR row1 IN SELECT * FROM table1 WHERE c3 = 1; FOR...rec1 IN SELECT * FROM table1 WHERE c3 = 1; record行结构与结果集保持一致,也就是按照 查询结果列名(或列名as 别名)来定义record具体字段名...record保存行数据 都是用PLpgSQL_recfield记录字段名 和 字段对应数据expand record位置 2.1 ROWTYPE 表结构:create table tf1(c1

77920

MogDB大对象LargeObject存取测试

ERROR: requested length too large 03 测试lo_export函数导出数据表数据到文件 postgres=# select lo_export(test_lo.info...(lo类型字段在用户表里面只存储一个oid引用指针,并不实际存数据) postgres=# select * from test_lo; id | info ----+------- 1 |...16392 (1 row) 实际数据使用多条bytea记录存储pg_largeobject表,可以根据oid查询统计字段大小。...ps.close(); fos.close(); conn.commit(); conn.close(); } Jdbc-Java Large Object示例参考:(复制链接至浏览器浏览...PGSQL业务迁移及优化,Oracle到PostgreSQL迁移升级,异构数据库整合;作为墨天轮PostgreSQL实践专栏作者,热衷于PostgreSQL实践技术分享,自己岗位积极推广PostgreSQL

40020

Kotlin | 2.Kotlin基础

声明函数、变量、类、枚举以及类型 Kotlin控制结构 智能转换 抛出和处理异常 函数学习 函数和变量 函数 /** * 求最大值 * if是表达式而不是语句,表达式有值...* 自定义访问器 * 也可以使用函数返回,实现和性能没有差别,唯一差别是可读性 * 通常来说: * 如果描述是类特征(属性),应该把它声明属性。.../** * 3.2 使用 if 层叠对表达式求值 * Kotlin ,如果你检查过一个变量是某种类型,后面就不再需要转换它,可以就把它当作你检查过类型使用。...检查过变量具有某种类型之后不必显示地转换它类型:编译器使用智能转换字段帮你完成。...Kotlin异常处理和java非常相似,除了Kotlin不要求你声明函数可以抛出异常。

71520
领券