更改主键数据类型

时间:2018-12-14 17:13:58

标签: postgresql type-conversion foreign-keys primary-key ddl

我正在使用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)

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

1 个答案:

答案 0 :(得分:0)

您可以做这些事情。我希望两个表中的所有当前记录都与Integer类型兼容。

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