我正在尝试使用以下选项插入select查询中的值:
INSERT INTO cb (vol_sec)
SELECT sum(vol)
FROM cb
GROUP BY cusec;
但错误消息是ERROR:列«id»限制的值null违反非null。我试图将NOT NULL更改为NULL,但我有另一条消息'the column<>是主键。 有没有办法避免这种错误?。提前谢谢。
答案 0 :(得分:2)
必须遵循以下步骤:
删除约束PRIMARY KEY
ALTER TABLE schema.cb DROP CONSTRAINT name_of_constraint;
更新constrait而不是nul。
ALTER TABLE schema.cb ALTER COLUMN id DROP NOT NULL;
执行您的插入。
答案 1 :(得分:2)
目标表id
中的cb
列是主键,您似乎没有为id
列定义任何默认值。
在cb
表中插入值时,主列id
没有值。所以你得到了这个问题。
错误:列«id»限制的值null违反非空。
尝试为主键列id
分配值。您可以通过将列数据类型更改为serial
来自动递增。
删除表cb
并使用id
--drop TABLE cb;
CREATE TABLE cb
(
id integer serial,
vol_sec integer,
--other columns,
CONSTRAINT pk_id PRIMARY KEY (id)
);
希望它适合你。
答案 2 :(得分:1)
首先,我为延迟道歉。您的所有评论都帮助我解决了这个问题。按照提出的步骤,我最终将列(id)作为串行类型插入并执行查询,数据已成功插入。感谢。