@@ -104,6 +104,11 @@ def compute_lag(master, slave, m_segbytes)
104
104
( ( m_segment . hex - s_segment . hex ) * m_segbytes ) + ( m_offset . hex - s_offset . hex )
105
105
end
106
106
107
+ def check_vsn ( conn )
108
+ pg_vsn = conn . exec ( "SELECT current_setting('server_version')" ) . getvalue ( 0 , 0 )
109
+ return if Gem ::Version . new ( pg_vsn ) < Gem ::Version . new ( '10.0' ) && Gem ::Version . new ( pg_vsn ) >= Gem ::Version . new ( '9.0' )
110
+ end
111
+
107
112
def run
108
113
ssl_mode = config [ :ssl ] ? 'require' : 'prefer'
109
114
@@ -117,12 +122,10 @@ def run
117
122
sslmode : ssl_mode ,
118
123
connect_timeout : config [ :timeout ] )
119
124
120
- pg_vsn = conn_master . exec ( "SELECT current_setting('server_version')" ) . getvalue ( 0 , 0 )
121
-
122
- master = if Gem ::Version . new ( pg_vsn ) > Gem ::Version . new ( '9.6' )
123
- conn_master . exec ( 'SELECT pg_current_wal_lsn()' ) . getvalue ( 0 , 0 )
124
- else
125
+ master = if check_vsn ( conn_master )
125
126
conn_master . exec ( 'SELECT pg_current_xlog_location()' ) . getvalue ( 0 , 0 )
127
+ else
128
+ conn_master . exec ( 'SELECT pg_current_wal_lsn()' ) . getvalue ( 0 , 0 )
126
129
end
127
130
m_segbytes = conn_master . exec ( 'SHOW wal_segment_size' ) . getvalue ( 0 , 0 ) . sub ( /\D +/ , '' ) . to_i << 20
128
131
conn_master . close
@@ -136,10 +139,10 @@ def run
136
139
sslmode : ssl_mode ,
137
140
connect_timeout : config [ :timeout ] )
138
141
139
- slave = if Gem ::Version . new ( pg_vsn ) > Gem ::Version . new ( '9.6' )
140
- conn_slave . exec ( 'SELECT pg_last_wal_replay_lsn()' ) . getvalue ( 0 , 0 )
141
- else
142
+ slave = if check_vsn ( conn_slave )
142
143
conn_slave . exec ( 'SELECT pg_last_xlog_receive_location()' ) . getvalue ( 0 , 0 )
144
+ else
145
+ conn_slave . exec ( 'SELECT pg_last_wal_replay_lsn()' ) . getvalue ( 0 , 0 )
143
146
end
144
147
conn_slave . close
145
148
0 commit comments