diff --git includes/database/pgsql/schema.inc includes/database/pgsql/schema.inc
index 5ababf6..50e5907 100644
--- includes/database/pgsql/schema.inc
+++ includes/database/pgsql/schema.inc
@@ -463,6 +463,10 @@ class DatabaseSchema_pgsql extends DatabaseSchema {
       throw new DatabaseSchemaObjectExistsException(t("Cannot rename field %table.%name to %name_new: target field already exists.", array('%table' => $table, '%name' => $field, '%name_new' => $field_new)));
     }
 
+    // Rename the column if necessary.
+    $this->connection->query('ALTER TABLE {' . $table . '} RENAME "' . $field . '" TO "' . $field_new . '_old"');
+    $field_old = $field_new . '_old';
+
     if (!array_key_exists('size', $spec)) {
       $spec['size'] = 'normal';
     }
@@ -476,17 +480,13 @@ class DatabaseSchema_pgsql extends DatabaseSchema {
       $typecast = 'int';
     }
 
-
-    $this->connection->query("ALTER TABLE {" . $table . "} ALTER $field SET $field_new = CAST(" . $field . "_old as " . $typecast . ")");
-
     $this->addField($table, "$field_new", $spec);
 
-    $this->dropField($table, $field . '_old');
+    // Move all the old content back into the new column.
+    $this->connection->query("UPDATE {" . $table . "} SET $field_new = CAST($field_old as $typecast)");
 
-    // Rename the column if necessary.
-    if ($field != $field_new) {
-      $this->connection->query('ALTER TABLE {' . $table . '} RENAME "' . $field . '" TO "' . $field_new . '_old"');
-    }
+    // Drop the old column.
+    $this->dropField($table, $field_old);
 
     if (isset($new_keys)) {
       $this->_createKeys($table, $new_keys);
