module PgHero::Methods::Replication
Public Instance Methods
replica?()
click to toggle source
# File lib/pghero/methods/replication.rb, line 4 def replica? unless defined?(@replica) @replica = select_one("SELECT pg_is_in_recovery()") end @replica end
replicating?()
click to toggle source
# File lib/pghero/methods/replication.rb, line 48 def replicating? with_feature_support(:replicating?, false) do select_all("SELECT state FROM pg_stat_replication").any? end end
replication_lag()
click to toggle source
www.postgresql.org/message-id/CADKbJJWz9M0swPT3oqe8f9+tfD4-F54uE6Xtkh4nERpVsQnjnw@mail.gmail.com
# File lib/pghero/methods/replication.rb, line 12 def replication_lag with_feature_support(:replication_lag) do lag_condition = if server_version_num >= 100000 "pg_last_wal_receive_lsn() = pg_last_wal_replay_lsn()" else "pg_last_xlog_receive_location() = pg_last_xlog_replay_location()" end select_one <<~SQL SELECT CASE WHEN NOT pg_is_in_recovery() OR #{lag_condition} THEN 0 ELSE EXTRACT (EPOCH FROM NOW() - pg_last_xact_replay_timestamp()) END AS replication_lag SQL end end
replication_slots()
click to toggle source
# File lib/pghero/methods/replication.rb, line 32 def replication_slots if server_version_num >= 90400 with_feature_support(:replication_slots, []) do select_all <<~SQL SELECT slot_name, database, active FROM pg_replication_slots SQL end else [] end end
Private Instance Methods
feature_support()
click to toggle source
# File lib/pghero/methods/replication.rb, line 56 def feature_support @feature_support ||= {} end
with_feature_support(cache_key, default = nil) { || ... }
click to toggle source
# File lib/pghero/methods/replication.rb, line 60 def with_feature_support(cache_key, default = nil) # cache feature support to minimize errors in logs return default if feature_support[cache_key] == false begin yield rescue ActiveRecord::StatementInvalid => e raise unless e.message.start_with?("PG::FeatureNotSupported:") feature_support[cache_key] = false default end end