gpt4 book ai didi

spring - 如何安全地截断并重新填充 PostgreSQL 中的表?

转载 作者:行者123 更新时间:2023-12-04 00:11:44 27 4
gpt4 key购买 nike

我的数据库中的一张表必须每天更新。 Web 服务器每 5 秒主动查询此表。现在我不能简单地UPDATE由于某些限制,表格行,所以我需要清除所有行并重新填充表格。如何在不影响 Web 服务器功能的情况下安全地执行此操作?
重新填充由与 Web 服务器隔离的其他 Web 服务完成。我正在使用 Spring 框架。

table 上有大约。 170k 行和 5 列。

最佳答案

在单个事务中截断并重新填充表。截断对并发读者不可见,他们继续查看旧数据。根据@AlexanderEmelianov 和 the docs 进行更正:

TRUNCATE is not MVCC-safe. After truncation, the table will appear empty to concurrent transactions, if they are using a snapshot taken before the truncation occurred. See Section 13.5 for more details.



所以在 TRUNCATE之后ing txn commits ,并发 txns 在 TRUNCATE 之前开始将看到表为空。

任何在被截断后尝试写入表的事务都将等到执行截断的事务提交或回滚。
BEGIN;

TRUNCATE TABLE my_table;

INSERT INTO my_table (blah) VALUES (blah), (blah), (blah);

COMMIT;

您可以 COPY而不是 INSERT也。正常交易中的任何事情。

更好的是,PostgreSQL 中有一项优化,它可以在截断后填充表比在其他情况下更快。

关于spring - 如何安全地截断并重新填充 PostgreSQL 中的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33825482/

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