在表上创建索引时,PostgreSQL中已存在错误关系

在表上创建索引时,PostgreSQL中已存在错误关系,postgresql,indexing,Postgresql,Indexing,从Java代码在PostgreSQL上运行以下查询时出错 ..... sql = "CREATE TABLE IF NOT EXISTS table1 (s VARCHAR(100), p VARCHAR(100), o VARCHAR(100), PRIMARY KEY (s,p,o)) ; "; pgsql.runUpdateQuery(sql); sql = "CREATE INDEX indextable1 ON ta

从Java代码在PostgreSQL上运行以下查询时出错

 .....
 sql =  "CREATE TABLE IF NOT EXISTS table1 (s VARCHAR(100), p VARCHAR(100), o VARCHAR(100), PRIMARY KEY (s,p,o)) ; ";                   
 pgsql.runUpdateQuery(sql);         

 sql =  "CREATE INDEX indextable1 ON table1 (s,p,o);";  
 pgsql.runUpdateQuery(sql);         
 .....
但是我犯了以下错误

org.postgresql.util.PSQLException: ERROR: relation "indextable1" already exists         

有人能解释一下发生了什么事吗?我的理解是,<代码>主键< /代码>被认为是<代码>索引< /代码>,因此第二个查询失败。我说得对吗?

问题是主键约束名称与表名称相等。我不知道postgres如何表示约束,但我认为在创建主键约束期间触发了错误“关系已存在”,因为表已声明。但是由于这个错误,表没有在最后创建。

在您的模式中还有另一个名为
indextable1
的索引(或表)。这与列列表已经被索引这一事实无关。@a_horse_没有名字谢谢,我在再次运行查询之前已经清理了所有数据库,现在一切都很顺利。