【发布时间】:2019-02-09 22:30:05
【问题描述】:
尝试在使用 AuroraDB - PostgreSQL 9.6 上的 xpath 表达式的 XML 数据类型列上创建 btree 索引时遇到此错误:
ERROR: could not identify a comparison function for type xml
SQL state: 42883
这个 2009 年没有明确解决方案的线程是我发现的唯一一个讨论此错误消息的线程,该错误消息是关于为更早版本的 PostgreSQL 创建基于 xpath 的索引: https://www.postgresql-archive.org/Slow-select-times-on-select-with-xpath-td2074839.html
在我的情况下,我还需要指定命名空间,并且该线程中的原始海报将 xpath 表达式的结果转换为 text[] ,这对我来说也是错误的 - 但为什么甚至需要呢?即使我有数千行要处理,我也没有看到 PostgreSQL 使用过我的索引。
所以我尝试了一个更简单的案例,但错误仍然存在 - 如果可以,请说明原因:
CREATE TABLE test
(
id integer NOT NULL,
xml_data xml NOT NULL,
CONSTRAINT test_pkey PRIMARY KEY (id)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
CREATE INDEX test_idx
ON test USING btree
(xpath('/book/title', xml_data))
结果消息是:
ERROR: could not identify a comparison function for type xml
SQL state: 42883
数据库编码为 UTF8。 排序规则和字符类型是 en_US.UTF-8。
还有一些示例插入语句:
insert into source_data.test(id, xml_data)
values(1, XMLPARSE (DOCUMENT '<?xml version="1.0"?><book><title>Manual</title><chapter>1</chapter><chapter>2</chapter></book>'))
insert into source_data.test(id, xml_data)
values(2, XMLPARSE (DOCUMENT '<?xml version="1.0"?><book><title>Apropos</title><chapter>1</chapter><chapter>2</chapter></book>'))
【问题讨论】:
标签: xml postgresql xpath indexing amazon-aurora