PostgreSQL中创建ARR_HNW_ID类型时出现“Syntax error at or near "TYPE"”错误的解决求助
解决PostgreSQL创建自定义类型的语法错误问题
嘿,这个问题我之前帮人排查过!PostgreSQL并不支持Oracle里的VARRAY语法,这就是你触发Syntax error at or near "TYPE"错误的核心原因。
下面给你两种贴合需求的解决方案:
方案1:直接用内置数组类型加约束
如果只是在某个表字段里需要最多50个整数的数组,不用单独创建类型,直接这么写就行:
CREATE TABLE your_table_name ( hnw_ids INTEGER[] CHECK (array_length(hnw_ids, 1) <= 50) );
这个约束会确保数组里的元素数量不超过50个。
方案2:创建自定义域(Domain)复用规则
如果你需要在多个表或者场景里重复使用这个有长度限制的数组类型,可以创建一个自定义域:
CREATE DOMAIN ARR_HNW_ID AS INTEGER[] CHECK (array_length(VALUE, 1) <= 50);
之后就像使用普通数据类型一样调用它:
CREATE TABLE your_table_name ( hnw_ids ARR_HNW_ID );
额外提示
如果你的需求是必须恰好50个元素的固定长度数组,只需要把CHECK条件改成array_length(hnw_ids, 1) = 50就行。
PostgreSQL的数组本身是可变长度的,没有Oracle VARRAY那种固定容量的设计,所以用CHECK约束来限制元素数量是最适配的替代方案。
内容的提问来源于stack exchange,提问作者RvSingh3213
相关产品推荐
相关产品推荐

