我在搭建 PostgreSQL DB 时遇到问题,因为 npgsql 不能很好地处理同一列上有两个索引的表。这是我在 github 上的项目的链接。
我正在尝试查找这些索引/表,以便我可以将它们从我的脚手架命令中排除。
例子:
CREATE TABLE public.altreproc (
apcod integer NOT NULL,
aptip character(3),
apcam character(3),
CONSTRAINT altreproc_pkey PRIMARY KEY (apcod)
);
CREATE INDEX ialtreproc1
ON public.altreproc
USING btree
(aptip COLLATE pg_catalog."default");
CREATE INDEX ialtreproc2
ON public.altreproc
USING btree
(apcam COLLATE pg_catalog."default");
CREATE INDEX ialtreproc3
ON public.altreproc
USING btree
(aptip COLLATE pg_catalog."default" DESC);
我的问题是当一个表有 2 个不同的索引具有相同的列(一个ASC
和一个DESC
)时;我试图在我试图搭建的数据库中查询这样的表/索引。
我的目标是找到在同一列上包含多个索引的表。
此查询检索在相同(列表)表列(以相同顺序)上构建的索引的完整列表:
pg_index.indkey
是数据类型int2vector
并包含,引用手册:因此,此列上的匹配以相同的顺序断言相同的列。
排序顺序、运算符类、排序规则或任何其他装饰器可以不同。
约束:
另外:您示例中的索引
ialtreproc3
是死运费,您应该将其删除。Postgres 可以以几乎相同的速度双向扫描索引。例外:具有混合排序顺序的多列索引。看:虽然唯一的区别是排序顺序,但在同一列上维护多个 btree 索引是没有意义的。