1. 查询 SQL
SELECT
c.table_schema,
c.table_name,
c.column_name,
c.data_type,
c.udt_name,
CASE
-- 数值
WHEN c.udt_name IN ('int2','int4','int8','float4','float8','numeric','money')
THEN 'NUMERIC'
-- 布尔
WHEN c.udt_name = 'bool'
THEN 'BOOLEAN'
-- 日期/时间
WHEN c.udt_name IN ('date','time','timetz','timestamp','timestamptz','interval')
THEN 'DATETIME'
-- 字符
WHEN c.udt_name IN ('bpchar','varchar','text')
THEN 'STRING'
-- JSON
WHEN c.udt_name IN ('json','jsonb')
THEN 'JSON'
-- 数组
WHEN c.udt_name ILIKE '%[]'
THEN 'ARRAY'
-- 其余全部进 OTHER
ELSE 'OTHER'
END AS type_category
FROM information_schema.columns c
WHERE c.table_schema = :schema
AND c.table_name = :table
ORDER BY c.ordinal_position;
2. Java 枚举(含中文注释)
package com.example.db;
/**
* PostgreSQL 字段类型 → Java 简化分类
*/
public enum PgTypeCategory {
/**
* 数值型(int2/int4/int8/float4/float8/numeric/money)
*/
NUMERIC,
/**
* 布尔型(bool)
*/
BOOLEAN,
/**
* 日期/时间型(date/time/timetz/timestamp/timestamptz/interval)
*/
DATETIME,
/**
* 字符型(bpchar/varchar/text)
*/
STRING,
/**
* JSON 型(json/jsonb)
*/
JSON,
/**
* 数组型(xxx[])
*/
ARRAY,
/**
* 其他:二进制(bytea)、UUID、网络地址(inet/cidr/macaddr)、几何(point/line/…)、
* 自定义复合类型、枚举、域等全部归入此类
*/
OTHER
}