首页 > 解决方案 > Postgresql 和 JDBC 检查元数据中的 TYPE ENUM

问题描述

我正在尝试获取数据库元数据并确定我创建的表是否存在。我能够获取我创建的表,但我面临在元数据中获取 TYPE ENUM 的问题。你可以找到我的 JDBC 代码,我应该怎么做才能得到 TYPE ENUM?

bwlow 代码可以很好地打印我创建的表,但我无法获得我创建的 ENUM TYPE。我应该添加任何其他类型ENUM吗?

void printDBTables(@NonNull final Connection connection) throws SQLException {
    final DatabaseMetaData dbMetadata = connection.getMetaData();
    final String[] types = {"TABLE"};
    final ResultSet rs = dbMetadata.getTables(null, null, null, types);
    while (rs.next()) {
        log.info("Found Table with name: {}", rs.getString(3));
    }

我对 java 并不陌生,这里的任何帮助都将不胜感激。下面是我正在使用的示例查询CREATE TYPE TESTQ AS ENUM ('ONE', 'TWO', 'THREE');

标签: javadatabasepostgresqljdbc

解决方案


由于enum类型不是标准 SQL,因此不能期望 JDBC 为它们做出任何规定。

您必须查询 PostgreSQL 元数据:

SELECT t.typname, e.enumlabel
FROM pg_type AS t
   JOIN pg_enum AS e ON t.oid = e.enumtypid
WHERE t.typname = 'testq'
ORDER BY e.enumsortorder;

 typname | enumlabel 
---------+-----------
 testq   | ONE
 testq   | TWO
 testq   | THREE
(3 rows)

推荐阅读