postgresql从select查询中插入值
我正在尝试使用以下命令插入select查询中的值:postgresql从select查询中插入值,postgresql,Postgresql,我正在尝试使用以下命令插入select查询中的值: INSERT INTO cb (vol_sec) SELECT sum(vol) FROM cb GROUP BY cusec; 但错误消息是error:«id»列限制的值null违反not null。我已尝试将NOT NULL更改为NULL,但我收到另一条消息“该列位于主键中”。 有没有办法避免此错误?请提前感谢。必须遵循以下步骤: 删除约束主键 ALTER TABLE schema.cb DROP CONSTRAINT name_of_C
INSERT INTO cb (vol_sec)
SELECT sum(vol)
FROM cb
GROUP BY cusec;
但错误消息是error:«id»列限制的值null违反not null。我已尝试将NOT NULL更改为NULL,但我收到另一条消息“该列位于主键中”。
有没有办法避免此错误?请提前感谢。必须遵循以下步骤:
由于目标表
cb
中的id
列是主键,您似乎没有为id
列定义任何默认值
在cb
表中插入值时,主列id
没有值。所以你得到了这个问题
错误:«id»列限制的值null违反not 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)
);
希望它对您有用。首先,我为延误道歉。你所有的评论都帮助我解决了这个问题。按照建议的步骤,我最终将列(id)作为串行类型插入,并执行查询,成功插入数据。谢谢。您介意将表的架构共享吗?您的目标表作为
id
列,它是主键(因此不为NULL
),但没有默认值。您可能需要添加一个序列(或者在适当的情况下使用现有序列),并为id
设置DEFAULT
,以获取该序列的下一个值。但是,当然,数据库架构的确切细节和/或使用该表的方式可能会影响您应该做的事情。由于有大量字段,我可以共享该架构。您应该接受答案,然后解决您的问题。