gpt4 book ai didi

postgresql - postgresql插入和选择时如何锁表?

转载 作者:行者123 更新时间:2023-11-29 13:15:52 25 4
gpt4 key购买 nike

我正在将数据从一个表迁移到另一个表,在这样一个环境中,任何长时间的锁定或停机都是 Not Acceptable ,总共大约 80000 行。本质上,查询归结为这个简单的案例:

INSERT INTO table_2
SELECT * FROM table_1
JOIN table_3 on table_1.id = table_3.id

正在读取所有 3 个表,并且可以随时插入。我只想运行上面的查询,但我不确定锁定是如何工作的,也不确定在操作过程中表是否完全不可访问。我的理解告诉我只有受影响的行(新插入的)才会被锁定。表 1 刚刚被选中,所以没有坏处,并发插入是安全的,因此表 2 应该可以自由访问。

这种理解是否正确,我可以毫无顾虑地在生产环境中运行这个查询吗?如果不安全,实现此目的的标准方法是什么?

最佳答案

你很好。

如果您对详细信息感兴趣,可以阅读 multiversion concurrency control , 或关于 Postgres MVCC implementation 的详细信息,或者如何its various locking modes interact ,但对您的案例的影响在 docs 中得到了很好的总结。 :

reading never blocks writing and writing never blocks reading

简而言之,存储在数据库中的每条记录都附加了一些版本号,每个查询都知道要考虑哪些版本,要忽略哪些版本。

这意味着 INSERT 可以安全地写入表而无需锁定它,因为任何并发查询将简单地忽略新行,直到插入事务决定提交。

关于postgresql - postgresql插入和选择时如何锁表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49128721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com