如何在PostgreSQL中限制数组文本对象的长度?

ws51t4hk  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(134)

有没有办法在一个数组列上添加一个约束来限制文本对象的长度?我知道我可以在没有约束的情况下做到这一点:

colA varchar(100)[] not null

我试着用下面的方法来做这件事:

alter table "tableA" ADD CONSTRAINT "colA_text_size"
    CHECK ((SELECT max(length(pc)) from unnest(colA) as pc) <= 100) NOT VALID;
alter table "tableA" VALIDATE CONSTRAINT colA_text_size;

却得到了错误:不能在检查约束条件中使用子查询(SQLSTATE 0A000)

f4t66c6m

f4t66c6m1#

请尝试使用下列定义做为检查条件约束:(参见demo,对于我限制长度为25的演示)。

check (length(replace(array_to_string( text_array ,','), ',','')) <= 100)

用途:
1.首先,函数array_to_string(...)将数组转换为csv。

  1. replace()函数会移除逗号,并以零长度字串''取代它们。
    1.函数的作用是:获取字符串中剩余的字符数。
    1.最后,将该数字与极限值(100)进行比较,并且check约束要么通过要么失败。
    参考文件:array_to_string()replace(), length()

相关问题