Highgo(PostgreSQL系)ERROR: current transaction is aborted, commands ignored until end of transaction block

PostgreSQL 和 Oracle 在处理事务内 SQL 错误时的行为确实存在根本性的差异, 最近有个客户的应用系统从oracle迁移到Highgo(base on postgresql)后, 以过去的oracle开发习惯会有些不适应的地方,像在事务中遇到“ERROR: current transaction is aborted, commands ignored until end of transaction block”错误后,后续所有SQL会执行失败。

 PostgreSQL 集群“脑裂”(Split-Brain) 

在 PostgreSQL 集群中,“脑裂”(Split-Brain)是一种极其危险的故障场景,指集群中的两个或多个节点因通信中断,都误认为自己是唯一的主库,并同时接受写入操作,导致数据分叉和不一致。

一旦发生脑裂,原主库的数据状态会与新主库产生分歧,形成一条独立的时间线。这使得原主库无法简单地作为备库重新加入集群,因为它的 WAL 日志序列与新主库不再连续,直接加入会引发复制冲突。

Highgo瀚高数据库PL/SQL 中增加commit注意事项

在我之前的blog中有记录,从oracle迁移到基于postgresql的数据时的需要注意的地方,在那篇有记录select 会堵塞truncate, truncate又会堵塞所有的现象,有时truncate是在存储过程中从oracle迁移而来,在oracle中truncate是DDL,会触发隐式提交,但PostgreSQL的事务更符合我们对事务的理解,DDL并不会隐士提交,那如何实现本篇演示一下。

Kingbase 的密码有效期插件identity_pwdexp

数据安全已成为企业生命线。作为国产数据库的金科金仓(KingbaseES)提供了一系列强大的安全机制来保障数据资产。其中,密码有效期管理是防止因长期未更换密码而导致的安全隐患的重要手段。

今天,我们将深入探讨 KingbaseES v9 中用于实现这一功能的核心插件——identity_pwdexp.

Highgo Table Index Corruption:failed to re-find parent key & new index tuple() overlaps with invalid duplicate tuple

最近在某客户的生产数据库中发现了一些日志损坏的报错,数据库是瀚高Highgo v9(base on postgresql 14), 这是postgresql中的已知问题,主要原因为index 索引损坏,且在线创建时可能也会出现的错误。 ERROR: failed to re-find parent key in index for “%TABLE” deletion target page

记录一个openguass(mogdb)checkpoint不推进的问题(续)

前几天《记录一个openguass(mogdb)checkpoint不推进的问题》写了一个问题,最近几天一直在尝试解决,在opengauss本人还不是专家,所以处理起来还是有一些心得,使用vacuum full和pg_repack对表重组,及检查relfilenode所属对象及如何检查是否是孤儿文件

记录一个openguass(mogdb)checkpoint不推进的问题

最近在基于opengauss的mogdb v508上遇到了一个备库 流复制(Streaming Replication)环境中,备机(standby)的 restart point 无法推进,停留在1个月前的一天,该库并未重启或断电,只是在前一晚有对库里大量表做DDL,日志告警Waring: coluld not record restart point at 6F04/98156BB8 because ther are unresolved references to invalid pages

测试主流数据库允许同一列(column)上创建重复索引?

之前在《有哪些技术可以减少PostgreSQL/openGauss数据库的存储空间?》记录过,在PG系的数据库上是支持同一列上创建多个索引,这种既浪费存储又增加了更新列时的额外的写代价,日常巡检需要即使发现并清理,下面再测试oracle,mysql(goldendb等),Gaussdb(opengauss系),Kingbase(Postgresql系),oceanbase,达梦,崖山的情况。

Oracle优化器outer join to inner不如YashanDB

Oracle数据库优化器经过数十年的发展,已经具备了相当成熟的自动查询转换能力。无论是面对编写“欠佳”的SQL语句,还是原本规范但在执行时存在更优路径的SQL,优化器通常都能将其等价转换为较优或最优的执行方案,然而最近遇到一个场景却恰恰相反:Oracle优化器在该情况下存在一定的缺陷,而国产数据库YashanDB的表现却超出了预期。

