diff --git a/pkg/setup/collection.go b/pkg/setup/collection.go
index 8ffd87a0bb703267fe3bfe791db50bee75b74a62..b5dec74a3a2d97924c24d80ebd5d8efad5f1c7e3 100644
--- a/pkg/setup/collection.go
+++ b/pkg/setup/collection.go
@@ -21,7 +21,7 @@ var (
 
 // todo добавлено в релизе v0.0.16: временный флаг для установки метадаты во все коллекции расширений
 const (
-	AlwaysSetSchema = true
+	alwaysSetSchema = true
 )
 
 type CollectionsOption func(c *CollectionConfig)
@@ -75,14 +75,34 @@ func DeleteCollectionIfRemove() CollectionsOption {
 	}
 }
 
+func isCollsSchemaMetadataEqual(collection, exist *collections.Collection) bool {
+	if alwaysSetSchema {
+		return true
+	}
+
+	if collection.IsView() && exist.IsView() {
+		return true
+	}
+
+	if collection.Schema.Metadata == nil && exist.Schema.Metadata == nil {
+		return true
+	}
+
+	if collection.Schema.Metadata != nil && collection.Schema.Metadata[extension.ExtensionMetadataKey] != "" {
+		if exist.Schema.Metadata == nil || exist.Schema.Metadata[extension.ExtensionMetadataKey] != collection.Schema.Metadata[extension.ExtensionMetadataKey] {
+			return false
+		}
+	}
+
+	return true
+}
+
 func DefaultUpdateCollectionStrategy() CollectionsOption {
 	return func(c *CollectionConfig) {
 		c.UpdateFn = func(s *Setup, exist, collection *collections.Collection) (*collections.Collection, bool, bool, error) {
-			if !AlwaysSetSchema && !s.IsForce() && !collection.IsView() && !exist.IsView() && collection.Schema.Metadata != nil && collection.Schema.Metadata[extension.ExtensionMetadataKey] != "" {
-				if exist.Schema.Metadata == nil || exist.Schema.Metadata[extension.ExtensionMetadataKey] != collection.Schema.Metadata[extension.ExtensionMetadataKey] {
-					return nil, false, false, errors.WithDetailf(collections.ErrAlreadyExists, "Коллекция с идентификатором '%s' "+
-						"уже существует. Удалите ее или вызовите установку расширения с флагом Force", collection.ID)
-				}
+			if !s.IsForce() && !isCollsSchemaMetadataEqual(collection, exist) {
+				return nil, false, false, errors.WithDetailf(collections.ErrAlreadyExists, "Коллекция с идентификатором '%s' "+
+					"уже существует. Удалите ее или вызовите установку расширения с флагом Force", collection.ID)
 			}
 
 			if len(exist.Tags) > 0 {
@@ -97,7 +117,7 @@ func DefaultUpdateCollectionStrategy() CollectionsOption {
 				update = update && *exist.View == *collection.View
 			}
 
-			setSchema = AlwaysSetSchema || !collection.IsView() && !reflect.DeepEqual(exist.Schema, collection.Schema)
+			setSchema = alwaysSetSchema || !collection.IsView() && !reflect.DeepEqual(exist.Schema, collection.Schema)
 
 			return collection, update, setSchema, nil
 		}
diff --git a/pkg/setup/collection_test.go b/pkg/setup/collection_test.go
index cea12bafa284b0c49d3cb20d5f6704a878960e23..5d9c3b0180eba728cb814472efeb78e3c941fdb5 100644
--- a/pkg/setup/collection_test.go
+++ b/pkg/setup/collection_test.go
@@ -108,7 +108,7 @@ func TestSetup_InstallCollections(t *testing.T) {
 				assert.NoError(t, err)
 			},
 		},
-		//todo после удаления флага AlwaysSetSchema данный тест будет работать, сейчас он будет всегда падать, поэтому пока закомментирован
+		//todo после удаления флага alwaysSetSchema данный тест будет работать, сейчас он будет всегда падать, поэтому пока закомментирован
 		//{
 		//name:        "Fail to update user collection with same id as in extensions collection",
 		//collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", Schema: schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test-extension")}},
@@ -151,7 +151,7 @@ func TestSetup_InstallCollections(t *testing.T) {
 				assert.NoError(t, err)
 			},
 		},
-		//todo после удаления флага AlwaysSetSchema данный тест будет работать, сейчас он будет всегда падать, поэтому пока закомментирован
+		//todo после удаления флага alwaysSetSchema данный тест будет работать, сейчас он будет всегда падать, поэтому пока закомментирован
 		//{
 		//	name:        "Update view collection with the same id to new view collection",
 		//	collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", View: &collections.View{SpaceID: "sp3", EnvID: environments.DefaultEnvironment, CollectionID: "3"}}},
@@ -202,3 +202,101 @@ func TestSetup_InstallCollections(t *testing.T) {
 		})
 	}
 }
