postgresql从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

我正在尝试使用以下命令插入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_CONSTRAINT

  • 更新constrait not nul

    ALTER TABLE schema.cb ALTER COLUMN id DROP NOT 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
    ,以获取该序列的下一个值。但是,当然,数据库架构的确切细节和/或使用该表的方式可能会影响您应该做的事情。由于有大量字段,我可以共享该架构。您应该接受答案,然后解决您的问题。