fix: 获取表主键逻辑完善

This commit is contained in:
meilin.huang
2022-11-23 20:48:37 +08:00
parent 3475c39fe6
commit 772995705f
4 changed files with 24 additions and 4 deletions

View File

@@ -14,7 +14,7 @@ type DbMetadata interface {
// 表名: tableName, 列名: columnName, 列类型: columnType, 备注: columnComment, 是否可为null: nullable, 其他信息: extra
GetColumns(tableNames ...string) []map[string]interface{}
// 获取表主键字段名,目前默认第一个字段
// 获取表主键字段名,没有主键标识则默认第一个字段
GetPrimaryKey(tablename string) string
// 获取表信息比GetTables获取更详细的表信息

View File

@@ -53,12 +53,18 @@ func (mm *MysqlMetadata) GetColumns(tableNames ...string) []map[string]interface
return result
}
// 获取表主键字段名,默认第一个字段
// 获取表主键字段名,不存在主键标识则默认第一个字段
func (mm *MysqlMetadata) GetPrimaryKey(tablename string) string {
columns := mm.GetColumns(tablename)
if len(columns) == 0 {
panic(biz.NewBizErr(fmt.Sprintf("[%s] 表不存在", tablename)))
}
for _, v := range columns {
if v["columnKey"].(string) == "PRI" {
return v["columnName"].(string)
}
}
return columns[0]["columnName"].(string)
}

View File

@@ -22,6 +22,7 @@ const (
A.attname AS "columnName",
tc.is_nullable AS "nullable",
concat_ws ( '', t.typname, SUBSTRING ( format_type ( a.atttypid, a.atttypmod ) FROM '\(.*\)' ) ) AS "columnType",
(CASE WHEN ( SELECT COUNT(*) FROM pg_constraint WHERE conrelid = a.attrelid AND conkey[1]= attnum AND contype = 'p' ) > 0 THEN 'PRI' ELSE '' END ) AS columnKey,
d.description AS "columnComment"
FROM
pg_attribute a LEFT JOIN pg_description d ON d.objoid = a.attrelid
@@ -65,12 +66,17 @@ func (pm *PgsqlMetadata) GetColumns(tableNames ...string) []map[string]interface
return result
}
// 获取表主键字段名,默认第一个字段
func (pm *PgsqlMetadata) GetPrimaryKey(tablename string) string {
columns := pm.GetColumns(tablename)
if len(columns) == 0 {
panic(biz.NewBizErr(fmt.Sprintf("[%s] 表不存在", tablename)))
}
for _, v := range columns {
if v["columnKey"].(string) == "PRI" {
return v["columnName"].(string)
}
}
return columns[0]["columnName"].(string)
}