On Mon, Mar 4, 2019 at 3:13 AM Iwata, Aya <iwata....@jp.fujitsu.com> wrote:
> 2. Prepare "output level". There are 3 type of levels;
>         - TRADITIONAL   :  if set, outputs protocol messages
>         - LEVEL1                :  if set, outputs phase and time
>         - LEVEL2                :  if set, outputs both info TRADITIONAL and 
> LEVEL1

I am not impressed by this proposal.  I think what we should be
focusing on here is how to clearly display the contents of a message.
I think we should be looking for a way to display each message on a
single line in a way that indicates the data types of the constituent
fields.  For example, here's a DataRow message as output by PQtrace
today:

>From backend> D
>From backend (#4)> 42
>From backend (#2)> 4
>From backend (#4)> 6
>From backend (6)> public
>From backend (#4)> 4
>From backend (4)> tab1
>From backend (#4)> 5
>From backend (5)> table
>From backend (#4)> 5
>From backend (5)> rhaas

What I'd like to see for a case like this is something like:

<<< 'D' 42 #4 6 'public' 4 'tab1' 5 'table' 5 'rhaas'

And here's a RowDescription message today:

>From backend> T
>From backend (#4)> 101
>From backend (#2)> 4
>From backend> "Schema"
>From backend (#4)> 2615
>From backend (#2)> 2
>From backend (#4)> 19
>From backend (#2)> 64
>From backend (#4)> -1
>From backend (#2)> 0
>From backend> "Name"
>From backend (#4)> 1259
>From backend (#2)> 2
>From backend (#4)> 19
>From backend (#2)> 64
>From backend (#4)> -1
>From backend (#2)> 0
>From backend> "Type"
>From backend (#4)> 0
>From backend (#2)> 0
>From backend (#4)> 25
>From backend (#2)> 65535
>From backend (#4)> -1
>From backend (#2)> 0
>From backend> "Owner"
>From backend (#4)> 0
>From backend (#2)> 0
>From backend (#4)> 19
>From backend (#2)> 64
>From backend (#4)> -1
>From backend (#2)> 0

And I propose that it should look like this:

<<< 'T' 101 4 "Schema" 2615 #2 19 #64 -1 #0 "Name" 1259 #2 19 #64 -1
#0 "Owner" 0 #0 19 #64 -1 #0

The basic idea being:

- Each line is a whole message.
- The line begins with <<< for a message received and >>> for a message sent.
- Strings in single quotes are those sent/received as a fixed number of bytes.
- Strings in double quotes are those sent/received as a string.
- 4-byte integers are printed unadorned.
- 2-byte integers are prefixed by #.
- I guess 1-byte integers would need some other prefix, maybe @ or ##.

Now if we want to timestamp those lines too, that'd be fine:

2019-03-04 21:33:39.338 EST <<< 'T' 101 4 "Schema" 2615 #2 19 #64 -1
#0 "Name" 1259 #2 19 #64 -1 #0 "Owner" 0 #0 19 #64 -1 #0
2019-03-04 21:33:39.342 EST <<< 'D' 42 #4 6 'public' 4 'tab1' 5
'table' 5 'rhaas'

But I still don't really see a need for different levels or whatever.
I mean, you either want a dump of all of the protocol traffic, or you
don't, I think.  Or maybe I am confused as to what the goal of all
this really is.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

Reply via email to