业务场景:对于range分区表,在父表中创建复合主键,修改复合主键中的非分区键字段时,会导致查询该表失败。如果想删除该表,在进行重建该表时,会导致数据库异常关闭,无法正常启动。

(一)操作系统

[root@xxx ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.4 (Maipo
说明:操作系统系统为中标麒麟v5u4版本

(二)数据库版本

show server_version;


11.2

(三)测试表(range分区表无数据)

1.创建测试表

CREATE TABLE T_RANGE_PARTITION
(
ID varchar(10) NOT NULL,
DATATYPE NUMERIC,
TABLENAME VARCHAR(100),
TABLECOMMENT VARCHAR(200),
STARTTIME TIMESTAMP,
ENDTIME TIMESTAMP,
COL1 NUMERIC,
COL2 NUMERIC,
COL3 VARCHAR(2),
COL4 VARCHAR(2),
COL5 VARCHAR(25),
COL6 VARCHAR(50),
STORETIME TIMESTAMP DEFAULT current_timestamp(0)
)
PARTITION BY RANGE (STORETIME)
TABLESPACE SWDS_DATA_TAB_05;
2.创建复合主键
ALTER TABLE T_RANGE_PARTITION ADD CONSTRAINT PK_T_RANGE_PARTITION
PRIMARY KEY (ID,STORETIME) USING INDEX TABLESPACE SWDS_IX_TAB_01;
说明:storetime为分区键

3.创建分区
create table T_RANGE_PARTITION_2018 partition of T_RANGE_PARTITION for values from (‘2018-01-01’) to (‘2019-01-01’);
create table T_RANGE_PARTITION_2019 partition of T_RANGE_PARTITION for values from (‘2019-01-01’) to (‘2020-01-01’);

(四)测试场景一:将ID字段长度由varchar(10)修改为varchar(50)

1.修改字段长度
alter table T_RANGE_PARTITION alter column id type varchar(50);
2.查看修改结果

3.查询表失败
select * from t_range_partition;
ERROR: could not open file “pg_tblspc/16410/PG_11_201809051/16384/42306”: No such file or directory

(五)测试场景二:将ID字段长度由varchar(10)修改为varchar(5)

1.修改字段长度
alter table T_RANGE_PARTITION alter column id type varchar(5);
2.查看修改结果

3.查询表成功

(六)测试场景三:将ID字段长度由varchar(5)修改为varchar(50)

1.删除主键
ALTER TABLE T_RANGE_PARTITION DROP CONSTRAINT PK_T_RANGE_PARTITION;

2.修改字段长度
alter table T_RANGE_PARTITION alter column id type varchar(50);

3.查询表成功

4.添加主键
ALTER TABLE T_RANGE_PARTITION ADD CONSTRAINT PK_T_RANGE_PARTITION
PRIMARY KEY (ID,STORETIME) USING INDEX TABLESPACE SWDS_IX_TAB_01;

(七)测试结果

对于range分区表,在父表中创建复合主键时,修改复合主键中的非分区键字段(以ID为例子)的结果如下。
1、ID字段的长度不能改大,只能改小。
2、ID字段长度改大后,查询该表报错。
3、ID字段类型为numeric和varchar都有该问题。

(八)解决方法及步骤

以场景一为例,修改复合主键中的非分区键字段时,修改步骤如下
1、备份数据库(pg_dump或pg_basebackup)
2、删除该表上的复合主键
3、修改复合主键中非分区键字段长度
4、在该表上创建复合主键

升级postgresql数据库的版本到11.3

(九)注意事项

以场景一为例,修改完id字段长度后,查询该表报错时,采取以下措施
1、禁止对该表做drop、alter操作,会导致数据库异常关闭,无法启动。
drop table T_RANGE_PARTITION;
WARNING: AbortTransaction while in COMMIT state
ERROR: SMgrRelation hashtable corrupted
PANIC: cannot abort transaction 1822, it was already committed
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
2、对数据库进行备份(pg_dump)

postgresql11.2修改分区表中复合索引字段长度遇到的BUG相关推荐

  1. SQL修改视图中列名和字段长度

    在sql server数据库中建立视图,一般会自定义字段名称,有时候还会修改字段的长度,尤其是当视图的基础表来源于mysql或oracal数据库时.下面谈一下如何修改视图的字段名称和长度. 下面语句是 ...

  2. 运维手册——Mysql索引字段长度太长报错

    声明:这是我在大学毕业后进入第二家互联网公司学习的内容 背景 Mysql执行Create Table语句时报错 Specified key was too long; max key length i ...

  3. oracle 取字段长度为5,oracle9i中varchar2(5)字段长度不足5前面补0?

    oracle9i中varchar2(5)字段长度不足5前面补0? mip版  关注:201  答案:2  悬赏:20 解决时间 2021-01-19 11:34 已解决 2021-01-18 23:5 ...

  4. 关于MySQL中复合索引优化

    最近对两个开源系统进行反向工程ER图生成后,对比发现一个系统其中一个表中的复合索引的列个数对查询的效率有较大的影响~~ 于是上网查了下相关的资料:(关于复合索引优化的) 两个或更多个列上的索引被称作复 ...

  5. oracle不适合建立索引的场景,Oracle 分区表中本地索引和全局索引的适用场景

    背景 分区表创建好了之后,如果需要最大化分区表的性能就需要结合索引的使用,分区表有两种索引:本地索引和全局索引.既然存在着两种的索引类型,相信存在即合理.既然存在就会有存在的原因,也就是在特定的场景中 ...

  6. 复合索引字段的排序对搜素的影响

    索引是对数据库大数据的查询优化的一种有效的手段,索引又可分为唯一索引和复合索引 单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上面. 用户可以在多个列上建立索引,这种索引叫做复合索引(组 ...

  7. mysql中复合索引语法_MySQL 复合索引

    MySQL 复合索引 简介:在本例中,您将了解MySQL组合索引以及如何使用它来加速查询. MySQL复合索引简介 复合索引是多列的索引.MySQL允许您创建一个最多包含16列的复合索引. 复合索引也 ...

  8. 服务器字段长度修改,SQL服务器:与字段长度控制

    们都面临着在SQL Server字符串长度控制一个很大的问题问题2008SQL服务器:与字段长度控制 我们系统的简要回顾: 在持久性临时区域进口数据从*.txt文件(分号作为分隔符),在SQL Ser ...

  9. java只修改变的字段_修改Java中的最终字段

    让我们从一个简单的测试用例开始: import java.lang.reflect.Field; public class Test { private final int primitiveInt ...

最新文章

  1. 有关计算机辅助教学方面的问题,浅析高校计算机辅助教学应用的有关问题
  2. 教你11 周打造全能Python工程师!
  3. C++学习:第一章 开始
  4. 高斯—若尔当(约当)消元法解异或方程组+bitset优化模板
  5. AD封装库的免费下载与导入
  6. 小红伞的WAF一个绕过方法
  7. Mybatis事务原理
  8. 【数字设计】恒玄科技_笔试面试题目分享
  9. 100万人同时抢1万张火车票,12306抢票,极限并发带来的思考?
  10. echarts配置项图文介绍——xAxis
  11. Java并发编程之CyclicBarrier和CountDownLatch
  12. vw/vh:移动适配之vw/vh(使用方法)
  13. 如何在Android中发送电子邮件
  14. Maven安装ojdbc依赖支持
  15. 炎炎夏日送清凉 狠抓实干保工期 西安华南城领导慰问工地一线建筑工人
  16. APPScan手动探索
  17. python2和python3的区别、转换及共存
  18. mac系统安装使用linux命令
  19. 人大金仓(Kingbase)数据库迁移——KDMS工具(人大金仓数据库迁移工具迁移失败可使用此方法)
  20. 2011年8月编程语言排行榜

热门文章

  1. 谷歌地球 V6.2.1.6014 简体中文版
  2. 智能服务机器人产品及解决方案
  3. MNL——多项Logit模型学习笔记(一)离散选择以及logit模型介绍
  4. 作为一名数据人,真心推荐一位行业大佬,从0到1的实践案例
  5. 图像处理术语解释:灰度、色相、饱和度、亮度、明度、阿尔法通道、HSL、HSV、RGBA、ARGB和PRGBA以及Premultiplied Alpha(Alpha预乘)等基础概念详解
  6. 什么是 MEMORY.DMP 文件 ?
  7. composer 报错解决:[InvalidArgumentException] Could not find package
  8. 单片机C语言制作ESR表,超级ESR表 - 〓仪表工具专区〓 - 矿石收音机论坛 - Powered by Discuz!...
  9. PHP制作音乐播放器制作教案,js制作简单的音乐播放器的示例代码
  10. 二代身份证读卡器网页读卡