在尝试向模型添加值时,我的django应用程序遇到了问题。根据models.py,似乎DB中存在一个不应存在的约束。我得到的错误是:
IntegrityError:“column_x_ptr_id”列中的空值违反非空约束
在psql中执行\dt
,我得到:
Indexes: "mytable_model_pkey" PRIMARY KEY, btree (column_x_ptr_id) "mytable_model_p_key" UNIQUE CONSTRAINT, btree (column_y_ptr_id)
所以,我的问题是如何修改这个索引呢?
“mytable_model_pkey”PRIMARY KEY,btree(column_y_ptr_id)
我不确定这会解决问题..
答案 0 :(得分:1)
好的,这会给你一个“或多或少”你需要做的事情。你的表看起来像这样:
CREATE TABLE mytable_model
(
column_x_ptr_id integer NOT NULL,
column_y_ptr_id integer,
CONSTRAINT mytable_model_pkey PRIMARY KEY (column_x_ptr_id),
CONSTRAINT mytable_model_p_key UNIQUE (column_y_ptr_id)
)
您需要删除这两个索引,在第二列上创建一个新的PK,并删除NOT NULL约束:
ALTER TABLE mytable_model DROP CONSTRAINT mytable_model_pkey;
ALTER TABLE mytable_model DROP CONSTRAINT mytable_model_p_key;
ALTER TABLE mytable_model ADD CONSTRAINT mytable_model_pkey PRIMARY KEY (column_y_ptr_id);
ALTER TABLE mytable_model ALTER COLUMN column_x_ptr_id DROP NOT NULL;
请注意,向column_y_ptr_id
添加主键会将列更改为NOT NULL
。如果该字段中的任何记录都为NULL,则会失败。然后正如我所提到的,出于性能原因,您可能希望在column_x_ptr_id
上放置另一个索引。你使用什么类型取决于你。