如何在同一个 postgresql 数据库的模式之间最有效地移动相似表中的数据(相同的列数、数据类型。如果它们不一样,可以用我希望的视图来实现)?
编辑
抱歉含糊不清。我打算将其他模式用作不经常需要的数据的存档(以提高性能)。更准确地说,超过 2 年的数据将被存档。服务器下线是可以的,但不超过一天,最多2个。这是一个中型公司的会计软件。根据自由主义者的估计,一年中的记录数量不会接近一百万。
如何在同一个 postgresql 数据库的模式之间最有效地移动相似表中的数据(相同的列数、数据类型。如果它们不一样,可以用我希望的视图来实现)?
编辑
抱歉含糊不清。我打算将其他模式用作不经常需要的数据的存档(以提高性能)。更准确地说,超过 2 年的数据将被存档。服务器下线是可以的,但不超过一天,最多2个。这是一个中型公司的会计软件。根据自由主义者的估计,一年中的记录数量不会接近一百万。
insert into target_schema.table_one (col1, col2, col3)
select col1, col2, col3
from source_schema.other_table
where <some condition to select the data to be moved>;
如果你真的想“移动”数据(即从源表中删除行),你需要可以使用
如果表是你不能使用的外键的目标,那么truncate
你需要使用
delete from source_schema.other_table
where <some condition to select the data to be moved>;
如果您愿意,可以将这两个步骤合并到一个语句中:
with deleted_data as (
delete from source_schema.other_table
where <some condition to select the data to be moved>;
returning *
)
insert into target_schema.table_one (col1, col2, col3)
select col1, col2, col3
from deleted_data;