+
+//todo после удаления флага alwaysSetSchema раскомментировать
+//func Test_isCollsSchemaMetadataEqual(t *testing.T) {
+//	type args struct {
+//	}
+//	tests := []struct {
+//		name       string
+//		collection *collections.Collection
+//		exist      *collections.Collection
+//		want       bool
+//	}{
+//		{
+//			"Not equal #1 (no metadata in exist coll)",
+//			&collections.Collection{
+//				ID:      "1",
+//				SpaceID: "sp",
+//				EnvID:   "env",
+//				Name:    "coll1",
+//				Schema:  schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test"),
+//			},
+//			&collections.Collection{
+//				ID:      "2",
+//				SpaceID: "sp",
+//				EnvID:   "env",
+//				Name:    "coll2",
+//				Schema:  schema.New("name", field.String()),
+//			},
+//			false,
+//		},
+//		{
+//			"Not equal #2 (different metadata)",
+//			&collections.Collection{
+//				ID:      "1",
+//				SpaceID: "sp",
+//				EnvID:   "env",
+//				Name:    "coll1",
+//				Schema:  schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test"),
+//			},
+//			&collections.Collection{
+//				ID:      "2",
+//				SpaceID: "sp",
+//				EnvID:   "env",
+//				Name:    "coll2",
+//				Schema:  schema.New("name", field.String()).WithMetadata("test", "test"),
+//			},
+//			false,
+//		},
+//		{
+//			"Equal #1 (no metadata)",
+//			&collections.Collection{
+//				ID:      "1",
+//				SpaceID: "sp",
+//				EnvID:   "env",
+//				Name:    "coll1",
+//				Schema:  schema.New("name", field.String()),
+//			},
+//			&collections.Collection{
+//				ID:      "2",
+//				SpaceID: "sp",
+//				EnvID:   "env",
+//				Name:    "coll2",
+//				Schema:  schema.New("name", field.String()),
+//			},
+//			true,
+//		},
+//		{
+//			"Equal #1 (both view colls)",
+//			&collections.Collection{
+//				ID:      "1",
+//				SpaceID: "sp",
+//				EnvID:   "env",
+//				Name:    "coll1",
+//				View: &collections.View{
+//					SpaceID:      "sp",
+//					EnvID:        "env",
+//					CollectionID: "3",
+//				},
+//			},
+//			&collections.Collection{
+//				ID:      "2",
+//				SpaceID: "sp",
+//				EnvID:   "env",
+//				Name:    "coll2",
+//				View: &collections.View{
+//					SpaceID:      "sp",
+//					EnvID:        "env",
+//					CollectionID: "4",
+//				},
+//			},
+//			true,
+//		},
+//	}
+//	for _, tt := range tests {
+//		t.Run(tt.name, func(t *testing.T) {
+//			assert.Equalf(t, tt.want, isCollsSchemaMetadataEqual(tt.collection, tt.exist), "isCollsSchemaMetadataEqual(%v, %v)", tt.collection, tt.exist)
+//		})
+//	}
+//}
diff --git a/pkg/setup/setup_test.go b/pkg/setup/setup_test.go
index 01dc4d9fd04c28b897056e0845a67ac315c65b3c..e722041e1d48629f72307a41b7661388b87846a2 100644
--- a/pkg/setup/setup_test.go
+++ b/pkg/setup/setup_test.go
@@ -179,7 +179,7 @@ func TestSetupInstall(t *testing.T) {
 
 	t.Run("Success, update existing records", func(t *testing.T) {
 		envMocks := &environmentMock.Environments{}
-		//todo после удаления флага AlwaysSetSchema убрать лишний вызов
+		//todo после удаления флага alwaysSetSchema убрать лишний вызов
 		envMocks.On("Migrate", mock.Anything, spaceID, envID, &environments.MigrateOptions{Wait: true}).
 			Return(nil).Once()
 
@@ -187,7 +187,7 @@ func TestSetupInstall(t *testing.T) {
 		collsMock.On("Get", mock.Anything, spaceID, envID, "coll1").
 			Return(&collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция старая"}, nil).Once()
 		collsMock.On("Update", mock.Anything, &collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция"}).Return(nil).Once()
-		//todo после удаления флага AlwaysSetSchema убрать лишний вызов
+		//todo после удаления флага alwaysSetSchema убрать лишний вызов
 		collsMock.On("SetSchema", mock.Anything, "sp", "env", "coll1", schema.New()).Return(nil).Once()
 
 		rMock := &rolesMock.Roles{}
@@ -245,7 +245,7 @@ func TestSetupInstall(t *testing.T) {
 	})
 
 	t.Run("Success, with force", func(t *testing.T) {
-		//todo после удаления флага AlwaysSetSchema убрать лишний вызов
+		//todo после удаления флага alwaysSetSchema убрать лишний вызов
 		envMocks := &environmentMock.Environments{}
 		envMocks.On("Migrate", mock.Anything, spaceID, envID, &environments.MigrateOptions{Wait: true}).
 			Return(nil).Once()
@@ -254,7 +254,7 @@ func TestSetupInstall(t *testing.T) {
 		collsMock.On("Get", mock.Anything, spaceID, envID, "coll1").
 			Return(&collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция старая"}, nil).Once()
 		collsMock.On("Update", mock.Anything, &collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция"}).Return(nil).Once()
-		//todo после удаления флага AlwaysSetSchema убрать лишний вызов
+		//todo после удаления флага alwaysSetSchema убрать лишний вызов
 		collsMock.On("SetSchema", mock.Anything, "sp", "env", "coll1", schema.New()).Return(nil).Once()
 
 		rMock := &rolesMock.Roles{}
@@ -290,7 +290,7 @@ func TestSetupInstall(t *testing.T) {
 			Clients:     clMock,
 			Roles:       rMock,
 			Items:       itmMock,
-			//todo после удаления флага AlwaysSetSchema убрать
+			//todo после удаления флага alwaysSetSchema убрать
 			Environments: envMocks,
 		}, t)
 		setup = setup.WithForce(true)