我有一个大约150GB的表,在Postgres中有大约10亿行。我们有一个Flask应用程序,它使用SQLAlchemy插入到这个表中,我们通过Alembic处理数据库迁移。这对我们很有效,但我们真的应该放弃90%的行。在
我的第一种方法是通过SQLAlchemy删除行;但是,根据RDS图,释放的磁盘空间从未被回收,我相信这是因为我还没有在表上运行vacuum full命令,这似乎是一个昂贵的过程。在
似乎有很多建议提到处理这种大规模删除的正确方法是重新创建表,复制必要的行,然后截断旧表。从概念上讲,这是有道理的,但我不确定什么是正确的方法,即使看了以下内容:
有人对我当前使用的堆栈有什么建议吗?更具体地说,我有以下关切:
我从来没有使用过Alembic,但是我用纯PSQL做过类似的事情。3号看起来是个不错的选择。请确保在复制条目之后和截断旧表之前添加任何索引和外键。在有索引的表中插入15GB的行将导致大量的重新索引,而且要花很长时间。在
至于Alembic元数据,我无能为力。也许尝试在不截断旧表的情况下将表重新创建为副本,以验证没有丢失任何重要的内容?只是一个想法。在
相关问题 更多 >
编程相关推荐