diff --git a/lib/gitlab/database.rb b/lib/gitlab/database.rb
index 68ed53cf64ab59cc8cc410a381873498cc3c7b97..6d40e00c0356009373b996b92f78a3508db49f61 100644
--- a/lib/gitlab/database.rb
+++ b/lib/gitlab/database.rb
@@ -35,7 +35,6 @@ module Gitlab
       adapter_name.casecmp('postgresql').zero?
     end
 
-    # Overridden in EE
     def self.read_only?
       false
     end
@@ -44,12 +43,14 @@ module Gitlab
       !self.read_only?
     end
 
-    # check whether the underlying database is in read-only mode
+    # Check whether the underlying database is in read-only mode
     def self.db_read_only?
       if postgresql?
-        ActiveRecord::Base.connection.execute('SELECT pg_is_in_recovery()')
-          .first
-          .fetch('pg_is_in_recovery') == 't'
+        pg_is_in_recovery =
+          ActiveRecord::Base.connection.execute('SELECT pg_is_in_recovery()')
+            .first.fetch('pg_is_in_recovery')
+
+        Gitlab::Utils.to_boolean(pg_is_in_recovery)
       else
         false
       end
diff --git a/spec/lib/gitlab/database_spec.rb b/spec/lib/gitlab/database_spec.rb
index 7d76519dddd6f44781edd18f8a48b3f51d9c43f7..fc295b2deff91cc2e5082a3e863964139b897eb1 100644
--- a/spec/lib/gitlab/database_spec.rb
+++ b/spec/lib/gitlab/database_spec.rb
@@ -443,11 +443,17 @@ describe Gitlab::Database do
     end
   end
 
+  describe '.read_only?' do
+    it 'returns false' do
+      expect(described_class.read_only?).to be_falsey
+    end
+  end
+
   describe '.db_read_only?' do
     context 'when using PostgreSQL' do
       before do
         allow(ActiveRecord::Base.connection).to receive(:execute).and_call_original
-        expect(described_class).to receive(:postgresql?).and_return(true)
+        allow(described_class).to receive(:postgresql?).and_return(true)
       end
 
       it 'detects a read only database' do
@@ -456,11 +462,25 @@ describe Gitlab::Database do
         expect(described_class.db_read_only?).to be_truthy
       end
 
+      # TODO: remove rails5-only tag after removing rails4 tests
+      it 'detects a read only database', :rails5 do
+        allow(ActiveRecord::Base.connection).to receive(:execute).with('SELECT pg_is_in_recovery()').and_return([{ "pg_is_in_recovery" => true }])
+
+        expect(described_class.db_read_only?).to be_truthy
+      end
+
       it 'detects a read write database' do
         allow(ActiveRecord::Base.connection).to receive(:execute).with('SELECT pg_is_in_recovery()').and_return([{ "pg_is_in_recovery" => "f" }])
 
         expect(described_class.db_read_only?).to be_falsey
       end
+
+      # TODO: remove rails5-only tag after removing rails4 tests
+      it 'detects a read write database', :rails5 do
+        allow(ActiveRecord::Base.connection).to receive(:execute).with('SELECT pg_is_in_recovery()').and_return([{ "pg_is_in_recovery" => false }])
+
+        expect(described_class.db_read_only?).to be_falsey
+      end
     end
 
     context 'when using MySQL' do