diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp
index 0154d011c03be9baed5f5af7e405c38931b72fa4..bcd6684b20ab208f81b05b0eef619549a3bcc6cc 100644
--- a/catalogue/CatalogueTest.cpp
+++ b/catalogue/CatalogueTest.cpp
@@ -7136,4 +7136,10 @@ TEST_P(cta_catalogue_CatalogueTest, lockSchema_unlockSchema_lockSchema) {
   ASSERT_TRUE(m_catalogue->schemaIsLocked());
 }
 
+TEST_P(cta_catalogue_CatalogueTest, ping) {
+  using namespace cta;
+
+  m_catalogue->ping();
+}
+
 } // namespace unitTests
diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp
index f08b8bd3b7d0e9dfe2695fb1b5e54889dcb5d4bb..9518171c1a6cbdf7beb4b442733845e0c3718ed6 100644
--- a/catalogue/RdbmsCatalogue.cpp
+++ b/catalogue/RdbmsCatalogue.cpp
@@ -4519,7 +4519,15 @@ void RdbmsCatalogue::unlockSchema() {
 // ping
 //------------------------------------------------------------------------------
 bool RdbmsCatalogue::ping() {
-  throw exception::Exception(std::string(__FUNCTION__) + " not implemented");
+  try {
+    const char *const sql = "SELECT COUNT(*) FROM CTA_CATALOGUE";
+    auto conn = m_connPool.getConn();
+    auto stmt = conn->createStmt(sql, rdbms::Stmt::AutocommitMode::OFF);
+    auto rset = stmt->executeQuery();
+    return true;
+  } catch(...) {
+    return false;
+  }
 }
 
 } // namespace catalogue