Postgresql

postgresql 修改現有的唯一索引

  • October 20, 2021

我在 PostgreSQL 上有這張表:


example_dev=# \d products
                                   Table "public.products"
Column |          Type          | Collation | Nullable |               Default                
--------+------------------------+-----------+----------+--------------------------------------
id     | bigint                 |           | not null | nextval('products_id_seq'::regclass)
name   | character varying(255) |           |          | 
price  | integer                |           |          | 
sku    | character varying(255) |           |          | 
Indexes:
   "products_pkey" PRIMARY KEY, btree (id)
   "name_price_unique_index" UNIQUE, btree (name, price)

如您所見,我name_price_unique_index在列nameprice.

我需要做的是修改它,因為我也需要添加sku列。所以我需要三列的組合。

像這樣的東西:

"name_price_sku_unique_index" UNIQUE, btree (name, price, sku)

我一直在尋找有關如何執行此操作的資訊,但我沒有找到任何資訊。

有誰知道如何做到這一點?

您需要創建一個新索引並替換舊索引:

CREATE UNIQUE INDEX CONCURRENTLY newidx ON tab (name, price, sku);
DROP INDEX name_price_sku_unique_index;
ALTER INDEX newidx RENAME TO name_price_sku_unique_index;

引用自:https://dba.stackexchange.com/questions/301414