mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 01:05:27 +08:00 
			
		
		
		
	- 优化 pgsql CodeFirst Syncsture CREATE INDEX code;
This commit is contained in:
		@@ -84,11 +84,13 @@ namespace FreeSql.Custom.PostgreSQL
 | 
			
		||||
            var sb = new StringBuilder();
 | 
			
		||||
            var seqcols = new List<NativeTuple<ColumnInfo, string[], bool>>(); //序列
 | 
			
		||||
 | 
			
		||||
            var isPg95 = true;
 | 
			
		||||
            var isPg96 = true;
 | 
			
		||||
            var isPg10 = (_orm.DbFirst as CustomPostgreSQLDbFirst).IsPg10;
 | 
			
		||||
            using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
 | 
			
		||||
            {
 | 
			
		||||
                isPg96 = CustomPostgreSQLDbFirst.PgVersionIs96(conn.Value.ServerVersion);
 | 
			
		||||
                isPg95 = CustomPostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 5);
 | 
			
		||||
                isPg96 = CustomPostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 6);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            foreach (var obj in objects)
 | 
			
		||||
@@ -156,7 +158,9 @@ namespace FreeSql.Custom.PostgreSQL
 | 
			
		||||
                        {
 | 
			
		||||
                            sb.Append("CREATE ");
 | 
			
		||||
                            if (uk.IsUnique) sb.Append("UNIQUE ");
 | 
			
		||||
                            sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
 | 
			
		||||
                            sb.Append("INDEX ");
 | 
			
		||||
                            if (isPg95) sb.Append("IF NOT EXISTS ");
 | 
			
		||||
                            sb.Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
 | 
			
		||||
                            foreach (var tbcol in uk.Columns)
 | 
			
		||||
                            {
 | 
			
		||||
                                sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
 | 
			
		||||
@@ -338,7 +342,9 @@ where ns.nspname in ({{0}}) and d.relname in ({{1}}) and a.indisprimary = 'f'",
 | 
			
		||||
                            if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(";\r\n");
 | 
			
		||||
                            sbalter.Append("CREATE ");
 | 
			
		||||
                            if (uk.IsUnique) sbalter.Append("UNIQUE ");
 | 
			
		||||
                            sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("(");
 | 
			
		||||
                            sbalter.Append("INDEX ");
 | 
			
		||||
                            if (isPg95) sbalter.Append("IF NOT EXISTS ");
 | 
			
		||||
                            sbalter.Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("(");
 | 
			
		||||
                            foreach (var tbcol in uk.Columns)
 | 
			
		||||
                            {
 | 
			
		||||
                                sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
 | 
			
		||||
@@ -433,7 +439,9 @@ where pg_namespace.nspname={0} and pg_class.relname={1} and pg_constraint.contyp
 | 
			
		||||
                {
 | 
			
		||||
                    sb.Append("CREATE ");
 | 
			
		||||
                    if (uk.IsUnique) sb.Append("UNIQUE ");
 | 
			
		||||
                    sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
 | 
			
		||||
                    sb.Append("INDEX ");
 | 
			
		||||
                    if (isPg95) sb.Append("IF NOT EXISTS ");
 | 
			
		||||
                    sb.Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
 | 
			
		||||
                    foreach (var tbcol in uk.Columns)
 | 
			
		||||
                    {
 | 
			
		||||
                        sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
 | 
			
		||||
 
 | 
			
		||||
@@ -542,12 +542,12 @@ where a.typtype = 'e' and ns.nspname in (SELECT ""schema_name"" FROM information
 | 
			
		||||
            return ret.Select(a => new DbEnumInfo { Name = a.Key, Labels = a.Value }).ToList();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static bool PgVersionIs96(string serverVersion)
 | 
			
		||||
        public static bool PgVersionIs(string serverVersion, int version1, int version2 = 0)
 | 
			
		||||
        {
 | 
			
		||||
            int[] version = serverVersion.Split('.').Select(a => int.TryParse(a, out var tryint) ? tryint : 0).ToArray();
 | 
			
		||||
            if (version?.Any() != true) return true;
 | 
			
		||||
            if (version[0] > 9) return true;
 | 
			
		||||
            if (version[0] == 9 && version.Length > 1 && version[1] >= 6) return true;
 | 
			
		||||
            if (version[0] > version1) return true;
 | 
			
		||||
            if (version[0] == version1 && version.Length > 1 && version[1] >= version2) return true;
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user