Disclosure: I build Schemity , a desktop ERD tool - this post is from our blog and uses it for the examples.
TL;DR: Pick by the question you need answered. log_statement = 'ddl' records what was attempted, rolled-back statements included, and misses DDL run inside a DO block or function. An event trigger records committed changes with the login that made them, but only a superuser can install it, and a superuser can switch it off without leaving a trace in it. A schema snapshot compared with the live database shows what is different now, however it got there, but not who did it.
There are three ways to track schema changes in PostgreSQL, and they answer three different questions. The server log with log_statement = 'ddl' records what someone tried to run. An event trigger records what was committed, and by whom. A schema snapshot compared with the live database shows what is different now, whoever made the change and however they made it.
Each one has a gap the others cover.…