我在大表上添加了 2 个新列。这 2 个新列没有默认值,也没有约束。我还想在这两个新列上添加一个复合部分索引。
CREATE UNIQUE INDEX CONCURRENTLY index_users_on_col1_and_col2 ON public.users USING btree (col1, col2) WHERE ((col1 IS NOT NULL) AND (col2 IS NOT NULL));
我需要同时完成这项工作以避免写入锁定。这 2 个新列将在我添加它们并添加索引后的几天内开始具有价值。
所以基本上索引在创建时会是空的。
有没有一种方法可以通过对 PostgreSQL “说”它应该直接创建空索引而不扫描表来创建索引?
没有内置的方法可以做到这一点。如果您愿意编译自己的 PostgreSQL 二进制文件,那么实现它可能相对容易。这部分代码在版本之间进行了一些修改,以添加新功能和性能改进,因此您必须针对特定版本。