code: private Set<String> loadAndCachePrimaryKeysForTable(TableKey tableKey) {
      Set<String> primaryKeys = new HashSet<>();
      try {
        ResultSet pks = sqlLine.getDatabaseConnection().meta.getPrimaryKeys(
            tableKey.catalog, tableKey.schema, tableKey.table);
        try {
          while (pks.next()) {
            primaryKeys.add(pks.getString("COLUMN_NAME"));
          }
        } finally {
          pks.close();
        }
      } catch (SQLException e) {
        // Ignore exception and proceed with the current state (possibly empty)
        // of the primaryKey set.
      }
      tablePrimaryKeysCache.put(tableKey, primaryKeys);
      return primaryKeys;
    }
docs: Load and cache a set of primary key column names given a table key
  (i.e. catalog, schema and table name).  The result cannot be considered
  authoritative as since it depends on whether the JDBC driver property
  implements {@link java.sql.ResultSetMetaData#getTableName} and many
  drivers/databases do not.
  
  @param tableKey A key (containing catalog, schema and table names) into
  the table primary key cache.  Must not be null.
  @return A set of primary key column names.  May be empty but will
  never be null.