Hi,

> The query jumbling facilities should be used to handle this.

+1 for this. I think we need to do a bit more than what is suggested
in v1-0001, which only normalizes the target LSN. I think we should
also look at the rest of the rest of the WAIT FOR syntax and normalize
option values, for example

```
    WAIT FOR LSN 'FFFFFFFF/FFFFFFFF'
      WITH (MODE 'primary_flush', TIMEOUT '1ms', NO_THROW);

    WAIT FOR LSN 'FFFFFFFE/FFFFFFFF'
      WITH (MODE 'primary_flush', TIMEOUT '2ms', NO_THROW);
```

These should normalize to one pg_stat_statements entry

```
    WAIT FOR LSN $1 WITH (MODE $2, TIMEOUT $3, NO_THROW)
```

Because these options are carried as DefElem, I think we should also
track DefElem arg_location, and then statement parse nodes with such
DefElem option lists can use pg_node_attr(custom_query_jumble) to
traverse those lists and normalize the option values.

WAIT FOR is one case, but I think the same approach could also be
useful for other utility statements such as VACUUM and ALTER ROLE. For
example, ALTER ROLE could normalize PASSWORD and VALID UNTIL. I have
kept this series focused on WAIT FOR for now, though.

So, attached in v2, v2-0001 adds the DefElem arg_location tracking,
and v2-0002 adds the WAIT FOR jumbling changes.
JumbleDefElemOptions() is a small helper in queryjumblefuncs.c that
other statements can use to implement the same kind of option
jumbling.

CC'ing Michael also to get his thoughts on the approach.

--
Sami Imseih
Amazon Web Services (AWS)

Attachment: v2-0001-Track-DefElem-argument-locations-to-allow-query-n.patch
Description: Binary data

Attachment: v2-0002-Normalize-WAIT-FOR-WITH-clause-values-in-pg_stat_.patch
Description: Binary data

Reply via email to