【PostgreSQL PGCE-091题目解析14】PostgreSQL中使用CONCURRENTLY选项创建索引时,允许增删改数据表。

本文为++云贝教育刘峰(V:yunbee_DBA)原创,请尊重知识产权,转发请注明出处,不接受++

++任何抄袭、演绎和未经注明出处的转载。++

PostgreSQL中使用CONCURRENTLY选项创建索引时,允许增删改数据表。

A. 正确

B. 错误

参考答案:A


解析:

我们知道,PG是有行级琐的,在创建索引的时候,会在行上加琐

实验如下:

1、准备目标数据

复制代码
drop table if exists t1;
create table t1 ( a int, b varchar(50));
insert into t1
select a.*, md5(a::varchar) from generate_series(1,5000000) a;

2、在表上创建索引,不加CONCURRENTLY

复制代码
testdb=# create index idx_t1_a3 on t1(a);
CREATE INDEX

3、修改表数据

复制代码
testdb=# begin;
BEGIN
testdb=*# select pg_backend_pid();
 pg_backend_pid
----------------
          32600
(1 row)

testdb=*# select txid_current();
 txid_current
--------------
          759
(1 row)

testdb=*# update t1 set a=55 where a=6;
。。。等待中

发现修改不了

4、查看此时的琐

复制代码
testdb=# select locktype,database,relation::regclass,transactionid,pid,mode from pg_locks order by pid;
      locktype | database | relation | transactionid |  pid  |   mode
---------------+----------+----------+---------------+-------+---------------------
relation       | 16389    | pg_locks |               | 30854 | AccessShareLock
virtualxid     |          |          |               | 30854 | ExclusiveLock
virtualxid     |          |          |               | 32410 | ExclusiveLock
relation       | 16389    | 16411    |               | 32410 | AccessExclusiveLock
transactionid  |          |          |           760 | 32410 | ExclusiveLock
relation       | 16389    | t1       |               | 32410 | ShareLock
virtualxid     |          |          |               | 32600 | ExclusiveLock
relation       | 16389    | t1       |               | 32600 | RowExclusiveLock
transactionid  |          |          |           759 | 32600 | ExclusiveLock
(9 rows)

5、以CONCURRENTLY模式创建索引

复制代码
testdb=# create index concurrently idx_t1_a41 on t1(a);
CREATE INDEX

6、修改表数据

复制代码
testdb=# update t1 set a=55 where a=6;
UPDATE 2

发现很顺利修改成功

7、查看此时的琐情况

复制代码
testdb=# select locktype,database,relation::regclass,transactionid,pid,mode from pg_locks order by pid;
      locktype | database |  relation  | transactionid |  pid  |  mode
---------------+----------+------------+---------------+-------+--------------------------
virtualxid     |          |            |               | 30854 | ExclusiveLock
relation       |    16389 | pg_locks   |               | 30854 | AccessShareLock
relation       |    16389 | idx_t1_a5  |               | 35304 | RowExclusiveLock
relation       |    16389 | idx_t1_a4  |               | 35304 | RowExclusiveLock
relation       |    16389 | idx_t1_a3  |               | 35304 | RowExclusiveLock
relation       |    16389 | idx_t1_a2  |               | 35304 | RowExclusiveLock
relation       |    16389 | idx_t1_a1  |               | 35304 | RowExclusiveLock
relation       |    16389 | idx_t1_a   |               | 35304 | RowExclusiveLock
relation       |    16389 | t1         |               | 35304 | RowExclusiveLock
relation       |    16389 | idx_t1_a41 |               | 35304 | RowExclusiveLock
transactionid  |          |            |           773 | 35304 | ExclusiveLock
virtualxid     |          |            |               | 35304 | ExclusiveLock
virtualxid     |          |            |               | 35470 | ShareLock
relation       |    16389 | t1         |               | 35470 | ShareUpdateExclusiveLock
virtualxid     |          |            |               | 35470 | ExclusiveLock

结论:PG在创建索引使用concurrently参数时,不影响DML操作,反而是DML操作会影响 concurrently索引创建。

PostgreSQL PGCE考试为理论考试,需通过两门考试才能拿到"PostgreSQL PGCE证书"。

相关推荐
一 乐29 分钟前
医疗管理|医院医疗管理系统|基于springboot+vue医疗管理系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·医疗管理系统
EllenShen12338 分钟前
(Azure)PGSQL和redis 连通性测试 --code 备份
redis·postgresql·azure
TDengine (老段)1 小时前
从细胞工厂到智能制造:Extracellular 用 TDengine 打通数据生命线
java·大数据·数据库·科技·制造·时序数据库·tdengine
L.EscaRC3 小时前
浅析MySQL InnoDB存储引擎的MVCC实现原理
数据库·mysql
热爱运维的小七4 小时前
MongoDB 内存管理避坑指南:解决高占用、页错误等核心问题,让数据库性能翻倍
数据库·mongodb
冉冰学姐6 小时前
SSM公办小学网络报名系统f3d3p(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·ssm 框架·公办小学网络报名系统·教育信息化
叡鳍7 小时前
hive---HQL查询
数据库
vortex57 小时前
谷歌黑客语法挖掘 SQL 注入漏洞
android·数据库·sql
九河云8 小时前
软件开发平台 DevCloud
运维·服务器·数据库·科技·华为云
wind_one19 小时前
7.基础--SQL--DDL-数据类型及案例
数据库·sql