【问题标题】:How to lock a SELECT in PostgreSQL?如何在 PostgreSQL 中锁定 SELECT?
【发布时间】:2019-05-22 14:33:24
【问题描述】:

我习惯在 MySQL 中这样做:

INSERT INTO ... SELECT ...

这将锁定我 SELECT 的表。

现在,我正在尝试在 PostgreSQL 中做类似的事情,我在表中选择一组行,然后根据这些行值在其他表中插入一些内容。我想防止有过时的数据,所以我想知道如何在 PostgresSQL 中锁定 SELECT

【问题讨论】:

  • 为什么锁定源表可以防止“过时数据”?

标签: postgresql database-locking


【解决方案1】:

无需显式锁定任何内容。 SELECT 语句将始终看到表的一致快照,无论它运行多长时间。

如果您在启动SELECT 之前锁定表以防止并发修改,结果将没有什么不同,但您会不必要地损害并发性。

如果您需要多个查询来查看数据库的一致状态,请使用REPEATABLE READ 隔离级别启动事务。那么事务中的所有语句都会看到数据库的相同状态。

【讨论】:

  • 我不明白。如果我执行 var data = SELECT 语句之类的操作,然后有人修改了我最近选择的内容,我的数据不会过时吗?
  • 是的,但是如果您一释放锁就锁定表,它也会过时。而且你不能永远持有锁。所以我看不到好处。该值在您选择的时间是最新的,这应该足够了。也许您应该分享您计划如何处理可能会受到影响的结果值。
猜你喜欢
  • 1970-01-01
  • 2018-12-06
  • 2020-06-23
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
相关资源
最近更新 更多