Apache DdlUtils ::如何获取自动增量键的序列名称?

时间:2012-08-05 00:09:51

标签: postgresql ddlutils

我使用Apache DdlUtils在PostgreSQL数据库中查询表和列元数据(最终目标是自动生成javax.persistence-annotated entity beans)。但是在我看来, DdlUtils 库没有提供获取自动增量列中使用的序列名称的方法。 类提供 isAutoIncrement 方法来查询自动增量状态,但我找不到获取与之关联的序列名称的方法。这是PostgreSQL中DDL的一部分,例如:

orders=# \dS customer
                         Table "public.customer"
    Column     |       Type        |                    Modifiers
---------------+-------------------+--------------------------------------------------
 id            | integer           | not null default nextval('cst_id_seq'::regclass)
 name          | character varying | not null
 (...)

我应该直接查询某些元数据/目录表而不是获取那些信息吗?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题...... 是的,就像 millimoose 建议的那样,使用 DdlUtils 无法完成,你必须查询information_schema.columns表:

public String getPostgreSQLSequenceForColumn(String database, String table, String column) {
    try {
        Statement stmt = connection.createStatement();
        String sql="select column_default from information_schema.columns where "+
                   "table_catalog='"+database+"' and "                           +
                   "table_schema='public' and "                                  +
                   "table_name='"+table+"' and "                                 +
                   "column_name='"+column+"'";
        ResultSet rs = stmt.executeQuery(sql);
        rs.next();
        String sequenceName = rs.getString(1);
        panicIf(rs.next());
        return sequenceName;
    } catch (Exception e) {
        throw new ExceptionAdapter(e);
    }
}