91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PostgreSQL12的新特性REINDEX有什么作用

發布時間:2021-11-09 11:20:21 來源:億速云 閱讀:719 作者:iii 欄目:關系型數據庫

這篇文章主要介紹“PostgreSQL12的新特性REINDEX有什么作用”,在日常操作中,相信很多人在PostgreSQL12的新特性REINDEX有什么作用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PostgreSQL12的新特性REINDEX有什么作用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

PG 12引入REINDEX
CONCURRENTLY,為了解決在REINDEX期間不能執行查詢操作的問題,REINDEX CONCURRENTLY使用了相對于pg_repack(前身是pg_reorg)成本更低的方法來實現在索引rebuild期間數據表的可讀寫查詢,但rebuild的時間越長,需要的資源越多,其實現思路如下:
1.創建新的索引(在與原index一樣的catalog中),以_ccnew結尾
2.構建新索引,這一步會并行去做
3.使新索引與在構建期間出現的變化同步(catch up)
4.重命名新索引為舊索引的名稱并切換所有依賴舊索引的地方到新索引.舊索引設置為invalid(這一步成為交換)
5.標記舊索引為dead狀態(vacuum進程可回收)
6.刪除索引
上面每一步都需要事務.在reindexing table時,該表的所有索引會一次過進行收集每一步都會處理所有的索引.可以把這個過程視為在一個單獨的事務中CREATE INDEX CONCURRENTLY后跟DROP INDEX的組合,中間有一步是完全透明的新舊索引切換.
如果在REINDEX期間出現異常,那么所有需要rebuild的索引的狀態都是invalid,意味著這些索引仍然占用空間,定義仍在但不能使用.

下面是測試腳本,PG 11 vs PG 12的一些區別
PG 11

testdb=# CREATE TABLE tab (a int);
CREATE TABLE
testdb=# INSERT INTO tab VALUES (1),(1),(2);
INSERT 0 3
testdb=# CREATE UNIQUE INDEX CONCURRENTLY tab_index on tab (a);
ERROR:  could not create unique index "tab_index"
DETAIL:  Key (a)=(1) is duplicated.
testdb=# \d tab
                Table "public.tab"
 Column |  Type   | Collation | Nullable | Default 
--------+---------+-----------+----------+---------
 a      | integer |           |          | 
Indexes:
    "tab_index" UNIQUE, btree (a) INVALID
testdb=# REINDEX TABLE tab;
ERROR:  could not create unique index "tab_index"
DETAIL:  Key (a)=(1) is duplicated.
testdb=#  DELETE FROM tab WHERE a = 1; 
DELETE 2
testdb=# REINDEX TABLE tab;
REINDEX

PG 12

testdb=#  CREATE TABLE tab (a int);
CREATE TABLE
testdb=# INSERT INTO tab VALUES (1),(1),(2);
INSERT 0 3
testdb=#  CREATE UNIQUE INDEX CONCURRENTLY tab_index on tab (a);
psql: ERROR:  could not create unique index "tab_index"
DETAIL:  Key (a)=(1) is duplicated.
testdb=#  REINDEX TABLE CONCURRENTLY tab;
psql: WARNING:  cannot reindex invalid index "public.tab_index" concurrently, skipping
psql: NOTICE:  table "tab" has no indexes
REINDEX
testdb=#  DELETE FROM tab WHERE a = 1; 
DELETE 2
testdb=#  REINDEX TABLE CONCURRENTLY tab;
psql: WARNING:  cannot reindex invalid index "public.tab_index" concurrently, skipping
psql: NOTICE:  table "tab" has no indexes
REINDEX
testdb=#  REINDEX INDEX CONCURRENTLY tab_index;
REINDEX
testdb=#

PG 12自動跳過了invalid index.

到此,關于“PostgreSQL12的新特性REINDEX有什么作用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湟中县| 聂荣县| 康定县| 松滋市| 宁陕县| 隆德县| 辰溪县| 驻马店市| 桐城市| 柳河县| 永靖县| 陆河县| 克什克腾旗| 阿克陶县| 益阳市| 仙游县| 泽库县| 兰溪市| 凤冈县| 望都县| 平邑县| 麦盖提县| 新田县| 通山县| 左贡县| 泊头市| 无为县| 莲花县| 武平县| 柳河县| 石家庄市| 崇义县| 红桥区| 台中市| 绵阳市| 利津县| 阿勒泰市| 永州市| 恭城| 胶南市| 裕民县|