【发布时间】:2019-09-19 07:06:42
【问题描述】:
假设我想创建一个索引。这需要一些时间。我使用 pgadmin。假设在执行查询时 pgadmin 由于某种原因崩溃(例如计算机重新启动)。
该索引的状态是什么。它会继续创建并最终在某个时候成功创建,还是会立即失败,或者一段时间后会失败?
有什么方法可以检查正在创建的索引的状态是什么? (我使用的是 postgres 10.x 版)
【问题讨论】:
标签: postgresql
假设我想创建一个索引。这需要一些时间。我使用 pgadmin。假设在执行查询时 pgadmin 由于某种原因崩溃(例如计算机重新启动)。
该索引的状态是什么。它会继续创建并最终在某个时候成功创建,还是会立即失败,或者一段时间后会失败?
有什么方法可以检查正在创建的索引的状态是什么? (我使用的是 postgres 10.x 版)
【问题讨论】:
标签: postgresql
如果我们不知道应用程序崩溃的原因,就很难回答这个问题。如果它不是由服务器故障引起的,则很可能索引已正确创建。您可以通过查询系统目录pg_index 来检查这一点。您必须知道索引名称,例如:
select indexrelid::regclass, indisvalid
from pg_index
where indexrelid::regclass::text = 'my_table_unique_col_key'
indisvalid - 如果为 true,则索引当前对查询有效。 False 表示索引可能不完整:它仍必须通过 INSERT/UPDATE 操作进行修改,但不能安全地用于查询。如果它是唯一的,那么唯一性属性也不能保证为真。
如果索引尚未创建(或根本由于查询失败),则上述查询不返回任何行。您可以检查创建索引的查询是否仍在运行(参见Dynamic Statistics Views):
select *
from pg_stat_activity
where query ilike 'create index%'
【讨论】: