On Mon, Mar 21, 2016 at 2:19 PM, Abhijit Menon-Sen <a...@2ndquadrant.com> wrote:
> At 2016-03-21 13:04:33 +0300, a.korot...@postgrespro.ru wrote: > > > > I'm not sure why we want to make new dependency type by ALTER FUNCTION > > command, not ALTER EXTENSION? > > It's a matter of semantics. It means something very different than what > an 'e' dependency means. The extension doesn't own the function (and so > pg_dump shouldn't ignore it), but the function depends on the extension > (and so dropping the extension should drop it). > > > The argument could be that 'x' dependency type would be used for other > > objects not extensions. > > I suppose this is possible, but yes, I agree with you that it's not > clear how or why this would be useful. > > > So, I would prefer this patch to extend ALTER EXTENSION command while > > it's aimed to this particular problem. > > OK, so that's what the patch does, and it's certainly the simplest > approach for reasons discussed earlier (though perhaps not as clear > semantically as the ALTER FUNCTION approach). But: > > > I even think we could extend existent grammar rule > > > > | ALTER EXTENSION name add_drop FUNCTION > function_with_argtypes > > > *************** AlterExtensionContentsStmt: > > > *** 3982,3987 **** > > > --- 3987,3993 ---- > > > n->objtype = OBJECT_FUNCTION; > > > n->objname = $6->funcname; > > > n->objargs = $6->funcargs; > > > + n->deptype = 'e'; > > > $$ = (Node *)n; > > > } > > How exactly do you propose to do this, i.e., what would the final > command to declare an 'x' dependency look like? > I'm proposed something like this. extension_dependency_type: DEPENDENT { $$ = 'x'; } | /*EMPTY*/ { $$ = 'e'; } ; ... | ALTER EXTENSION name add_drop extension_dependency_type FUNCTION function_with_argtypes { AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); n->extname = $3; n->action = $4; n->objtype = OBJECT_FUNCTION; n->objname = $7->funcname; n->objargs = $7->funcargs; n->deptype = $5; $$ = (Node *)n; } I didn't try it. Probably it causes a grammar conflicts. In this case I don't insist on it. ------ Alexander Korotkov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company