Hi Mana,
A starting point would be reading about the batch upsert functionality:
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