@@ -356,6 +356,8 @@ func (p *planner) setTypeSchema(ctx context.Context, n *alterTypeNode, schema st
356356 return err
357357 }
358358
359+ // The prepareSetSchema checks the primary type's name. The name of the
360+ // companion array is collision checked below.
359361 desiredSchemaID , err := p .prepareSetSchema (ctx , n .prefix .Database , typeDesc , schema )
360362 if err != nil {
361363 return err
@@ -367,16 +369,31 @@ func (p *planner) setTypeSchema(ctx context.Context, n *alterTypeNode, schema st
367369 return nil
368370 }
369371
370- err = p .performRenameTypeDesc (
371- ctx , typeDesc , typeDesc .Name , desiredSchemaID , tree .AsStringWithFQNames (n .n , p .Ann ()),
372- )
373-
372+ arrayDesc , err := p .Descriptors ().MutableByID (p .txn ).Type (ctx , n .desc .ArrayTypeID )
374373 if err != nil {
375374 return err
376375 }
377376
378- arrayDesc , err := p .Descriptors ().MutableByID (p .txn ).Type (ctx , n .desc .ArrayTypeID )
379- if err != nil {
377+ // The CheckObjectNameCollision checks that the companion array can be moved
378+ // without colliding with
379+ //
380+ // This is consistent with the PG behavior which itself is inconsistent:
381+ // `SET SCHEMA` errors on collision while `ALTER TYPE ... RENAME` auto-resolves
382+ // conflicts on companion array names.
383+ if err := descs .CheckObjectNameCollision (
384+ ctx ,
385+ p .Descriptors (),
386+ p .txn ,
387+ typeDesc .GetParentID (),
388+ desiredSchemaID ,
389+ tree .NewUnqualifiedTypeName (arrayDesc .GetName ()),
390+ ); err != nil {
391+ return err
392+ }
393+
394+ if err := p .performRenameTypeDesc (
395+ ctx , typeDesc , typeDesc .Name , desiredSchemaID , tree .AsStringWithFQNames (n .n , p .Ann ()),
396+ ); err != nil {
380397 return err
381398 }
382399
0 commit comments