PostgreSQL 字段类型速查与 Java 枚举映射

发布于:2025-07-21 ⋅ 阅读:(17) ⋅ 点赞:(0)

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
}