6

私は現在、私の Django アプリケーションでキャッチ 22 で立ち往生しています。UUID から単純な古い ID に移行するため、列のタイプを Varying char から Integer に変更する必要があります (物理定数であるため、データは変化しません)。ここで、django はもともと VarChar から Int にキャストできないことについて Fit を投げたので、次のように「助けました」:

 ALTER TABLE glass_fill ALTER COLUMN id TYPE INTEGER USING CAST(id AS INT);

今、それは言います:

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.

何か案は?

注: glass_fill_manufacturer テーブルはまだ作成されていません。django は syncdb を試みますが失敗します。また、

ALTER TABLE glass_fill ALTER COLUMN id TYPE INTEGER USING CAST(id AS INT); 

行は思ったように列を変更しませんでした。

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
);
4

2 に答える 2

12
ALTER TABLE glass_fill_manufacturer 
ALTER COLUMN glass_fill_id TYPE INTEGER USING CAST(glass_fill_id AS INT)
;

あなたのテキストから、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)
;
于 2012-05-25T11:30:52.650 に答える
0

次のことを行う必要があります。

  1. 制約をドロップ
  2. 古い ID と新しい ID の間のマッピングを保持する一時テーブルを作成する
  3. Update glass_fill、一時テーブルに値を返す
  4. 一時テーブルから参照テーブルを更新する
  5. すべてのテーブルで列の型を変更する
  6. 拘束を再作成する
于 2012-05-25T11:25:00.173 に答える