PostgreSQL中int2vector与int2array的区别?含int4vector/int4array相关疑问
生成PostgreSQL的int2vector/int4vector类型值
基础背景
int2vector、int4vector是PostgreSQL的内部系统类型,主要用于系统目录(如pg_trigger)存储固定长度的小整数序列,官方公开文档对这类类型的说明有限。它们和同基础类型的array(int2[]/int4[])存储逻辑相似,但OID不同(int2vector OID为22,int2[]为1005;int4vector OID为27,int4[]为1007)。
生成方式
1. 直接调用类型构造函数
内部类型自带构造函数,传入数组格式字符串即可生成对应类型值:
- 生成int2vector:
SELECT int2vector('{1,2}'); - 生成int4vector:
SELECT int4vector('{10,20,30}');
2. 从对应array类型强制转换
利用vector与同类型array的相似性,先构造array再转换:
- int2[]转int2vector:
SELECT '{1,2}'::int2[]::int2vector; -- 或者CAST语法 SELECT CAST('{1,2}' AS int2vector); - int4[]转int4vector:
SELECT '{10,20}'::int4[]::int4vector;
libpq二进制交互注意事项
在libpq二进制模式下处理这些类型时:
- int2vector的二进制格式是无长度前缀的int16(2字节整数)数组,和int2[]的二进制格式(带数组头信息)不同
- int4vector的二进制格式是无长度前缀的int32(4字节整数)数组
- 可通过系统表查看类型存储细节:
SELECT typname, typlen, typstorage FROM pg_type WHERE typname IN ('int2vector', 'int4vector');
内容的提问来源于stack exchange,提问作者Eric Grange
相关产品推荐
相关产品推荐

