Acontece que você deve conceder a propriedade explícita de todos os objetos no banco de dados ao proprietário após a restauração. O proprietário não é um superusuário. Não basta apenas definir o proprietário no momento da criação do banco de dados. A solução final para migração é assim:
no cliente:
pg_dump -f dump.sql -Ox database
no servidor:
su postgres
dropdb database
createdb database -O user
psql database -f dump.sql
e, em seguida, para definir os privilégios:
psql database -c "GRANT ALL ON ALL TABLES IN SCHEMA public to user;"
psql database -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public to user;"
psql database -c "GRANT ALL ON ALL FUNCTIONS IN SCHEMA public to user;"
Observe que poderíamos ter executado o comando sql no console psql, mas este formulário é facilmente incorporável em scripts e outros.