Re: Determine if postgresql cluster running is primary or not

From: Paul Förster <paul(dot)foerster(at)gmail(dot)com>
To: Thomas Kellerer <shammat(at)gmx(dot)net>
Cc: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: Determine if postgresql cluster running is primary or not
Date: 2020-11-20 09:28:55
Message-ID: FD9D5838-D8AB-4466-A3DA-6780D09A429D@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi Thomas,

> On 20. Nov, 2020, at 10:03, Thomas Kellerer <shammat(at)gmx(dot)net> wrote:
>
> Raul Kaubi schrieb am 20.11.2020 um 09:53:
>> CentOS 7
>> Postgres 9 to 12
>>
>> For monitoring purpose, I would like that certain scripts are only run in primary server.
>> So I am looking ways to universally discover if postgresql cluster that is running is primary or not.
>
> As the standby will be in constant recovery, you can use
>
> select pg_is_in_recovery();

I usually don't recommend using pg_is_in_recovery() only because a database cluster can be in recovery for other reasons. This is why I always do the following:

select distinct
case
when b.sender=0 and c.receiver=0 then
'Standalone'
when b.sender>0 and c.receiver=0 then
'Primary'
when b.sender=0 and c.receiver>0 then
'Replica'
when b.sender>0 and c.receiver>0 then
'Primary+Replica'
end as pgrole
from
pg_database a,
(
select count(*) as sender
from pg_stat_replication
) b,
(
select count(*) as receiver
from pg_stat_wal_receiver
) c
where
not a.datistemplate;

Cheers,
Paul

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message David G. Johnston 2020-11-20 09:34:04 Re: Determine if postgresql cluster running is primary or not
Previous Message Thomas Kellerer 2020-11-20 09:03:21 Re: Determine if postgresql cluster running is primary or not