On Fri, Dec 16, 2011 at 10:32 AM, Noah Misch <n...@leadboat.com> wrote: >> I agree, but my point is that so far we have no callbacks that differ >> only in that detail. I accept that we'd probably want to avoid that. > > To illustrate what I had in mind, here's a version of your patch that has five > callers sharing a callback. The patch is against d039fd51f79e, just prior to > your recent commits.
I don't think RenameRelation() ought to wait until we've taken the lock before doing this: + aclresult = pg_namespace_aclcheck(namespaceId, GetUserId(), ACL_CREATE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, ACL_KIND_NAMESPACE, + get_namespace_name(namespaceId)); I'm not sure how we can distinguished in a principled way between permissions checks that must be conducted before locking the relation and those that can be done afterwards. And I don't really want to make that distinction, anyhow. But I see your point, otherwise. What I'm tempted to do is define a new function RangeVarGetRelidCheckOwner(RangeVar *relation, LOCKMODE lockmode, bool system_tables_ok) that will arrange to look up the OID, check that you own it, optionally check that it's not a system table, and acquire the specified lock. Internally that will call RangeVarGetRelidExtended() with a callback; the callback arg can be used to pass through the system_tables_ok flag. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers