Database PostgreSQL错误[42804]:运算符类_bpchar“行动”;不接受数据类型字符
我正在尝试为长度为1的字符列创建gin索引。(这只是一个简单的Y/N列)。如果我运行此SQL: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
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”类型也有同样的错误