A thread over in -admin has made me realize the truth of $SUBJECT.
With --clean, pg_dumpall does indeed emit a DROP command for each
role, tablespace, or database ... just before recreating it. This
takes no account of dependencies and so the role and tablespace
drops are pretty much guaranteed to fail due to databases still
depending on them.
I'm not sure if we need any real dependency analysis. It seems
like it would be sufficient to issue the drops in a separate
pass:
- drop all the databases
- drop all the tablespaces
- drop all the roles
- go on with creation
The roles might still have references to each other in step 3,
but the DROP ROLE docs claim that's okay (I haven't tested).
Comments?
regards, tom lane