Postgres:将大量数据子集(10k+行)从一个模式复制到另一个模式以供立即使用

Postgres: Copying large subsets of data(10k+rows) from one schema to another for immediate use

我需要按需将行从一个 Postgres 模式推送到另一个模式。一个模式存储内容,另一个模式是数据子集的副本,最终用户将添加、修改、删除这些数据以供其自定义使用。随着更多内容的添加以及最终用户吸收和定制更多内容,每个架构表中有 10+ 百万条记录并且还在增长。数据移动将是从多个表到另一个模式中的多个表的数千条记录。这些模式在同一个数据库中。这些数据将一直在移动,并且需要非常快,以便最终用户可以在选择内容后立即开始定制。我已经研究了 COPY 函数以及触发器复制,但 none 似乎可以根据需要快速执行。我不能在插入之前删除索引,因为消费者经常大量使用这些表。任何建议将不胜感激。

由于您要从一个数据库的一个模式中的一堆表复制到同一数据库的另一个模式,并且只有您最快的方法是使用 INSERT INTO ... SELECT FROM 才能开始, 运行 作为有权访问这两个架构的用户,例如:

INSERT INTO schema2.table_y ( field, field, field )
SELECT field, field, field
FROM schema1.table_y
WHERE user filter condition

由于您必须对多个表执行此操作,因此您可以将其包装在一个大事务中,或者在一个大查询中使用 Writeable CTEs 执行多个插入语句。

这确实是获取数据 副本 的最快方法。然而,它仍然需要非零时间;提取数据的 SELECT 查询都需要一些时间,在多个表中插入数千行也需要一些时间。您减少此时间的方法是一般查询和性能优化。

如果操作有效,用户不需要数据副本,而只需要数据的实时子集,那么您可以探索使用 VIEWs,包括可更新的数据。但听起来你需要一份副本。