千家信息网

PostgreSQL12的新特性REINDEX有什么作用

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这篇文章主要介绍"PostgreSQL12的新特性REINDEX有什么作用",在日常操作中,相信很多人在PostgreSQL12的新特性REINDEX有什么作用问题上存在疑惑,小编查阅了各式资料,整理
千家信息网最后更新 2024年12月13日PostgreSQL12的新特性REINDEX有什么作用

这篇文章主要介绍"PostgreSQL12的新特性REINDEX有什么作用",在日常操作中,相信很多人在PostgreSQL12的新特性REINDEX有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"PostgreSQL12的新特性REINDEX有什么作用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

PG 12引入REINDEX
CONCURRENTLY,为了解决在REINDEX期间不能执行查询操作的问题,REINDEX CONCURRENTLY使用了相对于pg_repack(前身是pg_reorg)成本更低的方法来实现在索引rebuild期间数据表的可读写查询,但rebuild的时间越长,需要的资源越多,其实现思路如下:
1.创建新的索引(在与原index一样的catalog中),以_ccnew结尾
2.构建新索引,这一步会并行去做
3.使新索引与在构建期间出现的变化同步(catch up)
4.重命名新索引为旧索引的名称并切换所有依赖旧索引的地方到新索引.旧索引设置为invalid(这一步成为交换)
5.标记旧索引为dead状态(vacuum进程可回收)
6.删除索引
上面每一步都需要事务.在reindexing table时,该表的所有索引会一次过进行收集每一步都会处理所有的索引.可以把这个过程视为在一个单独的事务中CREATE INDEX CONCURRENTLY后跟DROP INDEX的组合,中间有一步是完全透明的新旧索引切换.
如果在REINDEX期间出现异常,那么所有需要rebuild的索引的状态都是invalid,意味着这些索引仍然占用空间,定义仍在但不能使用.

下面是测试脚本,PG 11 vs PG 12的一些区别
PG 11

testdb=# CREATE TABLE tab (a int);CREATE TABLEtestdb=# INSERT INTO tab VALUES (1),(1),(2);INSERT 0 3testdb=# CREATE UNIQUE INDEX CONCURRENTLY tab_index on tab (a);ERROR:  could not create unique index "tab_index"DETAIL:  Key (a)=(1) is duplicated.testdb=# \d tab                Table "public.tab" Column |  Type   | Collation | Nullable | Default --------+---------+-----------+----------+--------- a      | integer |           |          | Indexes:    "tab_index" UNIQUE, btree (a) INVALIDtestdb=# REINDEX TABLE tab;ERROR:  could not create unique index "tab_index"DETAIL:  Key (a)=(1) is duplicated.testdb=#  DELETE FROM tab WHERE a = 1; DELETE 2testdb=# REINDEX TABLE tab;REINDEX

PG 12

testdb=#  CREATE TABLE tab (a int);CREATE TABLEtestdb=# INSERT INTO tab VALUES (1),(1),(2);INSERT 0 3testdb=#  CREATE UNIQUE INDEX CONCURRENTLY tab_index on tab (a);psql: ERROR:  could not create unique index "tab_index"DETAIL:  Key (a)=(1) is duplicated.testdb=#  REINDEX TABLE CONCURRENTLY tab;psql: WARNING:  cannot reindex invalid index "public.tab_index" concurrently, skippingpsql: NOTICE:  table "tab" has no indexesREINDEXtestdb=#  DELETE FROM tab WHERE a = 1; DELETE 2testdb=#  REINDEX TABLE CONCURRENTLY tab;psql: WARNING:  cannot reindex invalid index "public.tab_index" concurrently, skippingpsql: NOTICE:  table "tab" has no indexesREINDEXtestdb=#  REINDEX INDEX CONCURRENTLY tab_index;REINDEXtestdb=#

PG 12自动跳过了invalid index.

到此,关于"PostgreSQL12的新特性REINDEX有什么作用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

索引 作用 特性 学习 事务 方法 更多 状态 问题 切换 帮助 查询 实用 接下来 前身 名称 后跟 地方 思路 意味 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库DB005 移动家庭云服务器怎么下载 java实现数据库迁移 传奇人物数据库玩家的名字修改 淮安网络安全运维 网络安全执法检查工作情况 浅谈计算机网络安全的现状及对策 深圳海纳互联网科技有限公司 网络安全为人民三年级手抄报 byte 在数据库 数据库的详细设计及查询 qt如何使用本地数据库连接 常州软件开发制作公司 学校信息网络安全模拟演练 北京天盛九州网络技术 ftp数据库怎么登陆 专病数据库建设 ppt 软件开发好找工作吗 网络安全策划书范文大全 谈谈网络安全和技术安全问题 网络安全意识和建议 分布式数据库分页表 天津服务器虚拟化技术云空间 杭州系统软件开发如何收费 在数据库中v代表啥意思 提高软件开发效率可视化技术 战地5自建服务器怎么进人 网络安全学习教育活动总结 php服务器租赁哪里好 农安通用网络技术咨询哪家好
0