TimeOut同时创建唯一索引

时间:2014-10-30 10:43:03

标签: sql postgresql

我正在尝试在我的生产箱上的表格上创建唯一索引。为此:

  1. 使用COLUMN1
  2. 创建了一个表TABLE1
  3. 在我的生产数据库(即Postgres)上执行以下命令

    Create UNIQUE INDEX CONCURRENTLY idx_id_unique on TABLE1(COLUMN1)
    
  4. 这是抛出错误(一段时间后):

      

    2014-10-07 20:46:49.056 EDT ERROR:由于语句超时而取消声明

         

    2014-10-07 20:46:49.056 EDT声明:在TABLE1(COLUMN1)上同时创建唯一索引idx_id_unique

    我的问题是:

    1. 这种超时失败的可能原因是什么? 注意:由于这是生产数据库服务器,我们有数千个多个查询/事务同时运行,因此这个CREATE INDEX ....将需要大量的时间。但是,这个查询会抛出超时异常吗?
    2. Postgres是否会同时为CREATE UNIQUE INDEX抛出语句超时错误?由于此查询需要多个小时才能完成大型表格。
    3. 可能的解决办法是什么?

1 个答案:

答案 0 :(得分:0)

  

这种超时失败的可能原因是什么?注意:作为   这是生产数据库服务器,我们有数千个   同时运行的查询/事务,所以这个CREATE INDEX ....   将需要大量的时间。但是,仍然会这个查询   抛出超时异常?

嗯,它告诉你:cancelling statement due to statement timeout。所以,是的。

  
      
  1. POSTGRES是否会同时为CREATE UNIQUE INDEX抛出语句超时错误?由于此查询需要多个小时才能完成大型表格。
  2.   

是的,它只是告诉过你。

  
      
  1. 可能的解决办法是什么?
  2.   

增加创建索引的会话的语句超时限制?


编辑:添加手册链接

有关statement_timeout的详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-STATEMENT-TIMEOUT

同样如何设置配置设置:http://www.postgresql.org/docs/current/static/sql-set.html

我对您正在使用的这个TransactionTemplate事物一无所知,但谷歌建议它有文档。大概有一些方法可以通过它发出原始SQL,如果没有其他的话。


顺便说一句,如果您:

,您会发现您的开发更容易
  1. 仔细阅读提供的错误消息。
  2. 至少熟悉您正在使用的软件的手册。
  3. 可以通过谷歌或内置搜索在#2中搜索#1。