我在Windows上运行PostgreSQL 9.3.4。对于我的数据库中的许多表,我需要在另一个模式中创建另一个版本的表,记录更少(由简单条件决定)。
例如,假设我有一个包含1500万条记录的public.orders表。我想创建一个myschema.orders表,只包含2010年1月1日之后下达的订单。这种情况将表格从15万减少到150万条记录。
我的问题:我希望myschema.orders与public.orders具有相同的约束和索引,但是我希望在填充表之后添加它们,因为这应该更快。我宁愿不使用视图,因为它会慢很多。我能做到:
create table myschema.orders (like public.orders including all);
insert into myschema.orders select * public.orders where MyCondition = True
第一行在填充表之前复制所有约束(不包括外键)和索引。该代码可以工作,但比将相同记录插入没有约束的表中慢大约15倍。
首先填充表格然后复制约束的最简单方法是什么?或者我可以禁用然后重新启用约束吗?我需要为大约30个表执行此操作,每个表有大约10个约束和7个索引,因此我希望尽可能自动化该过程。
谢谢!