Re: libpq debug log - Mailing list pgsql-hackers
From | Robert Haas |
---|---|
Subject | Re: libpq debug log |
Date | |
Msg-id | CA+TgmobGvUKiNQfh-4GzTWxoD1qX63D3_W3O+fnzBXBCiRSo=g@mail.gmail.com Whole thread Raw |
In response to | RE: libpq debug log ("Iwata, Aya" <iwata.aya@jp.fujitsu.com>) |
Responses |
Re: libpq debug log
|
List | pgsql-hackers |
On Mon, Mar 4, 2019 at 3:13 AM Iwata, Aya <iwata.aya@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
pgsql-hackers by date: