Oracle vs PostgreSQL,研發注意事項(1)-查詢鎖表
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一直等待該鎖釋放後才能執行。
參考:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-2158210/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle vs PostgreSQL,研發注意事項(6)- 事務處理OracleSQL
- Oracle vs PostgreSQL,研發注意事項(12) - NULL與索引OracleSQLNull索引
- Oracle vs PostgreSQL,研發注意事項(13) - UPDATE語句OracleSQL
- Oracle vs PostgreSQL,研發注意事項(5)- 字元型別OracleSQL字元型別
- Oracle vs PostgreSQL,研發注意事項(7)- 型別轉換OracleSQL型別
- Oracle vs PostgreSQL,研發注意事項(2)-DDL語句與事務OracleSQL
- Oracle vs PostgreSQL,研發注意事項(9)- PostgreSQL資料型別轉換規則#1OracleSQL資料型別
- Oracle vs PostgreSQL,研發注意事項(8)- Oracle資料比較規則OracleSQL
- Oracle vs PostgreSQL,研發注意事項(3)- 事務回滾之UPDATE操作解析OracleSQL
- Oracle vs PostgreSQL,研發注意事項(10)- PostgreSQL資料型別轉換規則#2OracleSQL資料型別
- Oracle vs PostgreSQL,研發注意事項(11)- PostgreSQL資料型別轉換規則#3OracleSQL資料型別
- Oracle vs PostgreSQL,研發注意事項(4)- PageSize對資料儲存的影響OracleSQL
- MySQL 查詢大表注意事項MySql
- Mysql大表查詢注意事項MySql
- hive查詢注意事項和調優Hive
- Oracle臨時表使用注意事項Oracle
- mybatis中使用in查詢時的注意事項MyBatis
- oracle 例項表查詢Oracle
- Oracle 重建表(rename)注意事項總結Oracle
- Oracle 重建表(rename)注意事項小結Oracle
- 【TABLE】oracle表線上重定義注意事項Oracle
- 【TEMPORARY TABLE】Oracle臨時表使用注意事項Oracle
- Mysql設計與查詢的關鍵注意事項MySql
- [爬坑日誌1]寫查詢的mysql一些小注意事項MySql
- mysql鎖表查詢MySql
- Oracle使用*的注意事項Oracle
- 統計分析注意事項1
- SQVI和SAP查詢QUERY的區別和使用注意事項
- 查詢鎖表 - 誰鎖住了我的表
- Oracle資料庫表設計時的注意事項Oracle資料庫
- oracle 鎖資訊查詢
- 查詢鎖表記錄
- MySql 鎖表 查詢 命令MySql
- ios開發注意事項iOS
- sql 開發篇一 之 表鎖查詢及解鎖SQL
- ORACLE SQL的查詢表的鎖的情況OracleSQL
- oracle 轉pg 的注意事項Oracle
- oracle移植到mysql注意事項OracleMySql