PostgresQL 锁

postgresql的锁机制主要有三种,表级锁、行级锁、建议性锁

表级锁和行级锁有显示的和隐式的,建议性锁都是显示的。显示的需要用户显示的查询来获取,隐式的则是由标准sql获取。

页级共享/排除锁,用于控制对共享缓存池里表页的访问,在一行数据被读取或更新后会立即被释放

1. 表级锁

大多数表级锁都可以通过sql命令来获取,也可以通过锁命令获取

access share 访问共享锁

只和access exclusive冲突,select命令可在引用的表上获得该锁,一般只有在读表时获得该锁。

access exclusive 访问排它锁

和所有的锁模式冲突,alter table, drop table, truncate, reindex, cluster, vacuum full命令可在引用的表上获得,此锁模式是Lock命令的默认模式。

share 共享锁

和ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE ROW EXCLUSIVE, EXCLUSIVE, and ACCESS EXCLUSIVE 冲突, create index命令在引用的表上获得该锁。

exclusive 排它锁

和ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, and ACCESS EXCLUSIVE冲突,当事物获得该锁时,只允许读操作并行,它必须显示的获取,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL中,当执行一张表的insert语句时出现阻塞情况通常是因为事务未正常提交。为了解决这个问题,可以通过以下步骤来查询是否表和释放定: 1. 查询是否表:使用下面的SQL语句查询是否有其他进程定了该表: ``` select oid from pg_class where relname='table_name'; ``` 其中,将"table_name"替换为可能被定的表的名称。 2. 如果查询结果返回了结果,表示该表被定。接下来,可以使用以下SQL语句来释放定: ``` select pg_cancel_backend(pid); ``` 将"pid"替换为上一步查询到的pid。 3. 如果无法取消定,则可以使用以下SQL语句强制终止阻塞的进程: ``` select pg_terminate_backend(pid); ``` 同样,将"pid"替换为上一步查询到的pid。 另外,还可以使用以下SQL语句来查看当前数据库中的定情况: ``` select relation::regclass, s.pid, granted, client_hostname, application_name, usename, query from pg_locks l, pg_stat_activity s where s.pid = l.pid; ``` 这条SQL语句可以显示定表的相关信息,包括定的进程ID(pid)、客户端主机名、应用程序名称、用户名和查询语句等信息。 总结:要解决PostgreSQL表阻塞查询的问题,我们可以通过查询是否表,释放定或强制终止阻塞的进程来解决。同时,可以使用特定的SQL语句来查看当前数据库中的定情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [postgresql表问题](https://blog.csdn.net/S0001100/article/details/126370990)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [PostgreSQL 查询被阻塞的连接](https://blog.csdn.net/howard_shooter/article/details/122063644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [que:一个使用PostgreSQL咨询来提高速度和可靠性的Ruby作业队列](https://download.csdn.net/download/weixin_42133918/16279031)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值