zl程序教程

PostgreSQL Pl/SQL

  • Postgresql源码(80)plpgsql中异常处理编译与执行流程分析(sqlstate)

    Postgresql源码(80)plpgsql中异常处理编译与执行流程分析(sqlstate)

    相关 《Postgresql中plpgsql异常处理方法与实例(RAISE EXCEPTION)》 《Postgresql源码(80)plpgsql中异常处理编译与执行流程分析(sqlstate)》 0 总结do $g$ BEGIN RAISE division_by_zero; EXCEPTION WHEN division_by_zero THEN rais

    日期 2023-06-12 10:48:40     
  • Postgresql源码(77)plpgsql中参数传递和赋值

    Postgresql源码(77)plpgsql中参数传递和赋值

    0 速查 call procedure(...);的入口函数ExecuteCallStmt:入参为CallStmt,函数中将CallStmt中的参数列表(可能是值、可能是表达式)赋值给fcinfo,然后通过PG函数框架进入plpgsql堆栈中,给对应入参的Dataums赋值。(下一篇介绍CallStmt中的args在哪里构造) CallStmt->funccall->args:【有

    日期 2023-06-12 10:48:40     
  • Postgresql源码(78)plpgsql中调用call proc()时的参数传递和赋值(pl参数)

    Postgresql源码(78)plpgsql中调用call proc()时的参数传递和赋值(pl参数)

    《Postgresql源码(77)plpgsql中参数传递和赋值(pl参数)》 《Postgresql源码(78)plpgsql中调用call proc()时的参数传递和赋值(pl参数)》 总结调用者在exec_stmt_call中拼接ParamListInfo传给SPI去执行call xxxx命令。ParamListInfo记录了PL的一些回调函数,在SPI会走到:ExecuteCallS

    日期 2023-06-12 10:48:40     
  • Postgresql源码(79)plpgsql中多层调用时参数传递关键点分析(pl参数)

    Postgresql源码(79)plpgsql中多层调用时参数传递关键点分析(pl参数)

    相关 《Postgresql源码(77)plpgsql中参数传递和赋值(pl参数)》 《Postgresql源码(78)plpgsql中调用call proc()时的参数传递和赋值(pl参数)》 《Postgresql源码(79)plpgsql中多层调用时参数传递关键点分析(pl参数)》 总结本篇回答下面问题问题一:外层ExecuteCallStmt用什么构造参数列表fcinfo->

    日期 2023-06-12 10:48:40     
  • Postgresql源码(81)plpgsql中如何给占位符赋值(SPI进入执行器取值流程初步分析)

    Postgresql源码(81)plpgsql中如何给占位符赋值(SPI进入执行器取值流程初步分析)

    相关: 《Postgresql源码(56)可扩展类型分析ExpandedObject/ExpandedRecord》 本文探索raise notice 'sqlstate: %', sqlstate;时,%的值是怎么拿到的。0 总结 plpgsql中通过SPI调用server语法解析时不需要加select,例如src="sqlstate"就可以直接跑,

    日期 2023-06-12 10:48:40     
  • Postgresql中plpgsql异常处理方法与实例(RAISE EXCEPTION)

    Postgresql中plpgsql异常处理方法与实例(RAISE EXCEPTION)

    Postgresql中有关plpgsql异常处理的一切(RAISE EXCEPTION)1 抛出异常主要列出实例,语法比较简单语法现在PL中支持使用RAISE语法抛出异常,具体支持下面五种语法:1 RAISE [ level ] 'format' [, expression [, ... ]] [ USING option = expression [, ... ] ]; 2

    日期 2023-06-12 10:48:40     
  • Postgresql使用Plpgsql编译SELECT INTO细节

    Postgresql使用Plpgsql编译SELECT INTO细节

    select 列名1,列名2 into 变量1,变量2 这类调用形式的代码执行细节分析记录。总结速查lex在解析到into后,会进入函数把into后面的字符全部拿出来处理。lex在看到变量1、变量2后,会去ns里面搜索名字,如果搜到了,返回token=T_DATUM,附带PLwdatum数据,指向plpgsql_Datums数组中的同名变量结构。yacc在拿到T_DATUM后开始处理PLwdatu

    日期 2023-06-12 10:48:40     
  • Oracle与Postgresql在PLSQL内事务回滚的重大差异

    Oracle与Postgresql在PLSQL内事务回滚的重大差异

    相关 《Oracle/Mysql迁移到Postgresql事务回滚行为差异及改造方法》 《Oracle与Postgresql在PLSQL内事务回滚的重大差异》 这个差异点非常容易造成Oracle迁移到PG后业务逻辑出现重大差异。1 总结先放总结Oracle:在PLSQL内如果语句执行失败,进入异常处理程序后,PL程序正常退出。那么在执行失败语句前面的SQL不会回滚,执行结果都正常提交了。P

    日期 2023-06-12 10:48:40     
  • Postgresql中plpgsql事务管理实例(commit/rollback)

    Postgresql中plpgsql事务管理实例(commit/rollback)

    总结commit与rollback都会主动把之前的事务结束掉,然后再自动开启新事务。知道这一点,后面所有用例的行为就都很好理解了。commit与rollback会主动关闭游标,例外是for循环中的commit/rollback会把游标转换为hold状态,循环内部可以一直保持open状态,直到循环结束。commit and chain与rollback and chain语法会使用与前一个事务相同的

    日期 2023-06-12 10:48:40     
  • Postgresql中plpgsql数组的赋值与取值分析

    Postgresql中plpgsql数组的赋值与取值分析

    总结数组赋值如果是默认值数组 编译时只组装expr出来记录ARRAY[1,2,3,4,5]在执行赋默认值时走执行器把expr变成value记录到datum中 执行时语义解析阶段就会把只拼出来:transformArrayExpr将ARRAY[1,2,3,4,5]转换为ArrayExpr执行时ExecEvalExpr阶段只当做Const把Value赋值给Datum即可。如果是传入数组

    日期 2023-06-12 10:48:40     
  • Postgresql中不支持事务块中调用plpgsql回滚(多层exception、事务块有检查点)

    Postgresql中不支持事务块中调用plpgsql回滚(多层exception、事务块有检查点)

    前言Postgresql使用子事务来实现EXCEPTION的功能,即在进入EXCEPTION的存储过程前,会自动起一个子事务,如果发生了异常,则自动回滚子事务,达成EXCEPTION的效果。那么如果在事务块内本身就带子事务(SAVEPOINT),在调用有EXCEPTION的存储过程,处理流程会有一些复杂。目前下面代码中的rollback会直接报错不支持,但报错被exception掩盖了,所以后续的

    日期 2023-06-12 10:48:40     
  • Postgresql源码(103)PLpg/SQL中的表达式ExprContext

    Postgresql源码(103)PLpg/SQL中的表达式ExprContext

    0 总结(可以最后看)PLpgSQL_execstate中包含的两个结构:EState *simple_eval_estate、ExprContext *eval_econtext丢给SQL引擎执行时一般需要ExprContext就够了,但是ExprContext会依赖EState结构才能创建出来,所以PL在执行时,plpgsql_exec_function函数需要传入EState结构,方便后面E

    日期 2023-06-12 10:48:40     
  • Postgresql 存储过程(plpgsql)两层for循环的操作

    Postgresql 存储过程(plpgsql)两层for循环的操作

    项目中遇到测试,需要造4500数据,而且需要分部门和日期,一个部门一天30条数据,剩下的铺垫数据可以一个部门一天100w左右数据,这里,每次变换部门,日期,需要操作至少300次,想到用存储过程写一个函数进行 首先,了解存储过程的语法: CREATE [ OR REPLACE ] FUNCTION name( [ [argmode] [argname]argtype[ { DEFAULT

    日期 2023-06-12 10:48:40     
  • PostgreSQL教程(二十):PL/pgSQL过程语言

    PostgreSQL教程(二十):PL/pgSQL过程语言

    一、概述:   PL/pgSQL函数在第一次被调用时,其函数内的源代码(文本)将被解析为二进制指令树,但是函数内的表达式和SQL命令只有在首次用到它们的时候,PL/pgSQL解释器才会为其创建一个准备好的执行规划,随后对该表达式或SQL命令的访问都将使用该规划。如果在一个条件语句中,有部分SQL命令或表达式没有被用到,那么PL/pgSQL解释器在本次调用中将不会为其准备执行规划,这样

    日期 2023-06-12 10:48:40     
  • PostgreSQL HV00N: fdw_unable_to_establish_connectionP0000 plpgsql_error  报错 故障修复 远程处理

    PostgreSQL HV00N: fdw_unable_to_establish_connectionP0000 plpgsql_error 报错 故障修复 远程处理

    PostgreSQL HV00N: fdw_unable_to_establish_connectionP0000 plpgsql_error 报错 故障修复 远程处理 错误说明 fdw_unable_to_establish_connectionP0000 plpgsql_error是PostgreSQL中外部服务器访问时基本的错误,这种错误代表数据库无法建立和外部服务器的连接。 它表明

    日期 2023-06-12 10:48:40     
  • PostgreSQL Oracle 兼容性之 - PL/SQL FORALL, BULK COLLECT

    PostgreSQL Oracle 兼容性之 - PL/SQL FORALL, BULK COLLECT

    Oracle PL/SQL 开发的童鞋,一定对O家的bulk批量处理的性能很是赞赏吧。 但是PostgreSQL用户请不要垂涎,作为学院派和工业界的一颗璀璨明珠。 开源数据库PostgreSQL,也有对应的批量处理策略哦,而且看起来性能完全不输Oracle。 下面是一组LOOP和BULK的性能测试数据 一起来耍耍吧,先看看Oracle怎么耍的。 Oracle PL/SQL FORALL, B

    日期 2023-06-12 10:48:40     
  • PostgreSQL Oracle 兼容性之 - PL/SQL FORALL, BULK COLLECT

    PostgreSQL Oracle 兼容性之 - PL/SQL FORALL, BULK COLLECT

    Oracle PL/SQL 开发的童鞋,一定对O家的bulk批量处理的性能很是赞赏吧。 但是PostgreSQL用户请不要垂涎,作为学院派和工业界的一颗璀璨明珠。 开源数据库PostgreSQL,也有对应的批量处理策略哦,而且看起来性能完全不输Oracle。 下面是一组LOOP和BULK的性能测试数据 一起来耍耍吧,先看看Oracle怎么耍的。 Oracle PL/SQL FORALL, B

    日期 2023-06-12 10:48:40     
  • PostgreSQL Oracle 兼容性 之 - PL/SQL record, table类型定义

    PostgreSQL Oracle 兼容性 之 - PL/SQL record, table类型定义

    Oracle PL/SQL是非常强大的一门SQL编程语言,许多Oracle用户也使用它来处理一些要求延迟低且数据一致性或可靠性要求很高的业务逻辑。 PostgreSQL也有一门非常高级的内置SQL编程语言,plpgsql。与Oracle PL/SQL语法极其类似,但是还是有一些不一样的地方。 (PS:除了plpgsql,PostgreSQL还支持C,java,python,perl等流行的语言

    日期 2023-06-12 10:48:40     
  • PostgreSQL的学习心得和知识总结(一百二十二)|深入理解PostgreSQL数据库PL/pgSQL过程语言 特殊变量FOUND 的使用场景和实现原理

    PostgreSQL的学习心得和知识总结(一百二十二)|深入理解PostgreSQL数据库PL/pgSQL过程语言 特殊变量FOUND 的使用场景和实现原理

    目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与

    日期 2023-06-12 10:48:40     
  • PostgreSQL的学习心得和知识总结(一百二十一)|词法级自上而下完美实现Oracle数据库PL/SQL过程语言的 for in list 的实现方案

    PostgreSQL的学习心得和知识总结(一百二十一)|词法级自上而下完美实现Oracle数据库PL/SQL过程语言的 for in list 的实现方案

    目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、EDB Postgres Advanced Server User Guides,点击前往 2、Ant

    日期 2023-06-12 10:48:40     
  • PostgreSQL 12: 新增 log_statement_sample_rate 参数控制数据库日志中慢SQL百分比

    PostgreSQL 12: 新增 log_statement_sample_rate 参数控制数据库日志中慢SQL百分比

    转: https://postgres.fun/20190717141000.html?spm=a2c6h.12873639.article-detail.7.303f441aQDqFc3

    日期 2023-06-12 10:48:40     
  • 《PostgreSQL服务器编程》一一第3章  第一个PL/pgSQL函数

    《PostgreSQL服务器编程》一一第3章 第一个PL/pgSQL函数

    第3章 第一个PL/pgSQL函数 函数是扩展PostgreSQL最基本的构建模块。函数可以以参数的形式输入,也可以以输出参数或返回值的形式输出。PostgreSQL自身提供了许多函数,如常见的数学函数平方根或者绝对值等。你可以通过访问以下链接,获取完整的现有函数列表:http://www.postgresql.org/docs/current/static/functions.html。与内置

    日期 2023-06-12 10:48:40     
  • 《PostgreSQL服务器编程》一一3.2 PL/pgSQL函数的结构

    《PostgreSQL服务器编程》一一3.2 PL/pgSQL函数的结构

    本节书摘来自华章计算机《PostgreSQL服务器编程》一书中的第3章,第3.2节,作者:(美)Hannu Krosing, Jim Mlodgenski, Kirk Roybal 著,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 3.2 PL/pgSQL函数的结构 如果我们想运行一个PL/pgSQL函数,实际上并不需要太多元素。以下就是一个非常简单的例子: 前面这个函数显示了

    日期 2023-06-12 10:48:40     
  • [已解决]PostgreSQL报错:cannot begin/end transactions in PL/pgSQL解决方法

    [已解决]PostgreSQL报错:cannot begin/end transactions in PL/pgSQL解决方法

    PostgreSQL报错:cannot begin/end transactions in PL/pgSQL解决方法 出现此问题一般都是代码格式错误,或者代码块中出现了PostgreSQL中不应该出现的语法,语法错误。 ERROR: cannot begin/end transactions in PL/pgSQL HINT: Use a BEGIN block with an EXCEPTIO

    日期 2023-06-12 10:48:40     
  • [postgresql]sqlalchemy.exc.NoSuchModuleError: Can‘t load plugin: sqlalchemy.dialects:postgres.psycop

    [postgresql]sqlalchemy.exc.NoSuchModuleError: Can‘t load plugin: sqlalchemy.dialects:postgres.psycop

    python连接postgresql数据库的时候报错: sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects

    日期 2023-06-12 10:48:40