Я использую PostgreSQL для создания таблицы на основе входных данных json, переданных моему Java-коду, и мне нужны проверки для ключей JSON, которые передаются в базу данных точно так же, как oracle, но проблема здесь заключается в том, что полное имя столбца типа данных jsonb, скажем, данные это один столбец. Считайте, что я получаю JSON в формате ниже -
{
"CountActual": 1234,
"CountActualCharacters": "thisreallyworks!"
"Date": 09-11-2001
}
Правильный тип данных выше JSON: - number(10)
, varchar(50)
, date
Теперь для проверки правильности я использую ограничения
Запрос 1 -
ALTER TABLE public."Detail"
ADD CONSTRAINT "CountActual"
CHECK ((data ->> 'CountActual')::bigint >=0 AND length(data ->> 'CountActual') <= 10);
- Работает нормально.
Но для Запрос 2 -
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
}');
И его показы вставляются успешно при прохождении 789 в CountActualCharacters вместо varchar вроде "the78isgood!".
Поэтому, пожалуйста, кто-нибудь может предложить мне правильное ограничение для PostgreSQL для varchar
, как и number
, которое я написал в Query 1.
И, если возможно, для типа Дата также в формате DD-MM-YYYY
.
Я только начал с PostgresSQL, простите, если я звучу глупо, но я действительно застрял здесь.