获取pg列时按ordinal排序

This commit is contained in:
2023-03-17 14:46:22 +08:00
parent 754ff29209
commit 33a5bf0766
2 changed files with 32 additions and 5 deletions

View File

@@ -361,8 +361,34 @@ public class DataBaseManager : IDataBaseManager, ITransient
{
if (link != null && _sqlSugarClient.CurrentConnectionConfig.ConfigId != link.Id) _sqlSugarClient = ChangeDataBase(link);
var list = _sqlSugarClient.DbMaintenance.GetColumnInfosByTableName(tableName, false);
return list.Adapt<List<DbTableFieldModel>>();
List<DbTableFieldModel> list;
if (link.DbType == SqlSugar.DbType.PostgreSQL.ToString())
{
var sql = @"SELECT pcolumn.table_name AS tableName,pcolumn.column_name AS field,pcolumn.udt_name AS dataType,
pcolumn.column_default as defaults,col_description(pclass.oid, pcolumn.ordinal_position) AS fieldName,
CASE WHEN pcolumn.numeric_scale>0 THEN pcolumn.numeric_precision ELSE COALESCE(pcolumn.character_maximum_length,0) END AS dataLength,
CASE WHEN pcolumn.is_nullable = 'YES' THEN 1 ELSE 0 END AS allowNull,
CASE WHEN pcolumn.column_default LIKE 'nextval%' THEN true ELSE false END AS identity,
CASE WHEN pkey.colname = pcolumn.column_name THEN true ELSE false END AS primaryKey
FROM information_schema.columns pcolumn
INNER JOIN pg_class pclass ON pcolumn.table_name = pclass.relname
LEFT JOIN (
SELECT pg_class.relname,pg_attribute.attname AS colname FROM
pg_constraint INNER JOIN pg_class
ON pg_constraint.conrelid = pg_class.oid
INNER JOIN pg_attribute ON pg_attribute.attrelid = pg_class.oid
and pg_attribute.attnum = pg_constraint.conkey[1]
INNER JOIN pg_type ON pg_type.oid = pg_attribute.atttypid
where pg_constraint.contype='p'
) pkey ON pcolumn.table_name = pkey.relname
WHERE pcolumn.table_name='{0}' ORDER BY ordinal_position";
list = _sqlSugarClient.SqlQueryable<DbTableFieldModel>(string.Format(sql, tableName)).ToList();
}
else
{
list = _sqlSugarClient.DbMaintenance.GetColumnInfosByTableName(tableName, false).Adapt<List<DbTableFieldModel>>();
}
return list;
}
/// <summary>
@@ -435,7 +461,8 @@ public class DataBaseManager : IDataBaseManager, ITransient
var data = new DatabaseTableInfoOutput()
{
tableInfo = _sqlSugarClient.DbMaintenance.GetTableInfoList(false).Find(m => m.Name == tableName).Adapt<TableInfoOutput>(),
tableFieldList = _sqlSugarClient.DbMaintenance.GetColumnInfosByTableName(tableName, false).Adapt<List<TableFieldOutput>>()
tableFieldList = GetFieldList(link, tableName).Adapt<List<TableFieldOutput>>()
//tableFieldList = _sqlSugarClient.DbMaintenance.GetColumnInfosByTableName(tableName, false).Adapt<List<TableFieldOutput>>()
};
data.tableFieldList = ViewDataTypeConversion(data.tableFieldList, _sqlSugarClient.CurrentConnectionConfig.DbType);