如何将postgres数据库表的主键从账单号更改为账单号和购买日期列的年份部分(它是if类型日期)



我在PostgreSQL数据库中有一个名为product_details的表,这个表的两列是bill_no INTpurchase_date DATE

目前bill_no是主键,但我的客户希望将其更改为bill_no和购买年份,因为账单号在每年开始时以1开始。

是否有办法将表的主键更改为bill_no,只更改purchase_date年部分 ?

您可以像这样删除主键:

alter table bill drop constraint bill_pkey;

如果密钥的名称不是"bill_pkey",则使用d查找它的名称。

您可以添加一个新的主键,如:

alter table bill add constraint bill_pkey primary key (bill_no, purchase_date);

但是您只需要year部分的键。Postgres不支持,但是你可以使用唯一索引:

create unique index ux_bill on bill (bill_no, extract(year from purchase_date));

唯一索引将做主键所做的一切,但它不会有主键标签。

最新更新