2016-12-28 97 views
2

我試圖用btree索引創建一個整數列的索引,但它永遠持續(超過2小時!)。 該表有17.514.879行。我沒有想到它會持續很長時間。在postgres上永久創建索引

經過將近2.5小時後,與數據庫的連接剛剛死亡。當我重新接觸它時,指數就在那裏,但我不知道這個指數有多好。

如何確保索引不會被丟失的連接搞砸?

+1

該聲明最有可能等待鎖定:https://wiki.postgresql.org/wiki/Lock_Monitoring如果索引在那裏,應該沒問題 –

回答

2

如何檢查索引是否通過psql是精細

連接到數據庫並運行\d table_name(其中table_name是你的表的名稱)。例如:

grn=# \d users 
      Table "public.users" 
Column |   Type   | Modifiers 
--------+------------------------+----------- 
name | character varying(255) | 
Indexes: 
    "users_name_idx" btree (name) 

您會在表格模式下方看到索引。如果索引損壞,它將被標記爲如此。

如何不鎖定整個表

您可以在不鎖定整個表,但甚至慢的方式創建索引創建索引。爲此,您需要將CONCURRENTLY添加到CREATE INDEX。例如:

CREATE INDEX CONCURRENTLY users_name_idx ON users(name); 

如何修復被破壞的指數

如果索引損壞,你可以刪除它並重新創建CONCURRENTLY或使用REINDEX INDEX index_name。例如:

REINDEX INDEX users_name_idx 

將重新創建users_name_idx