2010-07-29 95 views
2

我一直在寻找一个答案,但至今没有运气...PostgreSQL的JDBC - 可以删除而不是重新创建索引

我想可能与数百万条记录的数据库进行批量操作,阅读PostgreSQL指南:'13.4填充数据库'1,它建议删除索引和外键约束以加快复制操作。

我试图用JDBC语句来实现这一点,我发现我可以放弃索引没有任何问题,但填充数据库后重新创建它们有问题。我得到“或接近”,我创建索引的语法错误名称:

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(); 

如果我在执行这个PSQL查询,它成功地创建索引的,所以我有点糊涂了。 ..

任何帮助,见解,建议等将不胜感激:) 在此先感谢。

+0

我能够建立这样的指标(不TABLESPACE )使用来自Jython的JDBC。给我们更多的信息:是否可以创建简单的索引?你使用什么版本的JDBC和PostgreSQL? – 2010-07-29 10:16:54

+0

我只试图删除和重新创建这些独特的索引,我会尝试删除一个简单的索引,并回到你身边...... 我使用JDBC 8.4-701与PostgreSQL 8.3.3。 – cg776 2010-07-30 01:40:08

+0

postgresql服务器日志是否也显示错误,并使用与您要发送的SQL相同的SQL? (以防万一发生在SQL上的某种方式......) – araqnid 2010-12-07 15:20:19

回答

1

不能评论像Michal Niklas那样的答案,但是你的sql语句在postgres中是非法的,并且无法工作。我的猜测:

CREATE UNIQUE INDEX type_uk ON cell (field1, field2, field3, field4) TABLESPACE lcindex 
    where field3 is not null and field4 is not null; 
  • 表空间应该来之前,这里
  • 在那里每一个领域的where子句有 有“不为空”
+0

好吧,我会尽快尝试并找回给你们,让其他人知道这是否有效。非常感谢 :) – cg776 2010-08-03 06:47:08

相关问题