我有一个脚本,从csv文件导入数据,并加载到数据库表。这些表由一个类似于customer_id的列进行分区。该脚本首先将数据加载到临时表中,检查唯一键/FK约束,删除违反FK/唯一约束的数据。然后,它从主表中删除现有分区,并将该临时表添加为分区。我的问题是,这是导入数据的最佳方法吗?我能想到的另一种方法是:不使用分区,只使用临时表,清理数据后,删除现有数据后将其导入主表。
发布于 2021-10-12 12:18:10
如果你能分区加载数据,那就更好了。
删除PostgreSQL表中的许多行是很痛苦的,DROP TABLE
总是会赢。
发布于 2021-10-12 12:30:53
请记住,在PostgreSQL中,DELETE
实际上并不删除表中的数据--它只是将该行标记为对以后的事务不可见。稍后,当表被清理时,这些不可见的行会被标记为可供将来的INSERT
和UPDATE
重用。只有当表上的VACUUM FULL
运行时,空间才会被回收。因此,“在删除现有数据后将其导入到可维护的”会导致臃肿。
DROP TABLE
会立即回收空间。因此,使用分区和删除分区来回收空间会更有意义。
有关此行为的详细信息,请参阅documentation
https://stackoverflow.com/questions/69545584
复制相似问题