Compare commits

...

5 Commits

Author SHA1 Message Date
sunkaixuan
68b890ad9e Optimize the code 2025-08-18 12:07:04 +08:00
sunkaixuan
2d5710c96f Optimize the code 2025-08-18 12:05:30 +08:00
sunkaixuan
ba48aaf672 Optimize the code 2025-08-18 12:05:13 +08:00
果糖网
ab8ec39f77
Merge pull request #1361 from MarsonShine/master
feat: 增加对PGSQL10及以上主键 IDENTITY 类型的支持,保持对默认实现 Serial 类型的兼容处理。
2025-08-18 11:59:28 +08:00
marsonshine
b099fa6dbc feat: 增加对PGSQL10及以上主键 IDENTITY 类型的支持,保持对默认实现 Serial 类型的兼容处理。
fix: 删除导航批量查询的bug
2025-08-18 11:20:53 +08:00
5 changed files with 35 additions and 9 deletions

View File

@ -200,7 +200,7 @@ namespace SqlSugar
{ {
foreach (var item in insertData) foreach (var item in insertData)
{ {
this._Context.Insertable(insertData).ExecuteCommandIdentityIntoEntity(); this._Context.Insertable(item).ExecuteCommandIdentityIntoEntity();
} }
} }
else else

View File

@ -39,5 +39,6 @@ namespace SqlSugar
public DbType? DatabaseModel { get;set; } public DbType? DatabaseModel { get;set; }
public bool ClickHouseEnableFinal { get; set; } public bool ClickHouseEnableFinal { get; set; }
public bool EnableJsonb { get; set; } public bool EnableJsonb { get; set; }
public PostgresIdentityStrategy PostgresIdentityStrategy { get; set; } = PostgresIdentityStrategy.Serial; // 兼容性处理默认使用Serial
} }
} }

View File

@ -0,0 +1,14 @@
namespace SqlSugar
{
public enum PostgresIdentityStrategy
{
/// <summary>
/// NEXTVAL() function
/// </summary>
Serial = 1,
/// <summary>
/// 自增长PGSQL10+版本最佳实践
/// </summary>
Identity = 2
}
}

View File

@ -485,6 +485,7 @@ WHERE tgrelid = '"+tableName+"'::regclass");
{ {
List<string> columnArray = new List<string>(); List<string> columnArray = new List<string>();
Check.Exception(columns.IsNullOrEmpty(), "No columns found "); Check.Exception(columns.IsNullOrEmpty(), "No columns found ");
var identityStrategy = this.Context.CurrentConnectionConfig.MoreSettings?.PostgresIdentityStrategy;
foreach (var item in columns) foreach (var item in columns)
{ {
string columnName = item.DbColumnName; string columnName = item.DbColumnName;
@ -508,17 +509,26 @@ WHERE tgrelid = '"+tableName+"'::regclass");
string addItem = string.Format(this.CreateTableColumn, this.SqlBuilder.GetTranslationColumnName(columnName.ToLower(isAutoToLowerCodeFirst)), dataType, dataSize, nullType, primaryKey, ""); string addItem = string.Format(this.CreateTableColumn, this.SqlBuilder.GetTranslationColumnName(columnName.ToLower(isAutoToLowerCodeFirst)), dataType, dataSize, nullType, primaryKey, "");
if (item.IsIdentity) if (item.IsIdentity)
{ {
if (dataType?.ToLower() == "int") if(identityStrategy != PostgresIdentityStrategy.Identity)
{ {
dataSize = "int4"; if (dataType?.ToLower() == "int")
{
dataSize = "int4";
}
else if (dataType?.ToLower() == "long")
{
dataSize = "int8";
}
string length = dataType.Substring(dataType.Length - 1);
string identityDataType = "serial" + length;
addItem = addItem.Replace(dataType, identityDataType);
} }
else if (dataType?.ToLower() == "long") else
{ {
dataSize = "int8"; string length = dataType.Substring(dataType.Length - 1);
string identityDataType = "INT" + length + " GENERATED BY DEFAULT AS IDENTITY";
addItem = addItem.Replace(dataType, identityDataType);
} }
string length = dataType.Substring(dataType.Length - 1);
string identityDataType = "serial" + length;
addItem = addItem.Replace(dataType, identityDataType);
} }
columnArray.Add(addItem); columnArray.Add(addItem);
} }

View File

@ -900,7 +900,8 @@ namespace SqlSugar
EnableILike=it.MoreSettings.EnableILike, EnableILike=it.MoreSettings.EnableILike,
ClickHouseEnableFinal=it.MoreSettings.ClickHouseEnableFinal, ClickHouseEnableFinal=it.MoreSettings.ClickHouseEnableFinal,
PgSqlIsAutoToLowerSchema=it.MoreSettings.PgSqlIsAutoToLowerSchema, PgSqlIsAutoToLowerSchema=it.MoreSettings.PgSqlIsAutoToLowerSchema,
EnableJsonb=it.MoreSettings.EnableJsonb EnableJsonb=it.MoreSettings.EnableJsonb,
PostgresIdentityStrategy = it.MoreSettings.PostgresIdentityStrategy
}, },
SqlMiddle = it.SqlMiddle == null ? null : new SqlMiddle SqlMiddle = it.SqlMiddle == null ? null : new SqlMiddle