Database PostgreSQL错误[42804]:运算符类_bpchar“行动”;不接受数据类型字符

Database PostgreSQL错误[42804]:运算符类_bpchar“行动”;不接受数据类型字符,database,postgresql,psql,Database,Postgresql,Psql,我正在尝试为长度为1的字符列创建gin索引。(这只是一个简单的Y/N列)。如果我运行此SQL: create index INDEX_NAME on schema.table_name using gin(field_name); 我得到这个错误: SQL错误[42704]:错误:数据类型字符没有访问方法“gin”的默认运算符类 提示:必须为索引指定运算符类或为数据类型定义默认运算符类 如果我显式地设置操作符类,如下所示 create index INDEX_NAME on schema.ta

我正在尝试为长度为1的字符列创建gin索引。(这只是一个简单的Y/N列)。如果我运行此SQL:

create index INDEX_NAME on schema.table_name using gin(field_name);
我得到这个错误:

SQL错误[42704]:错误:数据类型字符没有访问方法“gin”的默认运算符类 提示:必须为索引指定运算符类或为数据类型定义默认运算符类

如果我显式地设置操作符类,如下所示

create index INDEX_NAME on schema.table_name using gin(field_name _bpchar_ops);
我得到这个错误:

SQL错误[42804]:错误:运算符类“\u bpchar\u ops”不接受数据类型字符

注:

我已经运行了这个SQL来创建gin扩展

 create extension btree_gin;

字符
没有GIN运算符类,请参阅

由于长度为1,因此可以使用类型“char”:

CREATE TABLE table_name (field_name "char");
CREATE INDEX ON table_name USING gin (field_name char_ops);

但是这样的索引有什么用呢?

字段的实际数据类型是什么?显示
\d tablename
。据猜测,它属于
“char”
类型,这是一种特殊的内部类型,与
char
(无引号)或
character
不同,后者是SQL标准的变长空白填充字符数据类型数组类型的内部名称(例如
text[]
的内部名称是
\u text
)。对于
char
“char”
,不应使用数组类型的运算符类。-对于Y/N字段,请改用
布尔类型。它被设计用来处理这些数据通常,索引在
布尔值
(或
布尔值
-类字段:具有如此少的不同值的列)上没有多大价值。但是,您可以使用@CraigRinger,它是长度为1的“字符”类型。。。请参阅可用的运算符类(及其各自的类型)了解:,@pozs,从您建议的GIN链接,我得到字符数据类型的类_bpchar_ops。(仅供参考,目前我无法将数据类型修改为布尔型或其他任何类型)。OP的用例相当于一个
布尔型
。但是是的,
btree\u gin
模块确实为
“char”
类型定义了一个,但是它在单列索引中非常无用。@pozs您对我的情况有什么建议?@TᴀʀᴇǫMᴀʜᴍᴏᴏᴅ 我已经建议使用部分索引两次了。但这取决于你的实际OFC问题,你想用gin索引来解决这个问题。@pozs很抱歉,我错过了你在我文章中的最后一条评论。@Laurenz Allbe我看到“char”类型也有同样的错误