Highgo在重建流复制备库时会自动清理主库的物理复制槽?

近期在一个国产化数据库highgoDB的数据库环境,一主三从架构,主库的归档产生的较为频繁,且主库的参数关于wal的保留时间配置(wal_keep_size)也偏低, 后来因为备库有重建需求,在重建时发现主库的WAL日志缺失了,重建前也并未手动清理对应的物理槽。难道HighgoDB可以自动清理?

Highgo oracle兼容模式的国产库copy force_null

最近在一个从oracle到基于postgresql的国产数据库项目上,遇到使用copy加载到数据库中的表字段是空值数据无法过滤,因为在oracle中的\0x00、NULL、”(空值) 与postgresql中不同,所以在像瀚高、kingbase等PG系的数据库,oracle兼容模式下对于‘’空值的处理要格外注意,下面简单的记录。

索引key长度限制Oracle、MySQL、PostgreSQL

近期在推进一个从 Oracle 迁移至 PostgreSQL 的项目时,我们遇到部分在 Oracle 中运行正常的索引无法在 PostgreSQL 中创建,系统报错:ERROR: index row size X exceeds maximum Y for index “index_name”。

经分析,这源于不同数据库对索引键(Index Key)长度的上限设计存在差异。为规避此类问题并助力迁移规划,我们特此整理了 Oracle, MySQL, PostgreSQL 三大主流数据库的索引键长度限制。

Highgo数据库模拟deadlock

Highgo数据库实际是Postgresql内核,这篇同样也适用于Kingbase, GaussDB一样存在的PG系,最近一客户上了Highgo数据库后晚上的批作业任务总是失败,查询JOB日志,显示因为deadlock失败,其实很好理解,提示的信息有会话、表、行的信息,这里模拟一下2个会话交叉更新相同记录产生的deadlock.

性能诊断: Kingbase、Highgo等(PostgreSQL系)中数字类型隐式转换导致无法使用索引

在oracle数据库同样也会出现因为隐式转换导致的索引无法使用,但是在PostgreSQL系的数据库中如kingbase, highgoDB, GaussDB, openGauss等,对于对于常用的“数字”对应多个datatype,增加了转换的概率,近期在一套oracle迁移到某国产postgresql系数据库后,之前一个正常高频执行的SQL把数据库CPU瞬间拉到了70%, 如 numval>=power(10,19) 未在索引列使用索引,下面记录这一问题。

性能诊断PostgreSQL中attach partition越来越慢一案例?(pg_partman)

分区表(partition)在大型数据库中是较为常用的技术,PostgreSQL中 v10版本后支持了原生分区语法,之前多是约束注册方式,v11后又至此了default分区,近日一客户反馈他们的PostgreSQL在分区使用pg_partman管理分区增加空分区时越来越慢(≈3sec一个分区), 这里简单记录原因。

如何查找其他session级alter session set修改的参数? Oracle 和Kingbase/HighgoDB(PostgreSQL)

ALTER SESSION命令会更改运行时配置参数,仅影响当前会话使用的值,对其他会话或系统级没有影响,有时需要知道某个会话当前的session级参数,在oracle中比较方便,目前postgresql及基于postgresql的国产库如Kingbase、Highgodb中不太容易,这里我演示gdb的方法。

HighgoDB (PostgreSQL)利用pg_trgm的gin索引优化前后模糊查询

在数据库中文本的模糊查询是ES等数据库的强项,但在关系型数据库中也有一些手段,如后缀%普通索引就可以使用,前缀可以创建reverse反转索引,但是前后模糊的话,在oracle中可以创建索引使用index full scan+加回表查询,今天发现在PostgreSQL中还有pg_trgm扩展,配合GIN索引有不错的性能表现。