diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs index 80ccfb24..7d165395 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs @@ -84,11 +84,13 @@ namespace FreeSql.Custom.PostgreSQL var sb = new StringBuilder(); var seqcols = new List>(); //序列 + 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)); diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLDbFirst.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLDbFirst.cs index e4a67837..3bc58b99 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLDbFirst.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLDbFirst.cs @@ -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; } } diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs index e1c29bc6..f86ad5d1 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs @@ -85,11 +85,13 @@ namespace FreeSql.Odbc.PostgreSQL var sb = new StringBuilder(); var seqcols = new List>(); //序列 + var isPg95 = true; var isPg96 = true; var isPg10 = (_orm.DbFirst as OdbcPostgreSQLDbFirst).IsPg10; using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5))) { - isPg96 = OdbcPostgreSQLDbFirst.PgVersionIs96(conn.Value.ServerVersion); + isPg95 = OdbcPostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 5); + isPg96 = OdbcPostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 6); } foreach (var obj in objects) @@ -157,7 +159,9 @@ namespace FreeSql.Odbc.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)); @@ -339,7 +343,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)); @@ -434,7 +440,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)); diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs index c5290650..36d633d9 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs @@ -536,12 +536,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; } } diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs index 4b550aec..a1db5732 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs @@ -134,11 +134,13 @@ namespace FreeSql.PostgreSQL var sb = new StringBuilder(); var seqcols = new List>(); //序列 + var isPg95 = true; var isPg96 = true; var isPg10 = (_orm.DbFirst as PostgreSQLDbFirst).IsPg10; using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5))) { - isPg96 = PostgreSQLDbFirst.PgVersionIs96(conn.Value.ServerVersion); + isPg95 = PostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 5); + isPg96 = PostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 6); } foreach (var obj in objects) @@ -206,7 +208,9 @@ namespace FreeSql.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)); @@ -385,7 +389,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)); @@ -480,7 +486,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)); diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs index 3511ae24..af02cdf6 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs @@ -639,12 +639,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; } }