【问题标题】:How to check that data is deleted or not in PostgreSQL如何检查 PostgreSQL 中的数据是否被删除
【发布时间】:2019-04-02 02:18:29
【问题描述】:

昨天我们向我们的网站添加了一个简单的表单,我们刚刚使用连接到 PostgreSQL 数据库的 Django 实现了一个 API 视图。 今天查询数据库,查看提交了多少行,结果发现一个奇怪的东西,我们已经使用Django ORM创建并迁移了我们的模型,所以主键定义为自增整数字段,问题是行 id 不是连续的,它们是如此多样化,当我写这个问题时,最大 id 值为 252,但我们表中只有 72 条记录, 我之前在其他表中看到过这种情况,但是这些表受到了删除和更新查询,但我们只插入到这个新表中,我的问题是:我们的数据是被删除还是在 PostgreSQL 中是正常行为? 我在谷歌搜索过,似乎唯一的方法是检查 WAL 日志,但我们还没有为我们的数据库启用它,是否有另一种方法来检查数据是否一致? 谢谢。

【问题讨论】:

    标签: django postgresql


    【解决方案1】:

    预期序列中的漏洞

    如果您有多个连接到正在添加行的数据库,那么您应该会在序列号结果中看到漏洞。

    如果 Alice 正在添加一行,她可能会在尚未执行 COMMIT 的情况下将序列从 10 增加到 11。同时,Bob 添加了一条记录,将序列增加到 12,并将 12 分配给他现在提交的行。所以数据库已经存储了 ID 字段值为 10 和 12 的行,而不是 11。

    • 如果 Alice 提交,则 11 将出现在查询中。
    • 如果 Alice 执行 ROLLBACK,则 11 将永远出现在查询中。

    【讨论】:

    • 感谢您的回答,但我只想知道有没有办法确保是这种情况?没错,我们正在使用连接池,并且可以使用多个连接场景,但是我们之间存在很大差距,例如10 -> 35 或 218 -> 237,我在想这些差距正常吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多