博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle vs PostgreSQL,研发注意事项(1)-查询锁表
阅读量:2496 次
发布时间:2019-05-11

本文共 1193 字,大约阅读时间需要 3 分钟。

Oracle数据库,查询语句不会锁表,但PostgreSQL在开启事务后,查询数据表会锁表,在试图DROP/TRUNCATE TABLE时会一直等待。

--------------------------- Session A

drop table if exists t1;

-- 开启事务

begin;

-- 查询当前事务号

select txid_current(); 

-- 创建表&插入100w数据

create table t1(id int,c1 varchar(20));

-- 查询当前事务号

select txid_current(); 

insert into t1 select generate_series(1,1000000),'#TESTDATA#';

-- 提交事务

end;

--------------------------- Session B

-- 开启事务

begin;

-- 查询当前事务号

select txid_current(); 

-- 查询数据表

select count(*) from t1;

--------------------------- Session A

-- 重新回到Session A,删除数据表

drop table t1; -- 这时会一直等待

查询数据库锁信息:

testdb=# SELECT pid, relname , locktype, mode

testdb-# FROM pg_locks l JOIN pg_class t ON l.relation = t.oid

testdb-#      AND t.relkind = 'r'

testdb-# WHERE t.relname = 't1';

pid  | relname | locktype |        mode       

------+---------+----------+---------------------

1574 | t1      | relation | AccessShareLock

1585 | t1      | relation | AccessExclusiveLock

(2 rows)

发现查询t1(1574为Session B的pid)时会持有AccessShareLock,导致drop table一直等待该锁释放后才能执行。

参考:

https://www.postgresql.org/docs/11/static/explicit-locking.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-2158210/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/6906/viewspace-2158210/

你可能感兴趣的文章
kafka web端管理工具 kafka-manager【转发】
查看>>
获取控制台窗口句柄GetConsoleWindow
查看>>
Linux下Qt+CUDA调试并运行
查看>>
3.1.1;例3-1
查看>>
BZOJ4066: 简单题
查看>>
用户添加修改文件的操作
查看>>
C# 2015关键字
查看>>
PostgreSQL 数据库备份
查看>>
Binder
查看>>
RabbitMQ 在Linux环境中的默认位置
查看>>
BZOJ 2243: [SDOI2011]染色
查看>>
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
查看>>
hdu 1695 GCD(欧拉函数+容斥)
查看>>
Xcode找Library位置
查看>>
[P1121]环状最大两段子段和
查看>>
操作数据库出现InvalidOpertionException(内部连接致命错误)
查看>>
opencv读取、显示、保存图像
查看>>
路由器硬件
查看>>
使用命令行查看PublicKeyToken
查看>>
Java多线程系列---“基础篇”04之 synchronized关键字
查看>>