25장. PostgreSQL Writer와 대사
H2는 unit·smoke용이다. 운영 의미는 PostgreSQL integration test에서 확인한다. 문법, type, isolation과 lock이 다르다. 대량 작업은 staging table에 load한 뒤 validation과 set-based upsert를 분리할 수 있다.
insert into settlement(order_id,business_date,gross_amount,fee_amount,net_amount,input_checksum)
values (:orderId,:date,:gross,:fee,:net,:checksum)
on conflict (order_id,business_date) do update
set gross_amount=excluded.gross_amount,
fee_amount=excluded.fee_amount,
net_amount=excluded.net_amount
where settlement.input_checksum=excluded.input_checksum;
기존 checksum이 다르면 조용히 덮지 않고 conflict table로 보낸다. 대사는 source row/gross, rejected, output row/gross/fee/net을 하나의 ID로 묶는다. source_gross = rejected_gross + output_gross, output_gross = fee + net을 모두 확인한다.