diff --git a/pkg/content/content.go b/pkg/content/content.go
index 1d351e9308da0ea2c81f8afa80fb2be219c633ea..29abfb45e47b9551333a928caba541ee57bd7d6c 100644
--- a/pkg/content/content.go
+++ b/pkg/content/content.go
@@ -39,7 +39,7 @@ type Content struct {
 }
 
 const (
-	DBVersion uint32 = 2
+	DBVersion uint32 = 3
 )
 
 func (c *Content) RegisterStart(svc interface{}) {
diff --git a/pkg/setup/collection.go b/pkg/setup/collection.go
index d61ba14d18f2d8bc93d2a535392b8b608ba6e2d0..4b339d5542e24c604f4ed9fe0c726c5d1cdafb49 100644
--- a/pkg/setup/collection.go
+++ b/pkg/setup/collection.go
@@ -139,6 +139,13 @@ func (s *Setup) InstallCollection(ctx context.Context, c CollectionConfig) (setS
 		}
 	} else {
 		var upd bool
+
+		if _, ok := collection.Schema.Metadata["extension"]; ok {
+			if _, ok := exist.Schema.Metadata["extension"]; !ok {
+				return false, errors.WithHint(errors.New("fail to update collection"), "collection has the same id as extension's collection, change yours collection id")
+			}
+		}
+
 		collection, upd, setSchema = c.UpdateFn(s, exist, c.collection)
 		if upd {
 			if err = s.content.Collections.Update(ctx, collection); err != nil {
diff --git a/pkg/setup/collection_test.go b/pkg/setup/collection_test.go
index 433aa7397d450f8226a95af032a7cd177697fbed..a6a3b5e0738413f8bec8c788d5036c65b393bc40 100644
--- a/pkg/setup/collection_test.go
+++ b/pkg/setup/collection_test.go
@@ -91,6 +91,31 @@ func TestSetup_InstallCollections(t *testing.T) {
 				assert.Contains(t, errors.GetDetail(err), "Возникла ошибка при настройке коллекции space(1)")
 			},
 		},
+		{
+			name:        "Update extension collection with metadata",
+			collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", Schema: &schema.Schema{Field: schema.New("name", field.String()).Field, Metadata: map[string]string{"extension": "tasks"}}}},
+			collectionsCall: func(svc *mockscollections.Collections) {
+				svc.On("Get", mock.Anything, "sp", "env", "1").Return(&collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", Schema: &schema.Schema{Field: schema.New("name", field.String()).Field, Metadata: map[string]string{"extension": "tasks"}}}, nil).Once()
+				svc.On("Update", mock.Anything, &collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", Schema: &schema.Schema{Field: schema.New("name", field.String()).Field, Metadata: map[string]string{"extension": "tasks"}}}).Return(nil).Once()
+				svc.On("SetSchema", mock.Anything, "sp", "env", "1", schema.New("name", field.String())).Return(nil).Once()
+			},
+			envsCall: func(svc *envmocks.Environments) {
+				svc.On("Migrate", mock.Anything, "sp", "env", &environments.MigrateOptions{Wait: true}).Return(nil).Once()
+			},
+			wantErr: func(t *testing.T, err error) {
+				assert.NoError(t, err)
+			},
+		},
+		{
+			name:        "Fail to update collection with the same id",
+			collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", Schema: &schema.Schema{Field: schema.New("name", field.String()).Field, Metadata: map[string]string{"extension": "tasks"}}}},
+			collectionsCall: func(svc *mockscollections.Collections) {
+				svc.On("Get", mock.Anything, "sp", "env", "1").Return(&collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", Schema: &schema.Schema{Field: schema.New("surname", field.String()).Field}}, nil).Once()
+			},
+			wantErr: func(t *testing.T, err error) {
+				assert.Error(t, err)
+			},
+		},
 	}
 
 	for _, tt := range tests {