我在PostgreSQL数据库中的表在名为vector
的列中存储了大量的整数数组。由于所有的数字都适合从-128到127的范围,并且为了保存空间,我使用bytea
类型。我需要使用pgvector
扩展提供的点积距离运算符<#>
,例如:
select id
from MyTable
order by vector<#>key
limit 10;
字符串
然而,这个操作符不支持bytea
类型。我想把我的向量转换成int[]
,然后可以转换成pgvector
支持的vector
类型。
我认为将bytea
转换为int[]
的一般方向可能是沿着以下路线:
SELECT string_to_array(encode(vector, 'escape'), '\\')::int[]
FROM MyTable;
型
我如何修改它以使转换工作?
1条答案
按热度按时间bkhjykvo1#
您可以使用
generate_series()
加入并使用get_byte()
函数:字符串
这将是缓慢和低效的,但这是可以预料的,如果你试图不惜一切代价保存空间。
我建议使用
smallint[]
,它使用每个数字2个字节。如果你运行的是PostgreSQL v15或更高版本,你也可以使用内部数据类型
"char"
的数组,它每个元素只占用一个字节:型
要获取单个元素,可以使用
型
"char"[]
每个元素使用一个字节,每个数组使用21个字节的开销(bytea
每个值的开销为一个或四个字节,具体取决于大小)。