Database Change Management
to me the most important thing in this context is to use transactions. PostgreSQL supports transactional DDLs and people should make heavy use of it.

the rule of thumb is: COMMIT stuff to the real system as late in the process as possible. this avoids the need to rollback stuff and to produce conflicts of all kinds. so transactions are really the key to making things work in a reasonable way. deployment should always happen in a transactional way as well.

one thing is also to use includes:

BEGIN;
\i module_1.sql
\i module_2.sql ...


it allows people to work on various files concurrently. it makes using git and so on a lot easier. 

also, consider looking at CREATE EXTENSION. it allows a pretty nice way to handle versions and all that. i strongly encourage to use that one as well. git is also a good thing to have in general.