@@ -279,31 +279,35 @@ func (m Migrator) AlterColumn(value interface{}, field string) error {
279279 }
280280 }
281281
282- fileType := clause.Expr {SQL : m .DataTypeOf (field )}
283- if fieldColumnType .DatabaseTypeName () != fileType .SQL {
284- filedColumnAutoIncrement , _ := fieldColumnType .AutoIncrement ()
285- if field .AutoIncrement && filedColumnAutoIncrement { // update
286- serialDatabaseType , _ := getSerialDatabaseType (fileType .SQL )
287- if t , _ := fieldColumnType .ColumnType (); t != serialDatabaseType {
288- if err := m .UpdateSequence (m .DB , stmt , field , serialDatabaseType ); err != nil {
282+ return m .DB .Connection (func (tx * gorm.DB ) error {
283+ fileType := clause.Expr {SQL : m .DataTypeOf (field )}
284+ if fieldColumnType .DatabaseTypeName () != fileType .SQL {
285+ filedColumnAutoIncrement , _ := fieldColumnType .AutoIncrement ()
286+ if field .AutoIncrement && filedColumnAutoIncrement { // update
287+ serialDatabaseType , _ := getSerialDatabaseType (fileType .SQL )
288+ if t , _ := fieldColumnType .ColumnType (); t != serialDatabaseType {
289+ if err := m .UpdateSequence (tx , stmt , field , serialDatabaseType ); err != nil {
290+ return err
291+ }
292+ }
293+ } else if field .AutoIncrement && ! filedColumnAutoIncrement { // create
294+ serialDatabaseType , _ := getSerialDatabaseType (fileType .SQL )
295+ if err := m .CreateSequence (tx , stmt , field , serialDatabaseType ); err != nil {
296+ return err
297+ }
298+ } else if ! field .AutoIncrement && filedColumnAutoIncrement { // delete
299+ if err := m .DeleteSequence (tx , stmt , field , fileType ); err != nil {
300+ return err
301+ }
302+ } else {
303+ if err := tx .Exec ("ALTER TABLE ? ALTER COLUMN ? TYPE ? USING ?::?" ,
304+ m .CurrentTable (stmt ), clause.Column {Name : field .DBName }, fileType , clause.Column {Name : field .DBName }, fileType ).Error ; err != nil {
289305 return err
290306 }
291- }
292- } else if field .AutoIncrement && ! filedColumnAutoIncrement { // create
293- serialDatabaseType , _ := getSerialDatabaseType (fileType .SQL )
294- if err := m .CreateSequence (m .DB , stmt , field , serialDatabaseType ); err != nil {
295- return err
296- }
297- } else if ! field .AutoIncrement && filedColumnAutoIncrement { // delete
298- if err := m .DeleteSequence (m .DB , stmt , field , fileType ); err != nil {
299- return err
300- }
301- } else {
302- if err := m .DB .Exec ("ALTER TABLE ? ALTER COLUMN ? TYPE ?" , m .CurrentTable (stmt ), clause.Column {Name : field .DBName }, fileType ).Error ; err != nil {
303- return err
304307 }
305308 }
306- }
309+ return nil
310+ })
307311
308312 if null , _ := fieldColumnType .Nullable (); null == field .NotNull {
309313 if field .NotNull {
@@ -691,4 +695,4 @@ func groupByIndexName(indexList []*Index) map[string][]*Index {
691695
692696func (m Migrator ) GetTypeAliases (databaseTypeName string ) []string {
693697 return typeAliasMap [databaseTypeName ]
694- }
698+ }
0 commit comments