Я хочу добавить уникальные значения с ограничением и значением по умолчанию от -1
до term
и oldestyear
:
ALTER TABLE live_mytable
ADD CONSTRAINT live_mytable_uq
UNIQUE (id,loan_type,coalesce(term,-1),coalesce(oldestyear, -1));
Поскольку моя цель - быть в состоянии оторваться -- вставить, если набор не существует, и обновить столбец apr
, если есть конфликт (если набор существует, но значение apr
отличается):
INSERT INTO live_mytable(id, loan_type, apr, term, oldestyear)
SELECT id, loan_type, apr, term, oldestyear
FROM imp_mytable
ON CONFLICT (id,loan_type,term,oldestyear)
DO UPDATE SET
apr = excluded.apr;
Причина, по которой мне нужно значение по умолчанию -1
потому, что unique не распознает нулевые значения, а столбцы term
и oldestyear
могут быть нулевыми.
Я новичок в PostgreSQL, поэтому не уверен, что мой подход верен.
Мой дизайн стола:
id |loan_type |apr |term|oldestyear|
---------|---------------|------|----|----------|
68459|auto new | 3.50| 48| |
68459|auto new | 3.50| 60| |
68459|auto new | 3.99| 72| |
68459|auto used | 3.24| 36| |
68459|auto used | 3.74| 48| |
68459|auto used | 3.74| 60| |
68459|auto used | 3.99| 72| |
10066|auto new | 2.99| 36| |
10066|auto new | 3.29| 48| |
Мой вопрос: как я могу перейти от imp_mytable
до live_mytable
, учитывая, что term
и oldestyear
может быть нулевым.И обновлять только, если apr
отличается, когда уникальный набор совпадает.