I've just found a bit of undesirable functionality which I would call a bug in pg_dump. I'm not sure everyone would, but we'll see.

Problem: the script which dumps globals such as users (pg_dumpall -g) involves deleting *all* users from the pg_shadow table via a direct update to that table. What this means in effect is that, should you attempt to use "pg_dumpall -g" to *move* a set of users from one active server to another (such as for transferring a database) the resulting pg_dump file will delete all of the users which previously existed on that server.

This is a non-trivial accident to have happen on a shared machine; once users are dumped, all of their ownerships and permissions go with them. If you have a complex permissions system, better hope you backed up first!

I find this behavior highly undesirable, and consider it a bug. The globals dump should just add users, and not delete any.

Yeah, it's nasty. One of the fixes that's already in from me is to make the DELETE FROM pg_shadow and DELETE FROM pg_group only appear when -c mode is set.


Maybe even when -c mode is set we should use DROP USER commands?

Do others agree?

Chris


---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faqs/FAQ.html

Reply via email to