Hi Wang,

> 6.a
> 
> It seems that the upper line represents the apply background worker, but I 
> think
> last_msg_send_time and last_msg_receipt_time should be null.
> Is it like initialization mistake?

I checked again about the issue.

Attributes worker->last_send_time, worker->last_recv_time, and 
worker->reply_time
are initialized in logicalrep_worker_launch():

```
...
        TIMESTAMP_NOBEGIN(worker->last_send_time);
        TIMESTAMP_NOBEGIN(worker->last_recv_time);
        worker->reply_lsn = InvalidXLogRecPtr;
        TIMESTAMP_NOBEGIN(worker->reply_time);
...
```

And the macro is defined in timestamp.h, and it seems that the values are 
initialized as PG_INT64_MIN.

```
#define DT_NOBEGIN              PG_INT64_MIN
#define DT_NOEND                PG_INT64_MAX

#define TIMESTAMP_NOBEGIN(j)    \
        do {(j) = DT_NOBEGIN;} while (0)
```


However, in pg_stat_get_subscription(), these values are regarded as null if 
they are zero.

```
                if (worker.last_send_time == 0)
                        nulls[4] = true;
                else
                        values[4] = TimestampTzGetDatum(worker.last_send_time);
                if (worker.last_recv_time == 0)
                        nulls[5] = true;
                else
                        values[5] = TimestampTzGetDatum(worker.last_recv_time);
```

I think above lines are wrong, these values should be compared with 
PG_INT64_MIN.

Best Regards,
Hayato Kuroda
FUJITSU LIMITED

Reply via email to