我正在尝试在PostgreSQL中移动中等数量的数据(数千万到数亿行(。
在设计系统时,我试图理解:INSERT INTO table(field1, field2) SELECT field1, field2 FORM other_table
的性能与PostgreSQL中的COPY FROM ... BINARY
相比如何?
我找不到任何直接涉及该问题的文档。我可以看到一些注意事项:
INTO INTO ... SELECT
需要从同一磁盘读取和写入COPY FROM ... BINARY
需要一个拥有数据的客户端,或者执行通过管道传输到COPY FROM ...
的往返COPY TO ...
但我敢肯定还有其他人,我希望有某种形式的规范性能指导,围绕对这些的比较期望。
最终,这样的问题只能通过测试来回答。
但是,如果要将数据从一个表复制到另一个表,INSERT ... SELECT ...
应该性能更好,因为它不需要将数据保存到中间文件或通过客户端-服务器连接。
速度提示:
加载数据时,对新表没有约束和索引,但之后添加它们。
确保
max_wal_size
很高。
之后我会VACUUM (FREEZE)
新桌子(这不会干扰桌子上的正常工作(,以使未来的防环绕自动真空运行速度更快。