expose primay_keys info for row based events

a 2nd PR continues on the previous one.

This PR will expose primary keys info in row-based events, so we may only listen/publish the primary key values.
There may be multiple primary keys or none primary key here, so the final primary_key can either be `str` or `tuple`.

I convert it to tuple here so it's not mutable.