Postgres 中的更改索引
Change Index in Postgres
我在尝试向模型添加值时遇到 Django 应用程序问题。根据 models.py,似乎数据库中存在不应该存在的约束。我得到的错误是:
IntegrityError: null value in column "column_x_ptr_id" violates not-null constraint
在 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)
虽然我不确定这是否能解决问题..
好的,这会给你一个 "more or less" 你需要做什么。您的 table 看起来像这样:
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
上放置另一个索引。你使用什么类型由你决定。
我在尝试向模型添加值时遇到 Django 应用程序问题。根据 models.py,似乎数据库中存在不应该存在的约束。我得到的错误是:
IntegrityError: null value in column "column_x_ptr_id" violates not-null constraint
在 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)
虽然我不确定这是否能解决问题..
好的,这会给你一个 "more or less" 你需要做什么。您的 table 看起来像这样:
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
上放置另一个索引。你使用什么类型由你决定。