如何将Postgres数据库表的主键从票据编号更改为票据编号和购买日期列的年份部分(是OIF类型日期)?

Rah*_*llo 4 sql database postgresql

product_details在PostgreSQL数据库中有一个表,该表的两列是bill_no INTpurchase_date DATE

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

有没有办法来改变表的主键bill_no,只有一年的一部分purchase_date

And*_*mar 5

您可以删除主键,例如:

alter table bill drop constraint bill_pkey;
Run Code Online (Sandbox Code Playgroud)

如果密钥的名称不是“ bill_pkey”,请使用\d查找其名称。

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

alter table bill add constraint bill_pkey primary key (bill_no, purchase_date);
Run Code Online (Sandbox Code Playgroud)

但是,您只需要年份部分的关键。Postgres不支持该功能,但是您可以使用唯一索引:

create unique index ux_bill on bill (bill_no, extract(year from purchase_date));
Run Code Online (Sandbox Code Playgroud)

唯一索引将完成主键所做的所有事情,但不会具有主键标签。