[Schmitzm-commits] r1694 - trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Mon Aug 29 14:04:38 CEST 2011
Author: alfonx
Date: 2011-08-29 14:04:38 +0200 (Mon, 29 Aug 2011)
New Revision: 1694
Modified:
trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java
Log:
* Neue Methode um Indexes einer Tabelle aufzuz?\195?\164hlen. * Neue Indexes werden nur erstellt,w enn ein gleichnamiger Index noch nicht existiert => Spart eine Exception im Log pro Index.
Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java 2011-08-26 16:28:04 UTC (rev 1693)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java 2011-08-29 12:04:38 UTC (rev 1694)
@@ -346,10 +346,34 @@
public static void addIndex(Connection c, final String tableName,
final String columns, String idxPostfix, final boolean unique)
throws SQLException {
- addIndex(c,tableName, columns, idxPostfix, unique, null);
+ addIndex(c, tableName, columns, idxPostfix, unique, null);
}
/**
+ * Liefert eine Liste aller Indexnamen die für eine Tabelle existieren. Der
+ * Tabellenname wird mit <code>like</code> verglichen, darf also
+ * <code>%</code> enthalten.
+ */
+ public static List<String> listIndexesForTable(Connection c,
+ String tableName) throws SQLException {
+ Statement s = c.createStatement();
+
+ List<String> idxes = new ArrayList<String>();
+
+ String sql = "select t.relname as table_name, i.relname as index_name, array_to_string(array_agg(a.attname), ', ') as column_names from pg_class t, pg_class i, pg_index ix, pg_attribute a where t.oid = ix.indrelid and i.oid = ix.indexrelid and a.attrelid = t.oid and a.attnum = ANY(ix.indkey) and t.relkind = 'r' and t.relname like '"
+ + tableName
+ + "' group by t.relname, i.relname order by t.relname, i.relname; ";
+
+ ResultSet rs = s.executeQuery(sql);
+ while (rs.next()) {
+ idxes.add(rs.getString(2));
+ }
+
+ return idxes;
+
+ }
+
+ /**
* @param tableName
* e.g. 'inseratabfragen_kvps'
* @param columns
@@ -368,8 +392,13 @@
String tablespace) throws SQLException {
final String idxName = (tableName + "_" + idxPostfix).replace(".", "_");
+ if (listIndexesForTable(c, tableName).contains(idxName)) {
+ // Existiert bereits.
+ return;
+ }
+
Statement s = c.createStatement();
- // TODO DROP FIRST?
+
final String queryString = "CREATE " + (unique ? "UNIQUE " : "")
+ "INDEX " + idxName + " ON " + tableName + " (" + columns
+ ") "
@@ -405,7 +434,8 @@
/**
* Fügt einen Benutzer zu einer Rolle hinzu. Wenn der benutzer bereits in
* der Rolle enthalten ist, wird keine Exception geschmisssen.
- * @throws SQLException
+ *
+ * @throws SQLException
*/
public static void grantRoleToUser(Connection c, String rolename,
String username) throws SQLException {
More information about the Schmitzm-commits
mailing list