Sql PostgresJSONB数据类型
我正在使用PostgreSQL根据提供给Java代码的json输入创建一个表,并且我需要对在数据库中传递的json键进行验证,就像oracle一样,但这里的问题是整个jsonb数据类型列名让我们假设数据是单列。考虑我在下面的格式中得到JSON -Sql PostgresJSONB数据类型,sql,postgresql,jsonb,Sql,Postgresql,Jsonb,我正在使用PostgreSQL根据提供给Java代码的json输入创建一个表,并且我需要对在数据库中传递的json键进行验证,就像oracle一样,但这里的问题是整个jsonb数据类型列名让我们假设数据是单列。考虑我在下面的格式中得到JSON - { "CountActual": 1234, "CountActualCharacters": "thisreallyworks!" "Date": 09-11-2001 } 以上json的正确数据类型:-number10,varchar
{
"CountActual": 1234,
"CountActualCharacters": "thisreallyworks!"
"Date": 09-11-2001
}
以上json的正确数据类型:-number10,varchar50,date
现在要对其进行验证,我使用的是约束
问题1-
我试过另一种方式也喜欢-
ALTER TABLE public."Detail"
ADD CONSTRAINT CountActualCharacters CHECK (length(data ->> 'CountActualCharacters'::VARCHAR)<=50)
当传入789 in count实际字符而不是像78isgood!那样的varchar时,它显示insert成功
所以,请任何人给我建议一个适合varchar的PostgreSQL约束,就像我在查询1中写的那个数字一样
如果可能,日期类型也采用DD-MM-YYYY格式
我刚开始使用PostgresSQL,如果我听起来很傻,请原谅,但我真的被困在这里了。你可以使用jsonb_typeofdata->“CountActualCharacters”='string'
请注意单个箭头,因为->>将尝试将任何内容转换为字符串
您可以在此处阅读有关PostgreSQL中JSON函数的更多信息:
你对Oracle这样的公司是什么意思?Oracle只能验证JSON是否在结构上有效,仅此而已。如果确实需要数据类型验证,则使用具有正确数据类型的常规列。这是我的错误。现在,我需要验证输入json的内容。整个json数据都在单列中。buddy….您的检查约束验证密钥CountActualCharacters不能像varchar50一样存储超过50个字符。为什么在存储789这样的3个字符时会失败呢?谢谢alexey,但在那篇文章中没有提到varchar,如果我使用string,那么json中也包含空格和空格,它们将通过验证。我需要这个thu45io89来验证不是ths 097 ndkn lp.:您混淆了JSON类型和DB类型。他们是不同的。不接受空格是您的业务逻辑,不是某个类型可以验证的。@Ankur:您应该编辑您的问题并添加您当前在Oracle中使用的检查约束
ALTER TABLE public."Detail"
ADD CONSTRAINT "CountActualCharacters"
CHECK ((data ->> 'CountActualCharacters')::varchar >=0 AND length(data ->> 'CountActualCharacters') <= 50);
[ERROR: operator does not exist: character varying >= integer
HINT: No operator matches the given name and argument type(s).
You might need to add explicit type casts.]
ALTER TABLE public."Detail"
ADD CONSTRAINT CountActualCharacters CHECK (length(data ->> 'CountActualCharacters'::VARCHAR)<=50)
Insert into public."Detail" values ('{"
CountActual":1234,
"CountActualCharacters":789
"Date": 11-11-2009
}');