【问题标题】:close client before finishing command postgresql在完成命令 postgresql 之前关闭客户端
【发布时间】:2019-09-19 07:06:42
【问题描述】:

假设我想创建一个索引。这需要一些时间。我使用 pgadmin。假设在执行查询时 pgadmin 由于某种原因崩溃(例如计算机重新启动)。

该索引的状态是什么。它会继续创建并最终在某个时候成功创建,还是会立即失败,或者一段时间后会失败?

有什么方法可以检查正在创建的索引的状态是什么? (我使用的是 postgres 10.x 版)

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    如果我们不知道应用程序崩溃的原因,就很难回答这个问题。如果它不是由服务器故障引起的,则很可能索引已正确创建。您可以通过查询系统目录pg_index 来检查这一点。您必须知道索引名称,例如:

    select indexrelid::regclass, indisvalid
    from pg_index
    where indexrelid::regclass::text = 'my_table_unique_col_key'
    

    the documantaion:

    indisvalid - 如果为 true,则索引当前对查询有效。 False 表示索引可能不完整:它仍必须通过 INSERT/UPDATE 操作进行修改,但不能安全地用于查询。如果它是唯一的,那么唯一性属性也不能保证为真。

    如果索引尚未创建(或根本由于查询失败),则上述查询不返回任何行。您可以检查创建索引的查询是否仍在运行(参见Dynamic Statistics Views):

    select *
    from pg_stat_activity
    where query ilike 'create index%'
    

    【讨论】:

    • 好的,但是如何检查(例如在同时创建索引中)它是否处于无效状态,因为它仍在构建中或因为某些事情失败了?
    • 谢谢,但同时创建索引我认为该索引将立即存在但状态无效:)
    • 是的,确实如此。因此,您应该首先检查查询是否仍在运行。
    猜你喜欢
    • 2013-01-16
    • 2017-10-11
    • 2011-07-03
    • 2012-06-23
    • 2011-05-03
    • 2012-01-10
    • 2010-09-11
    • 2021-11-28
    • 2020-01-24
    相关资源
    最近更新 更多