更改主键数据类型

change primary key data type

我正在使用 PostgreSQL。 e_id 是主键,我想将数据类型从 char(5) 更改为整数。

  Column   |         Type          | Modifiers 
-----------+-----------------------+-----------
 e_id      | character(5)          | not null

     Column      |     Type     | Modifiers 
-----------------+--------------+-----------
 employee_e_id   | character(5) | not null
 product_prod_nr | character(5) | not null
 hours           | numeric      | not null
Indexes:
    "works_on_pkey" PRIMARY KEY, btree (employee_e_id, product_prod_nr, hours)
Foreign-key constraints:
    "works_on_employee_e_id_fkey" FOREIGN KEY (employee_e_id) REFERENCES employee(e_id)

我的数据库中的一个 table 已经依赖于该主键。 有办法吗?

你可以这样做things.I希望你在两个表中的所有现有记录都与整数类型兼容。

BEGIN;
ALTER TABLE works_on DROP CONSTRAINT works_on_employee_e_id_fkey;
ALTER TABLE works_on ALTER COLUMN employee_e_id TYPE INTEGER USING employee_e_id::INTEGER;
ALTER TABLE employee ALTER COLUMN e_id TYPE INTEGER USING e_id::INTEGER;
ALTER TABLE works_on ADD CONSTRAINT works_on_employee_e_id_fkey 
                     FOREIGN KEY (employee_e_id) REFERENCES employee(e_id);
END;

Demo