2010-07-29 4 views
2

J'ai été à la recherche d'une réponse, mais pas de chance jusqu'à présent ...PostgreSQL JDBC - peut tomber, mais pas recréer les index

Je veux effectuer des opérations en vrac sur une base de données avec potentiellement des millions d'enregistrements, la lecture de la Guide PostgreSQL: '13 .4 Remplissage d'une base de données '1, il suggère de supprimer les index et les contraintes de clé étrangère pour accélérer l'opération de copie. J'essaye d'accomplir ceci en utilisant les instructions de JDBC, je trouve que je peux laisser tomber les index sans n'importe quel problème, mais les recréer après peupler la base de données a des problèmes. Je reçois une erreur de syntaxe 'à ou près du nom de l'index que je crée:

Statement stmt = connection.createStatement(); 
String query = "CREATE UNIQUE INDEX type_uk ON cell (field1, field2, field3, field4) WHERE field3 AND field4 IS NOT NULL TABLESPACE lcindex"; 

stmt.executeUpdate(query); 
connection.commit(); 

Si j'exécute cette requête dans psql, il crée avec succès l'indice, alors je suis un peu confus.

Toute aide, idées, suggestions, etc. serait grandement appréciée :) Merci d'avance.

+0

Je suis en mesure de créer de tels indices (sans TABLESPACE) en utilisant JDBC de Jython. Donne-nous plus d'informations sur: est-il possible de créer des index simples? Quelle version de JDBC et PostgreSQL utilisez-vous? –

+0

J'ai seulement essayé d'abandonner et recréer ces index uniques, je vais essayer de déposer un index simple et de revenir à vous ... J'utilise JDBC 8.4-701 avec PostgreSQL 8.3.3. – cg776

+0

le journal du serveur postgresql affiche-t-il également l'erreur, avec le même code SQL que celui que vous envoyez? (juste au cas où quelque chose arrive au SQL sur le chemin en quelque sorte ...) – araqnid

Répondre

1

Impossible de commenter la réponse comme Michal Niklas l'a fait, mais votre instruction sql est illégale dans postgres et ne peut pas fonctionner. Je pense:

CREATE UNIQUE INDEX type_uk ON cell (field1, field2, field3, field4) TABLESPACE lcindex 
    where field3 is not null and field4 is not null; 
  • tablespace doit venir avant où
  • tous les domaines là où l'article a avoir « est non nul »
+0

Ok, je vais essayer cela dès que possible et revenir à vous les gars afin que les autres sachent si cela a fonctionné ou non. Merci beaucoup :) – cg776

Questions connexes