PostgreSQL - Добавление плавающего ограничения CHECK для элементов поля JSONB - PullRequest
0 голосов
/ 06 сентября 2018

В обычных RDBMS или ORDBMS я могу напрямую объявить десятичные / плавающие значения с определенной точностью и масштабом. Например:

CREATE TABLE Sample1
(
  ID NUMERIC(5,2)
);

При реализации того же идентификатора, который теперь является значением пары ключей в json, я использовал следующий подход

CREATE TABLE Sample1
(
  data jsonb,
  CONSTRAINT validate_Sample CHECK( length(data ->> 'ID') <= 8 AND ((data ->> 'ID')::numeric(5,2)) >= 0)
);

Хотя он работает, но я не уверен в его долгосрочном использовании.

Также я попробовал следующий подход.

CREATE TABLE Sample1
(
  data jsonb,
  CONSTRAINT validate_Sample CHECK(((data ->> 'ID')::numeric(5,2)) >= 0)
);

Хотя это ограничивает меня от ввода превышения указанного предела, но оно не ограничивает меня от ввода значений после десятичного числа, например

for numeric(5,2)
234.54 
234.541
234.192821

(All the above value worked)

While 2341.192821 gives "numeric field overflow" error.

для числового (5,2) Я просто хочу ограничить его двумя знаками после десятичной дроби. Пожалуйста, предложите.

...