【问题标题】:Copying rows violates not-null constraint in PostgreSQL复制行违反 PostgreSQL 中的非空约束
【发布时间】:2016-01-18 00:06:00
【问题描述】:

我正在尝试做this solutionhere 中描述的事情。这意味着我想复制具有多列的行,同时只更改几个值。所以我的查询看起来像这样:

CREATE TEMPORARY TABLE temp_table AS 
    SELECT * FROM original_table WHERE <conditions>;

UPDATE temp_table 
    SET <auto_inc_field>=NULL, 
        <fieldx>=<valuex>,
        <fieldy>=<valuey>;

INSERT INTO original_table SELECT * FROM temporary_table;

但是,&lt;auto_inc_field&gt;=NULL 部分不适用于我,分别是我的 PostgreSQL 9.4 数据库:

Exception: null value in column "auto_inc_field" violates not-null constraint

&lt;auto_inc_field&gt; 列定义为 BIGINT、SERIAL,并具有主键约束。

如果NULL 不起作用,我需要通过什么?有其他方法吗?

【问题讨论】:

  • &lt;the aut_inc_field&gt;的定义是什么?它需要接受null。
  • 更新了问题。它有一个主要约束。有没有办法让这个工作?

标签: postgresql constraints auto-increment


【解决方案1】:

我了解主键是serial。在insert 命令中列出除主键之外的所有列。列出select命令中对应的列和值:

insert into original_table (col_1, col_2, col_3)
select col_1, value_2, value_2
from original_table
where the_conditions;

【讨论】:

  • 好的 - 这是实用的版本:D 我的问题是要优雅的版本;)
  • @n1000 我不知道有一个更优雅的。你是?它有什么不优雅的地方?
  • 我指的是这个question / answer,我无法在我的设置中使用它。
猜你喜欢
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
相关资源
最近更新 更多