PostgreSQL创建索引CONCURRENTLY等待列

6

我正在尝试在大表上创建索引:

 datid  |       datname        |  pid  | usesysid |         usename         |       application_name       | client_addr  | client_hostname | client_port |          backend_start         |          xact_start           |          query_start           |         state_change          | waiting | state  | backend_xid | backend_xmin  |                                           query                                           
 -------+----------------------+-------+----------+-------------------------+---  --------------------------+--------------+-----------------+-------------+------ -------------------------+-------------------------------+---------------------- ---------+-------------------------------+---------+--------+-------------+----- ---------+---------------------------------------------------------------------- ---------------------
  25439 | messengerdb          | 30692 |    25438 | messengerdb_rw          |  pgAdmin III - Przegl??darka | 10.167.12.52 |                 |       50593 | 2016-08-11 05:27:12.101452+02  | 2016-08-11 05:28:01.535943+02 | 2016-08-11 05:28:01.535943+02 | 2016-08-11 05:28:01.535958+02 | t       | active  |             |   1173740991 | CREATE INDEX CONCURRENTLY user_time_idx                                                   +
        |                      |       |          |                         |                              |              |                 |             |                               |                                |                               |                               |         |         |             |              |    ON core.conversations (user_id ASC NULLS LAST,  last_message_timestamp ASC NULLS LAST);+

这个查询是否有效?我担心 'waiting' 列 === 't' 是否意味着它正在等待锁或其他东西?


format please. thank you - e4c5
2
格式化什么?这里看起来还好啊;/ - Rafał Kot
真的不知道怎么做得更好 :( 对造成的不便很抱歉 - Rafał Kot
1个回答

14

并发地创建索引可能需要很长时间,因为它不会锁定表以防止写入,并且会等待其他事务完成。但是,如果您有保持打开连接而没有回滚/提交的空闲连接的客户端或应用程序(例如),它可能会永远等待。

检查是否存在在事务中处于空闲状态的连接(您应该能够在进程列表中看到它们)。您还可以检查PostgreSQL日志。

PostgreSQL文档中关于并发创建索引的章节可能会有所帮助。这里还有一篇关于并发索引的不错文章


非常感谢。有没有办法找出正在创建此索引的当前状态(大小如何)?我没有看到任何“空闲连接处于事务中”的迹象。;/ 感谢您的使用! - Rafał Kot
@DreamCatch 目前我所知道的是,没有办法检查整个进程的当前状态。 - Maciej Małecki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接