diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php b/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
index 1911d6a..3eeb207 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
@@ -557,16 +557,10 @@ public function prepareComment($comment, $length = NULL) {
   }
 
   /**
-   * Retrieve a table or column comment.
+   * {@inheritdoc}
    */
-  public function getComment($table, $column = NULL) {
+  protected function getTableComment($table) {
     $condition = $this->buildTableNameCondition($table);
-    if (isset($column)) {
-      $condition->condition('column_name', $column);
-      $condition->compile($this->connection, $this);
-      // Don't use {} around information_schema.columns table.
-      return $this->connection->query("SELECT column_comment FROM information_schema.columns WHERE " . (string) $condition, $condition->arguments())->fetchField();
-    }
     $condition->compile($this->connection, $this);
     // Don't use {} around information_schema.tables table.
     $comment = $this->connection->query("SELECT table_comment FROM information_schema.tables WHERE " . (string) $condition, $condition->arguments())->fetchField();
@@ -574,6 +568,17 @@ public function getComment($table, $column = NULL) {
     return preg_replace('/; InnoDB free:.*$/', '', $comment);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  protected function getColumnComment($table, $comment) {
+    $condition = $this->buildTableNameCondition($table);
+    $condition->condition('column_name', $column);
+    $condition->compile($this->connection, $this);
+    // Don't use {} around information_schema.columns table.
+    return $this->connection->query("SELECT column_comment FROM information_schema.columns WHERE " . (string) $condition, $condition->arguments())->fetchField();
+  }
+
   public function tableExists($table) {
     // The information_schema table is very slow to query under MySQL 5.0.
     // Instead, we try to select from the table in question.  If it fails,
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
index 4586d01..8299fe7 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
@@ -855,17 +855,21 @@ protected function _createKeys($table, $new_keys) {
   }
 
   /**
-   * Retrieve a table or column comment.
+   * {@inheritdoc}
    */
-  public function getComment($table, $column = NULL) {
+  protected function getTableComment($table) {
     $info = $this->getPrefixInfo($table);
     // Don't use {} around pg_class, pg_attribute tables.
-    if (isset($column)) {
-      return $this->connection->query('SELECT col_description(oid, attnum) FROM pg_class, pg_attribute WHERE attrelid = oid AND relname = ? AND attname = ?', [$info['table'], $column])->fetchField();
-    }
-    else {
-      return $this->connection->query('SELECT obj_description(oid, ?) FROM pg_class WHERE relname = ?', ['pg_class', $info['table']])->fetchField();
-    }
+    return $this->connection->query('SELECT obj_description(oid, ?) FROM pg_class WHERE relname = ?', ['pg_class', $info['table']])->fetchField();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getColumnComment($table, $comment) {
+    $info = $this->getPrefixInfo($table);
+    // Don't use {} around pg_class, pg_attribute tables.
+    return $this->connection->query('SELECT col_description(oid, attnum) FROM pg_class, pg_attribute WHERE attrelid = oid AND relname = ? AND attname = ?', [$info['table'], $column])->fetchField();
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Database/Schema.php b/core/lib/Drupal/Core/Database/Schema.php
index 80a68f6..153f419 100644
--- a/core/lib/Drupal/Core/Database/Schema.php
+++ b/core/lib/Drupal/Core/Database/Schema.php
@@ -600,6 +600,76 @@ public function createTable($name, $table) {
   }
 
   /**
+   * Retrieves a table or column comment.
+   *
+   * @param string $name
+   *   The name of the table.
+   * @param string $column
+   *   (Optional) The name of the column.
+   *
+   * @return string|null
+   *   The comment string or NULL if the comment is not supported.
+   */
+  public function getComment($table, $column = NULL) {
+    if ($column !== NULL) {
+      try {
+        return $this->getTableComment($table);
+      }
+      catch (\RuntimeException $e) {
+        return NULL;
+      }
+    }
+    else {
+      try {
+        return $this->getColumnComment($table, $column);
+      }
+      catch (\RuntimeException$e) {
+        return NULL;
+      }
+    }
+  }
+
+  /**
+   * Retrieves a table comment.
+   *
+   * By default this is not supported. Drivers implementations should override
+   * this method if returning comments is supported.
+   *
+   * @param string $name
+   *   The name of the table.
+   *
+   * @throws \RuntimeExceptions
+   *   When table comments are not supported.
+   *
+   * @return string|null
+   *   The comment string.
+   */
+  protected function getTableComment($table) {
+    throw new \RuntimeException('Table comments are not supported.');
+  }
+
+  /**
+   * Retrieves a column comment.
+   *
+   * By default this is not supported. Drivers implementations should override
+   * this method if returning comments is supported.
+   *
+   * @param string $name
+   *   The name of the table.
+   * @param string $column
+   *   The name of the column.
+   *
+   * @throws \RuntimeExceptions
+   *   When table comments are not supported.
+   *
+   * @return string|null
+   *   The comment string.
+   */
+  protected function getColumnComment($table, $comment) {
+    throw new \RuntimeException('Column comments are not supported.');
+  }
+
+  /**
    * Return an array of field names from an array of key/index column specifiers.
    *
    * This is usually an identity function but if a key/index uses a column prefix
diff --git a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
index e239098..cdbd08c 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
@@ -424,15 +424,33 @@ public function tryInsert($table = 'test_table') {
    *   Optional column to test.
    */
   public function checkSchemaComment($description, $table, $column = NULL) {
-    if (method_exists(Database::getConnection()->schema(), 'getComment')) {
-      $comment = Database::getConnection()->schema()->getComment($table, $column);
-      // The schema comment truncation for mysql is different.
-      if (Database::getConnection()->databaseType() == 'mysql') {
-        $max_length = $column ? 255 : 60;
-        $description = Unicode::truncate($description, $max_length, TRUE, TRUE);
+    $connection = Database::getConnection();
+    $schema = $connection->schema();
+    $reflection = new \ReflectionObject($schema);
+    $reflection->getMethod('getTableComment')->setAccessible(TRUE);
+    $reflection->getMethod('getColumnComment')->setAccessible(TRUE);
+    if ($column !== NULL) {
+      try {
+        $comment = $schema->getTableComment($table);
       }
-      $this->assertEqual($comment, $description, 'The comment matches the schema description.');
+      catch (\RuntimeException $e) {
+        $this->pass('The database driver does not support table comments.');
+      }
+    }
+    else {
+      try {
+        $comment = $schema->getColumnComment($table, $column);
+      }
+      catch (\RuntimeException$e) {
+        $this->pass('The database driver does not support column comments.');
+      }
+    }
+    // The schema comment truncation for mysql is different.
+    if ($connection->databaseType() == 'mysql') {
+      $max_length = $column ? 255 : 60;
+      $description = Unicode::truncate($description, $max_length, TRUE, TRUE);
     }
+    $this->assertEqual($comment, $description, 'The comment matches the schema description.');
   }
 
   /**
