@@ -104,6 +104,11 @@ def compute_lag(master, slave, m_segbytes)
104104 ( ( m_segment . hex - s_segment . hex ) * m_segbytes ) + ( m_offset . hex - s_offset . hex )
105105 end
106106
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+
107112 def run
108113 ssl_mode = config [ :ssl ] ? 'require' : 'prefer'
109114
@@ -117,12 +122,10 @@ def run
117122 sslmode : ssl_mode ,
118123 connect_timeout : config [ :timeout ] )
119124
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 )
125126 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 )
126129 end
127130 m_segbytes = conn_master . exec ( 'SHOW wal_segment_size' ) . getvalue ( 0 , 0 ) . sub ( /\D +/ , '' ) . to_i << 20
128131 conn_master . close
@@ -136,10 +139,10 @@ def run
136139 sslmode : ssl_mode ,
137140 connect_timeout : config [ :timeout ] )
138141
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 )
142143 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 )
143146 end
144147 conn_slave . close
145148
0 commit comments