Re: Rule recompilation
От | Alex Pilosov |
---|---|
Тема | Re: Rule recompilation |
Дата | |
Msg-id | Pine.BSO.4.10.10107121511190.8117-100000@spider.pilosoft.com обсуждение исходный текст |
Ответ на | Re: Rule recompilation (Jan Wieck <JanWieck@Yahoo.com>) |
Список | pgsql-hackers |
On Thu, 12 Jul 2001, Jan Wieck wrote: > Alex Pilosov wrote: > > I remember awhile ago, someone floated the idea of a dependency view which > > would list all objects and what OIDs they have in their plan. (i.e. what > > do they depend on). > > > > I'm definitely no expert in this, but to me, one possible implementation > > would be to enhance outfuncs to provide for creation tracking of all > > OIDs used in plan, and allow caller to receive this list and do something > > with it. This would actually be very simple, as only _outOidList will need > > to be modified...(but then again, I'm known for oversimplifying things :) > > > > Then, we can add ev_depends/oidvector to pg_rewrite and store the > > dependency there, and for stored procedures, add a prodepends/oidvector to > > pg_proc. > > > > Then, create union of pg_rewrite and pg_proc to list dependencies. > > > > Then, we would be able to provide warning when an object is dropped: > > 'The following objects depend on this blah blah', and possibly an action > > "alter database fixdepends oid" which would recompile everything that > > depends on that oid. > > > > How's this sound? > > Er - oversimplified :-) Yeah, most of my ideas end up like that, however see below ;) > > I remember it well, because Bruce is mentioning it every so > often and constantly tries to convince me to start a project > about a dependency table. I just think it's better not to do > it for 7.2 (didn't we wanted to have that released THIS > year?). > > Anyway, there's alot more to look at. Functions can be > referenced in views, indexes, operators, aggregates and maybe > more places. Views/rules can reference allmost any object. > And this only builds the permanent cross reference. For views, the necessary information (what does a view depend on) is in pg_rewrite anyway, which we can track with my proposal. For indices/operators/aggregates, pg_depends view may simply union the necessary information from the existing tables, no additional tracking is necessary. (example, if index depends on a proc, we already have that proc oid as indproc). If you are talking that tracking nested dependencies is hard, I don't disagree there, its a pain to do recursive queries in SQL, but the solution is to have (non-sql) function list_deep_depend(oid) which would recurse down the pg_depend and find what depends on an object... > We have to take a look at runtime information, telling which > prepared/saved SPI plan uses a particular object and trigger > automatic re-prepare for the plan in case. This doesn't bother me that much. Restart of postmaster is an acceptable thing to clear [really strange] things up. I'm actually not looking for 100% recompilation when an underlying object is changed, I'm looking for 100% reliable dependency information and a warning listing all objects that will break if I delete an object. Your proposal (automatic recompilation for rules) is orthogonal (but related) to what I'm suggesting. Having an ability to recompile a rule is great. Having an ability to see what rules depend on a given object is also great. Having an ability to recompile all rules that depend on a given object is even better ;) Having an ability to recompile _everything_ that depends on a given object is priceless, but we can take that one step at a time, first tackling rules... > For most objects, there is no such "recompile" possible - at > least not without storing alot more information than now. > Create a function and based on that an operator. Then you > drop the function and create another one. Hmmm, pg_operator > doesn't have the function name and argument types, it only > knows the old functions oid. How do you find the new function > from here? So basically we'd need some sort of pg_dump > snippet associated with every object and issue an internal > DROP/CREATE using that string to recompile it. Which may not be all that hard now, as most things that pg_dump does now are integrated in the backend, and all pg_dump does is call an appropriate function (ala pg_get_viewdef/pg_get_ruledef). But I am content leaving it for the next time, tackling rules for now.
В списке pgsql-hackers по дате отправления:
Предыдущее
От: ncm@zembu.com (Nathan Myers)Дата:
Сообщение: Re: Re: SOMAXCONN (was Re: Solaris source code)