我正在尝试获取数据库元数据,并确定是否存在我创建的表。我能够获取已创建的表,但是在元数据中获取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');的示例查询

最佳答案

由于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)

10-06 03:17