Вы можете сделать это в триггере AFTER INSERT OR UPDATE OR DELETE
, который запускает FOR EACH STATEMENT
. Это тоже программирование, хотя и не на стороне клиента.
В триггере вы можете рассчитать суммы, подобные этой (при условии, что invoice_id
равно serial
):
INSERT INTO invoice
(account_id, amount, current)
SELECT account_id, sum(amount), 'result'
FROM invoice
WHERE current IS NULL
GROUP BY account_id
HAVING count(*) > 1
ON CONFLICT (account_id, current)
DO UPDATE
SET amount = EXCLUDED.amount;
Это требует ограничения UNIQUE
для (account_id, current)
и использует тот факт, что уникальные ограничения позволяют & ldquo; дублировать & rdquo; до тех пор, пока включены NULL.