diff --git a/doc/src/sgml/ref/reassign_owned.sgml b/doc/src/sgml/ref/reassign_owned.sgml
index 57f2e59996c630554026da53d2f89d6d4b448935..0d6b1787e29da459f15d7d89a20dd3a405f58799 100644
--- a/doc/src/sgml/ref/reassign_owned.sgml
+++ b/doc/src/sgml/ref/reassign_owned.sgml
@@ -30,7 +30,7 @@ REASSIGN OWNED BY <replaceable class="PARAMETER">old_role</replaceable> [, ...]
 
   <para>
    <command>REASSIGN OWNED</command> instructs the system to change
-   the ownership of the database objects owned by one of the
+   the ownership of database objects owned by one of the
    old_roles, to new_role.
   </para>
  </refsect1>
@@ -43,8 +43,9 @@ REASSIGN OWNED BY <replaceable class="PARAMETER">old_role</replaceable> [, ...]
     <term><replaceable class="PARAMETER">old_role</replaceable></term>
     <listitem>
      <para>
-      The name of a role. The ownership of all the objects in the
-      current database owned by this role will be reassigned to
+      The name of a role. The ownership of all the objects within the
+      current database, and of all shared objects (databases, tablespaces),
+      owned by this role will be reassigned to
       <replaceable class="PARAMETER">new_role</replaceable>.
      </para>
     </listitem>
@@ -68,7 +69,7 @@ REASSIGN OWNED BY <replaceable class="PARAMETER">old_role</replaceable> [, ...]
   <para>
    <command>REASSIGN OWNED</command> is often used to prepare for the
    removal of one or more roles. Because <command>REASSIGN
-   OWNED</command> only affects the objects in the current database,
+   OWNED</command> does not affect objects within other databases,
    it is usually necessary to execute this command in each database
    that contains objects owned by a role that is to be removed.
   </para>
@@ -92,12 +93,6 @@ REASSIGN OWNED BY <replaceable class="PARAMETER">old_role</replaceable> [, ...]
    privileges.
   </para>
 
-  <para>
-   The <command>REASSIGN OWNED</command> command does not affect the
-   ownership of any databases owned by the role.  Use
-   <xref linkend="sql-alterdatabase"> to reassign that ownership.
-  </para>
-
  </refsect1>
 
  <refsect1>
diff --git a/src/backend/catalog/pg_shdepend.c b/src/backend/catalog/pg_shdepend.c
index 4a85438ff5edb7e8c9a86cdfafd79d89f1a43b7d..e411372fec2f24a378b1b4da75bcf8f7c721c6a8 100644
--- a/src/backend/catalog/pg_shdepend.c
+++ b/src/backend/catalog/pg_shdepend.c
@@ -1325,8 +1325,12 @@ shdepReassignOwned(List *roleids, Oid newrole)
 		{
 			Form_pg_shdepend sdepForm = (Form_pg_shdepend) GETSTRUCT(tuple);
 
-			/* We only operate on objects in the current database */
-			if (sdepForm->dbid != MyDatabaseId)
+			/*
+			 * We only operate on shared objects and objects in the current
+			 * database
+			 */
+			if (sdepForm->dbid != MyDatabaseId &&
+				sdepForm->dbid != InvalidOid)
 				continue;
 
 			/* Unexpected because we checked for pins above */
@@ -1388,6 +1392,8 @@ shdepReassignOwned(List *roleids, Oid newrole)
 				case OperatorFamilyRelationId:
 				case OperatorClassRelationId:
 				case ExtensionRelationId:
+				case TableSpaceRelationId:
+				case DatabaseRelationId:
 					{
 						Oid			classId = sdepForm->classid;
 						Relation	catalog;