Обсуждение: [bug] relcache leaks in get_object_address
I noticed a problem of get_object_address() with missing_ok = true. When we try to solve the name of nonexistent rule/trigger/constraint on a particular existing table, get_object_address_relobject() opens the relation, but address.objectId = InvalidOid shall be set. I think it should be closed if the queried object was missing, although existing code does not invoke get_object_address() with missing_ok = true. Thanks, -- KaiGai Kohei <kaigai@kaigai.gr.jp>
The attached patch fixes this problem. Unfortunately, we have no code that invokes get_object_address() with missing_ok = true now, so please apply a couple of patches to rework DROP statement of mine. DROP TRIGGER no_such_trigger ON existing_table; shall cause a relcache reference leaks, without this patch. Thanks, 2011/10/13 Kohei KaiGai <kaigai@kaigai.gr.jp>: > I noticed a problem of get_object_address() with missing_ok = true. > > When we try to solve the name of nonexistent rule/trigger/constraint on > a particular existing table, get_object_address_relobject() opens the > relation, but address.objectId = InvalidOid shall be set. > > I think it should be closed if the queried object was missing, although > existing code does not invoke get_object_address() with missing_ok = true. > > Thanks, > -- > KaiGai Kohei <kaigai@kaigai.gr.jp> > -- KaiGai Kohei <kaigai@kaigai.gr.jp>
Вложения
On Thu, Oct 13, 2011 at 12:27 PM, Kohei KaiGai <kaigai@kaigai.gr.jp> wrote: > The attached patch fixes this problem. > Unfortunately, we have no code that invokes get_object_address() > with missing_ok = true now, so please apply a couple of patches > to rework DROP statement of mine. > > DROP TRIGGER no_such_trigger ON existing_table; > > shall cause a relcache reference leaks, without this patch. We could argue that that's a bug in your drop reworks rather than the existing code, but I'm willing to go along with this approach, so, committed. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company