如何在PostgreSQL中更改列类型和所有外键?

Jha*_*ood 2 django postgresql

我目前在我的Django应用程序中陷入困境22.我必须将列的类型从Varying char更改为Integer,因为我正在从UUID转移到普通的旧ID(数据不会像物理常量那样改变).现在django最初扔了一个Fit,因为无法从VarChar投射到Int,所以我"帮助"它:

 ALTER TABLE glass_fill ALTER COLUMN id TYPE INTEGER USING CAST(id AS INT);
Run Code Online (Sandbox Code Playgroud)

现在,它说:

django.db.utils.DatabaseError: foreign key constraint "glass_fill_manufacturer_glass_fill_id_fkey" cannot be implemented
DETAIL:  Key columns "glass_fill_id" and "id" are of incompatible types: integer and character varying.
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

注意:还没有创建glass_fill_manufacturer表,但是django在syncdb上运行但是失败了.还有,

ALTER TABLE glass_fill ALTER COLUMN id TYPE INTEGER USING CAST(id AS INT); 
Run Code Online (Sandbox Code Playgroud)

我认为,这条线并没有改变这一列.

glass_fill表模式:

-- Table: glass_fill

-- DROP TABLE glass_fill;

CREATE TABLE glass_fill
(
  id character varying(36) NOT NULL,
  name character varying(255),
  temperature real,
  density real,
  viscosity real,
  conductivity real,
  heat_capacity real,
  colour text,
  CONSTRAINT glass_fill_pkey PRIMARY KEY (id )
)
WITH (
  OIDS=FALSE
);
Run Code Online (Sandbox Code Playgroud)

Clo*_*eto 8

ALTER TABLE glass_fill_manufacturer 
ALTER COLUMN glass_fill_id TYPE INTEGER USING CAST(glass_fill_id AS INT)
;
Run Code Online (Sandbox Code Playgroud)

我想通过你的文字,Django会以某种方式做到这一点,但如果不这样做:

ALTER TABLE glass_fill_manufacturer 
drop constraint glass_fill_manufacturer_glass_fill_id_fkey
;

alter table glass_fill_manufacturer 
ADD constraint glass_fill_manufacturer_glass_fill_id_fkey 
foreign key (glass_fill_id) references glass_fill (id)
;
Run Code Online (Sandbox Code Playgroud)