> On Mar 2, 2020, at 8:12 AM, Alvaro Herrera <alvhe...@2ndquadrant.com> wrote:
> 
> On 2020-Feb-29, Mark Dilger wrote:
> 
>> You may want to think about the embedding of InvalidOid into the EndCommand 
>> output differently from how you think about the embedding of the rowcount 
>> into the EndCommand output, but my preference is to treat these issues the 
>> same and make a strong distinction between the commandtag and the embedded 
>> oid and/or rowcount.  It's hard to say how many future features would be 
>> crippled by having the embedded InvalidOid in the commandtag, but as an 
>> example *right now* in the works, we have a feature to count how many 
>> commands of a given type have been executed.  It stands to reason that 
>> feature, whether accepted in its current form or refactored, would not want 
>> to show users a pg_stats table like this:
>> 
>>   cnt   command
>>   ----   -------------
>>   5    INSERT 0
>>   37  SELECT
>>      
>> What the heck is the zero doing after the INSERT?  That's the hardcoded 
>> InvalidOid that you are apparently arguing for.  You could get around that 
>> by having the pg_sql_stats patch have its own separate set of command tag 
>> strings, but why would we intentionally design that sort of duplication into 
>> the solution?
> 
> This is what I think Tom means to use in EndCommand:
> 
>            if (command_tag_display_rowcount(tag) && !force_undecorated_output)
>                snprintf(completionTag, COMPLETION_TAG_BUFSIZE,
>                         tag == CMDTAG_INSERT ?
>                         "%s 0 " UINT64_FORMAT : "%s " UINT64_FORMAT,
>                         tagname, qc->nprocessed);
>            else
>                ... no rowcount ...
> 
> The point is not to change the returned tag in any way -- just to make
> the method to arrive at it not involve the additional data column in the
> data file, instead hardcode the behavior in EndCommand.

Thanks, Álvaro, I think I get it now.  I thought Tom was arguing to have 
"INSERT 0" rather than "INSERT" be the commandtag.

> I don't
> understand your point of pg_stats_sql having to deal with this in a
> particular way.  How is that patch obtaining the command tags?  I would
> hope it calls GetCommandTagName() rather than call CommandEnd, but maybe
> I misunderstand where it hooks.

My objection was based on my misunderstanding of what Tom was requesting.

I can rework the patch the way Tom suggests.


—
Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company





Reply via email to