How do I monitor PostgreSQL WAL shipping if I'm not using streaming replication?
Here are a few ways:


Compare pg_current_xlog_location() on the primary with pg_last_xlog_replay_location() on the standby.  That will give you the lag in bytes, which might not be very useful for alerting, but it can be useful to chart it.
Monitor pg_last_xact_replay_timestamp() on the standby against the current time.
Have a cron job on the primary periodically modify a value and then check how long it takes to get to the standby.  That's essentially how it used to be done before pg_last_xact_replay_timestamp() became available.