Hi Mana,
A starting point would be reading about the batch upsert functionality:
https://www.postgresql.org/docs/current/static/sql-insert.html
You would do something like:
INSERT INTO table ON CONFLICT update...
This operation would be atomic. You can also look into deferrable
constraints such that you would perform all your insert / update operations
in a transaction block and accommodate for the constraints.
I hope this helps to get you on the right track!
Thanks,
Jordan Deitch
http://id.rsa.pub