![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
文章平均质量分 72
紫无之紫
这个作者很懒,什么都没留下…
展开
-
pg 统计信息及索引cost 简介
数据采样数据统计。原创 2024-04-30 14:38:41 · 375 阅读 · 0 评论 -
lightdb-ignore_row_on_dupkey_index
LightDB 从23.4 开始支持oracle的 ignore_row_on_dupkey_index hint, 这个hint是用来忽略唯一键冲突的。类似与mysql的 insert ignore。语法如下:在LightDB中ignore_row_on_dupkey_index的效果等同于on conflict do nothing 子句。下面说明一下这个hint的注意点以及使用示例。原创 2023-11-27 16:14:09 · 170 阅读 · 0 评论 -
pg 创建函数选项介绍
如果它们访问临时表、客户端连接状态、游标、预备语句或者系统无法在并行模式中同步的本地后端状态(例如setseed只能在组领导者中执行,因为另一个进程所作的更改不会在领导者中被反映出来,再比如pg_backend_pid, random),它们应该被标为PARALLEL RESTRICTED。比如:currval。指定函数的估计执行代价,若返回一个集合,这就是每个被返回行的代价,对 C 语言和内部函数会指定为 1 ,对其他语言的函数则会指定为 100。给planner提供了解函数的支持函数,需要为c函数,原创 2023-08-21 10:20:25 · 203 阅读 · 0 评论 -
lightdb23.3 表名与包名不能重复
从 LightDB 23.3 版本开始表名和包名不能重复,与 oracle 一致。原先已已支持包名和schema名不能重复。原创 2023-08-11 14:33:53 · 110 阅读 · 0 评论 -
pg谓词下推分析(一)
jtnode 当前处理节点below_outer_join 当前节点位于上层的外关联的 nullable side 时, 设置为true(deconstruct_jointree 中调用时为false)。如 a left join (b join c) , (b join c) 为 nullable side, b 就在 (b join c) 中。qualscope 当前节点下所有涉及的表的rtindex集合。原创 2023-07-18 11:19:26 · 401 阅读 · 0 评论 -
pg float4与oracle的binary_float 比较
oracle 的binary_float, binary_double (二进制精度)与 pg 的 浮点数(二进制精度)都遵循IEEE Standard 754-1985 (IEEE754) ,oracle 中 float 实际为 NUMBER类型,是十进制浮点数。原创 2023-06-27 17:19:52 · 682 阅读 · 0 评论 -
pg 绑定变量源码解析
下面以callstmt 为例 说明一下绑定参数的执行流程(基于pg13)原创 2023-06-21 16:58:35 · 447 阅读 · 0 评论 -
LightDB支持INSERT ALL语法
转载自 https://blog.csdn.net/s_lisheng/article/details/130646539。Oracle中支持INSERT ALL语法,可进行多表插入与条件插入,对此,LightDB对该语法实现了兼容。转载 2023-06-16 11:00:00 · 52 阅读 · 0 评论 -
lightdb ecpg 支持匿名块绑定参数
作为输入输出参数,以上述代码为例,会把上述匿名执行块转为如下的形式,作为 prepare stmt 发送给数据库。作为 调用存储过程传入的参数, 绑定v_error_no作为$1, iReturnCode 作为 $2。的block 相当于存储过程的block, (int, int) 相当于存储过程的入参定义,首先是不支持oracle 匿名块, 然后是不支持匿名块中绑定参数(:v_error_no 形式)。LightDB 从 23.2 版本开始支持在 ecpg 中使用绑定参数的匿名执行块。原创 2023-06-13 14:05:50 · 873 阅读 · 0 评论 -
lightdb-x 支持的oracle视图统计
视图主要基于oracle 11g,对于不支持的字段返回NULL。具体支持哪些字段,及字段与oracle的区别请参考。USER_JOBS , DBA_JOBS_RUNNING 获取的是使用lt_cron插件创建的job的信息。USER前缀开头的视图查询的是当前schema 下的信息, 即search_path 中第一个有效的schema。ALL前缀开头的视图没有权限校验,查询的是数据库下的所有信息。同DBA前缀开头视图。原创 2023-05-11 14:00:00 · 380 阅读 · 0 评论 -
pg 提升子链接源码分析
pg 支持对any 类型(包括in, any, some)的子链接提升,把子链接中的查询提升到from中作为一个子查询与表构成semijoin。此子查询可以被 pull up subquery 流程继续提升。提升条件:子链接的查询中不能引用父查询中表的列属性 any (select * from t2 where )子链接的条件需要引用父查询中的表的列属性 t1.key1 = any子链接的条件引用的表需要符合要求available_rels,比如左连接,子链接的条件只能使用右表的字段才能提升。原创 2023-05-05 16:32:01 · 1166 阅读 · 0 评论 -
LightDB 支持 (+) 操作符来指定外连接
oracle (+) 操作符用于指定外连接,是 oracle 在 ANSI标准加入前就推出的,后面的版本支持 (+) 操作符只是为了向后兼容。oracle 不推荐使用 (+)建议使用from 子句中的outer join, 因为oracle (+) 具有一些限制。原创 2023-04-26 14:30:35 · 634 阅读 · 1 评论 -
lightdb/pg reload guc 参数机制
本文主要讲述调用pg_reload_conf 后,到guc被真正修改之间发送的故事。(基于pg13)pg_reload_conf 会发送SIGHUP到postmaster 进程。而postmaster 进程中 SIGHUP 信号的处理函数为 SIGHUP_handler(主要流程是先在本进程reload conf(ProcessConfigFile), 然后给其他子进程发送 SIGHUP 信号。下面讲一下 postgres (客户端连接进程)收到 SIGHUP 的处理。原创 2023-04-20 15:59:12 · 395 阅读 · 0 评论 -
pg编码相关问题梳理
lightdb/postgres编码相关问题。在使用Lightdb 过程中会涉及到多处的编码设置。下面分两种情况进行讨论,一种是通过ltsql/psql 交互式执行SQL, 一种是通过-f 选项执行SQL文件。原创 2023-04-18 14:07:09 · 1086 阅读 · 0 评论 -
lightdb-sql拦截
通过新增 lt_sql_inspect 模块的方式对 SQL 进行拦截,目前 lt_sql_inspect 通过实现 planner_hook 和 post_parse_analyze_hook 的方式(hook 是一种用来控制 lightdb 表现的方式)来对 SQL 进行拦截。对于查询语句,如果只涉及单表,并且没有where条件,且没有 limit ,没有offset, 那就会被拦截。原创 2023-02-17 15:46:26 · 418 阅读 · 0 评论 -
lightdb-pq_distribute hint
lightdb 并发 join 支持两种模式,一种是只有外表并发,一种则内外表都可以并发(只支持hash join)。inner_table: 指定 join 中的内表名outer_distribution:指定外表的模式inner_distribution:指定内表的模式;hash, hash。其中hash, hash只支持语法。none, broadcast: 表示外表并发,内表广播。原创 2023-02-08 14:53:47 · 408 阅读 · 0 评论 -
lightdb-no_unnest hint
Lightdb 从 23.1 版本开始支持 oracle 中的unnest/no_unnest hint。原创 2023-02-03 14:00:36 · 318 阅读 · 0 评论 -
lightdb_service.py - lightdb一键启停脚本
lightdb_service.py 用于对lightdb 服务进行简易的一键启停操作,包括高可用模式,分布式模式和单机模式。lightdb_service.py 基于python3开发。原创 2022-12-29 14:45:19 · 413 阅读 · 1 评论 -
lightdb22.4-分布式逻辑备份与恢复
在22.4 之前对于分布式进行逻辑备份只能通过对cn节点执行lt_dump 来备份所有数据,虽然有-j选项来进行并发备份, 但-j只支持在表间进行并发,表内不能进行并发。在22.4 通过lt_distribute_dump.py脚本可以支持对表内数据进行并发备份, 通过lt_distributed_restore.py脚本 支持对表内数据进行并发恢复。原创 2022-12-15 20:33:28 · 281 阅读 · 0 评论 -
lightdb-分布式物理备份脚本
lt_distributed_probackup.py 通过指定cn节点信息,可以实现对整个分布式集群的备份,在原集群异常时对原集群恢复直接恢复即可,恢复到新集群需要指定新的cn和dn信息。原创 2022-12-09 09:47:10 · 338 阅读 · 0 评论 -
lightdb22.4-新增优化器提示cardinality 和ordered_predicates
下面对这两个hint 进行介绍。原创 2022-11-18 15:50:06 · 347 阅读 · 0 评论 -
lightdb-归档日志清理优化(22.4)
在LightDB 22.4 版本我们对归档日志清理进行了优化。原创 2022-11-08 17:22:48 · 255 阅读 · 0 评论 -
lightdb-归档日志清理
lightdb 归档清理原创 2022-10-24 13:44:40 · 191 阅读 · 0 评论 -
Oracle 与LightDB alter table 语法对比(部分)
本文对oracle(21)和lightdb(22.3)中常用的一些alter table 语法进行比较, 包括修改字段属性, 修改约束,修改表为分区表等。原创 2022-10-13 17:02:42 · 288 阅读 · 0 评论 -
lightdb 创建自定义类型
creat type 语法如下)其中输入函数(INPUT)和输出函数(OUTPUT)是必须的,这两个函数决定了该类型的值如何表示及存储,输入函数把一个字符串(外部文本表示)转换为内部使用(内存存储)格式,输出函数则把内部表示转换为字符串(用户可见的外部表示)。RECEIVE/SEND 用来定义二进制输入输出,类同INPUT/OUTPUTTYPMOD_IN/TYPMOD_OUT 用于转换类型修饰符,在需要类型修饰符时需定义,如char(5) , 需要通过修饰符5来定义存储大小。原创 2022-10-12 17:09:27 · 321 阅读 · 0 评论 -
lightdb22.3-新增支持oracle语法(modify column&drop primary key)
【代码】lightdb22.3-新增支持oracle语法(modify column&drop primary key)原创 2022-09-21 15:22:01 · 336 阅读 · 0 评论 -
lightdb22.3特性预览-增强对oracle内置函数的兼容
在22.3版本 LightDB 新增/修改了如下函数以加强对 Oracle 的兼容。下面对这些函数进行简单描述,具体案例等参考正式发版后的官方文档。原创 2022-09-06 20:14:40 · 206 阅读 · 0 评论 -
lightdb22.3-oracle系统视图兼容增强
新增视图主要基于oracle 11g,对于不支持的字段返回NULL。[DBA/ALL/USER]_JOBS , DBA_JOBS_RUNNING 获取的是使用lt_cron插件创建的job的信息。目前不支持partition 相关的一些视图。user_xxx 类视图查询的是当前schema 下的信息, 即search_path 中第一个有效的schema。all_xxx 没有权限校验,查询的是数据库下的所有信息。...原创 2022-08-31 16:25:35 · 202 阅读 · 0 评论 -
lightdb22.3-oracle 内置包兼容增强
下面对新增的内置包和完善的内置包进行梳理记录。原创 2022-08-23 18:47:06 · 288 阅读 · 0 评论 -
lightdb22.3 - 集群启停脚本新特性
在 LightDB22.3 中启停脚本增加了对单节点的启停操作。而且从这个版本开始启停脚本不在需要在 root 用户下执行。只需要执行用户拥有sudo免密权限。而sudo免密权限是通过 installer 安装的一个前置条件。...原创 2022-08-08 17:26:33 · 83 阅读 · 0 评论 -
pg 函数匹配规则
在pg 的官方文档中,在类型转换一节下有对函数的匹配规则进行介绍。下面是我对其的梳理记录。原创 2022-08-04 14:57:33 · 623 阅读 · 0 评论 -
LightDB(pg) 通过DBeaver执行SQL发现SQL不能并行
最近遇到一个问题,在dbeaver上执行explainanalyze发现SQL使用到了并行,且执行时间为30多秒;而去掉explainanalyze实际执行时,发现用了50多秒,然后通过观察后端进程,发现没有并行进程在执行此SQL。通过网上查找资料及自己跟踪代码发现是由于如下的原因导致的。简单来说就是如果设置了fetchsize或者maxrows会导致不能并行。中也有此说明。...原创 2022-07-18 14:04:00 · 443 阅读 · 0 评论 -
全文检索原理及实现方式
根据http://lucene.apache.org/java/docs/index.html 定义: "Apache Lucene(TM) is a high-performance, full-featured text search engine library written entirely in Java. It is a technology suitable for nearly any application that requires转载 2022-07-04 10:27:22 · 882 阅读 · 0 评论 -
lightdb22.2-新增集群启停脚本
lightdb22.2 版本新增了集群启停脚本,脚本名为lightdb_service.py。使用python2.7开发。由于需要依赖installer安装后生成的json文件来获取集群信息,目前此脚本只能用于通过installer安装的数据库集群,且需要使用root用户执行(因为涉及keepalive的启停,需要root权限)。......原创 2022-06-27 19:30:19 · 181 阅读 · 0 评论 -
lightdb21.3-新增优化器提示no_merge
新增no_merge hint用来建议优化器不提升子查询,即子查询运行出结果集再和外层查询的其它结果集进行关联操作 。一般适用于子查询结果集很小等情况,如果此时提升子查询会导致查询变慢。具体用法如下:...原创 2022-06-24 20:01:10 · 169 阅读 · 0 评论 -
lightdb21.3-支持语句级hint
之前版本,优化器提示作用于整条SQL,从21.3版本开始,lightdb支持优化器提示只作用于当前查询块。规则如下:定义在SQL开头的优化器提示仍作用于整条SQL定义在select,delete,update,insert 后的优化器提示只作用于当前sql跨查询块使用需要结合qb_name新增支持qb_name 来对其他查询块的对象使用优化器提示。在查询块中使用 表示当前查询块的块名为xxx, 然后可以在其他查询块中引用以对此查询块中的对象生效。引用方式有两种:下面是具体的用例:参考文档官方原创 2022-06-24 19:59:23 · 100 阅读 · 0 评论 -
lightdb22.2-oracle模式下新增支持asciistr函数
lightdb22.2版本新增支持asciistr 函数,功能与oracle保持一致,用来转换字符串为asciistr格式。对于字符串中的ascii字符,不进行修改,对于其中的非ascii字符,转换为/xxxx格式,其中xxxx表示utf-16编码。具体用法及效果可看如下用例:...原创 2022-06-24 19:57:01 · 141 阅读 · 0 评论 -
lightdb22.2-增强对oracle hint的兼容(二)
LightDB22.2-增强对oracle hint 特性的兼容(二)1.逗号分隔2.大小写不敏感3.parallel hint 支持语句级4....原创 2022-06-07 15:33:48 · 113 阅读 · 0 评论 -
lightdb22.2-增强对oracle hint的兼容(一)
lightdb22.2-增强对 oracle 常用 hint 的兼容表访问方式 (table access)支持 oracle 的full建议优化器对表进行全表扫描获取数据, 与 lightdb 原先的 seqscan hint相同支持 oracle 的index建议优化器对表进通过索引获取数据,与 lightdb 原先的 indexscan hint 相同表关联方法(join method)lightdb 支持3种表的join算法,分别为:hashjoin、nestloop以及mergejo原创 2022-05-26 19:38:33 · 103 阅读 · 0 评论 -
pg 时间函数及与oracle,mysql 区别
pg CURRENT_TIMESTAMP, CURRENT_TIMESTAMP(n), LOCALTIMESTAMP, LOCALTIMESTAMP(n) 实现源码分析CURRENT_TIMESTAMP 包含时区, LOCALTIMESTAMP 不包含时区,但会受时区影响. 获取的都是事务开始的时间。下面对主要逻辑进行分析。获取时间通过如下函数获取带时区的时间,转为以2000年1月1日00:00:00为时间起点的秒数TimestampTzGetCurrentTimestamp(void){ T原创 2022-05-06 17:19:43 · 1294 阅读 · 0 评论