Re: BUG #2085: pg_dump incompletely dumps ACLs - Mailing list pgsql-bugs
From | David J N Begley |
---|---|
Subject | Re: BUG #2085: pg_dump incompletely dumps ACLs |
Date | |
Msg-id | Pine.LNX.4.61.0512040254310.17562@viper.uws.edu.au Whole thread Raw |
In response to | Re: BUG #2085: pg_dump incompletely dumps ACLs (Alvaro Herrera <alvherre@commandprompt.com>) |
Responses |
Re: BUG #2085: pg_dump incompletely dumps ACLs
|
List | pgsql-bugs |
On Fri, 2 Dec 2005, Alvaro Herrera wrote: > Tom Lane wrote: > > > Given that -C overlaps pg_dumpall functionality anyway, maybe it should > > dump GRANT/REVOKE commands for the database too? Any thoughts pro or > > con out there? See below - I hadn't tried it previously, but having now tried pg_dumpall I've found it also has an ACL-loss bug. > I agree. Why have only half a funcionality if we can have the whole > thing? Maybe we can take that part of of pg_dumpall if at all possible, > and make it use pg_dump's. Speaking as just a dumb end-user, I get the impression that pg_dump is used to extract a single database, not just part of a database; sayeth the manual: "pg_dump is a utility for backing up a PostgreSQL database. [...] Script dumps are plain-text files containing the SQL commands required to reconstruct the database to the state it was in at the time it was saved." Unless I'm missing something, that means pg_dump should include (when told to do so, as in this case) _all_ commands required to restore the database "to the state it was in at the time it was saved". What's happening at the moment is that some GRANT/REVOKE commands are included but others are missing, meaning any transfer of a database is potentially losing (at least some) ACLs along the way. I have verified that _no_ GRANT/REVOKE commands are dumped for the database, and only some GRANT/REVOKE commands are dumped for "language" objects (see below); near as I can tell, all GRANT/REVOKE commands are dumped for "function" and "table" objects, but it's early in the morning so I may be missing something. When I say that "only some" commands are dumped for "language" objects, remember my original bug report - I tripped over this whilst verifying whether or not "{}" ACLs (ie., not even owner or PUBLIC) are correctly dumped/restored. For functions, I find this in the pg_dump output: REVOKE ALL ON FUNCTION function_check() FROM PUBLIC; REVOKE ALL ON FUNCTION function_check() FROM postgres; In other words, dump/restore appears to do its job. For the database, there are no GRANT/REVOKE statements at all. For "language" objects, pg_dump provides: REVOKE ALL ON LANGUAGE plpgsql FROM PUBLIC; Here, a second statement revoking rights from the owner (in order to achieve the "{}" ACL in the original database) is missing (yet it revoked rights from PUBLIC - why only half an ACL?). > Does pg_dump -C include the database comment already? If not, maybe > it's worth to add it as well. A very basic test for me shows the database comment is already included. Bearing in mind Tom's statement regarding pg_dump versus pg_dumpall, I ran the latter to check its output (though in reality it's not the entire cluster I'm trying to dump here): - pg_dumpall includes the two missing REVOKE statements on the database that pg_dump is mising; - both pg_dump and pg_dumpall include the database comment; and, - both pg_dump and pg_dumpall are missing the second REVOKE statement (for the owner) on the "language" object (ie., bug in both). I don't know what other objects may be affected (either in pg_dump or pg_dumpall). Cheers..
pgsql-bugs by date: