我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PostgreSQL12的新特性REINDEX有什么作用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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 TABLE
testdb=# INSERT INTO tab VALUES (1),(1),(2);
INSERT 0 3
testdb=# 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) INVALID
testdb=# 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 2
testdb=# REINDEX TABLE tab;
REINDEX

PG 12

testdb=#  CREATE TABLE tab (a int);
CREATE TABLE
testdb=# INSERT INTO tab VALUES (1),(1),(2);
INSERT 0 3
testdb=#  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, skipping
psql: NOTICE:  table "tab" has no indexes
REINDEX
testdb=#  DELETE FROM tab WHERE a = 1; 
DELETE 2
testdb=#  REINDEX TABLE CONCURRENTLY tab;
psql: WARNING:  cannot reindex invalid index "public.tab_index" concurrently, skipping
psql: NOTICE:  table "tab" has no indexes
REINDEX
testdb=#  REINDEX INDEX CONCURRENTLY tab_index;
REINDEX
testdb=#

PG 12自动跳过了invalid index.

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PostgreSQL12的新特性REINDEX有什么作用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql8新特性binlog_expire_logs_seconds有什么作用

这篇“mysql8新特性binlog_expire_logs_seconds有什么作用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看
2023-07-05

Kubernetes1.5的新特性有什么

Kubernetes1.5的新特性有什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。背景介绍在Kubernetes1.5中,对于kubelet新增加了几个同认
2023-06-05

Java12有什么新特性

这篇文章主要讲解了“Java12有什么新特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java12有什么新特性”吧!Switch 表达式 (JEP 325)在 Java 12 中,对 S
2023-06-15

OSGi 4.2的新特性有什么

本篇文章为大家展示了OSGi 4.2的新特性有什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一些 OSGi 实现,例如 Equinox 3.5 与 Felix 2.0 早已针对 OSGi 4.2
2023-06-17

vue3.0中有什么新特性

这篇文章主要介绍了vue3.0中有什么新特性,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vue3.0新特性:1、节点打Tag;2、事件开缓存;3、响应式Proxy;4、Co
2023-06-14

html5中有什么新特性

今天小编给大家分享一下html5中有什么新特性的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。canvas
2023-06-27

C++11有什么新特性

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

C# 3.5有什么新特性

小编给大家分享一下C# 3.5有什么新特性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!隐式类型本地变量(Implicity Typed Local Variab
2023-06-17

PHP7中有什么新特性

这篇文章主要介绍了PHP7中有什么新特性,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php是什么语言php,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hyper
2023-06-14

编程热搜

目录