대부분의 데이터베이스는 이러한 제약 조건을 인덱스로 저장하므로 앞서 언급 한대로 DatabaseMetaData.getIndexInfo()을 사용할 수 있습니다. 이것은 Postgresql을 사용할 때 잘 동작했습니다. ; 때 진정한, 고유 값에 대해서만 인덱스를 반환 -
unique
다음 documenation 말한대로
이 true
로 4 매개 변수 getIndexInfo()
를 호출하는 경우에만 중요 때 거짓, 반환 지수에 관계없이 다음 코드와 독특한 여부
의 :
getUniqueConstraints(conn, "public", tableName);
를 다시 모든 고유의 목록을 얻을 :
// Class to combine all columns for the same index into one object
public static class UniqueConstraint {
public String table;
public String name;
public List<String> columns = new ArrayList<>();
public String toString() {
return String.format("[%s] %s: %s", table, name, columns);
}
}
public static List<UniqueConstraint> getUniqueConstraints(Connection conn, String schema, String table) throws SQLException {
Map<String, UniqueConstraint> constraints = new HashMap<>();
DatabaseMetaData dm = conn.getMetaData();
ResultSet rs = dm.getIndexInfo(null, schema, table, true, true);
while(rs.next()) {
String indexName = rs.getString("index_name");
String columnName = rs.getString("column_name");
UniqueConstraint constraint = new UniqueConstraint();
constraint.table = table;
constraint.name = indexName;
constraint.columns.add(columnName);
constraints.compute(indexName, (key, value) -> {
if (value == null) { return constraint; }
value.columns.add(columnName);
return value;
});
}
return new ArrayList<>(constraints.values());
}
당신이 호출 할 수 있습니다 주어진 테이블에 대한 제약 조건. 하나의 인덱스가 여러 개의 컬럼을 포함 할 수 있으므로 제약 조건은 인덱스별로 그룹화됩니다.
그래서 오라클 관련 솔루션을 갖고 있지 않겠습니까? – DCookie