加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 错误:列“id”中的空值违反了非空约束

发布时间:2020-12-17 02:08:56 所属栏目:百科 来源:网络整理
导读:我只是将我的应用程序从 mysql迁移到postgres但是当我尝试在特定表中插入记录时,我违反了非空约束错误: ERROR: null value in column "id" violates not-null constraint DETAIL: Failing row contains (null,1,null,2016-03-09 09:24:12.841891,2012-12-31
我只是将我的应用程序从 mysql迁移到postgres但是当我尝试在特定表中插入记录时,我违反了非空约束错误:

ERROR:  null value in column "id" violates not-null constraint DETAIL: Failing row contains (null,1,null,2016-03-09 09:24:12.841891,2012-12-31 23:00:00,f,XYZAssignment,null).

********** Error **********

    ERROR: null value in column "id" violates not-null constraint
    SQL state: 23502
    Detail: Failing row contains (null,null).

当我尝试使用factory_girl创建记录时:

@assignment = FactoryGirl.create(:assignment)

它构建了这个sql查询:

INSERT INTO assignments(
            id,account_id,l_id,viewed_at,accepted_at,declined_at,expires_at,created_at,updated_at,decline_reason,decline_reason_text,promotion,c_checked_at,forwardable,type,f_promo,c_check_successful,c_check_api_result,c_check_human_result)
    VALUES (null,'2016-03-09 09:24:12.841891','2012-12-31 23:00:00','f','XYZAssignment',null);

这是作业工厂:

FactoryGirl.define do
  factory :assignment do
    expires_at 24.hours.from_now
    account
    lead
  end
end

这是表格说明:

CREATE TABLE assignments(
  id serial NOT NULL,account_id integer NOT NULL,l_id integer NOT NULL,viewed_at timestamp without time zone,accepted_at timestamp without time zone,declined_at timestamp without time zone,expires_at timestamp without time zone,created_at timestamp without time zone,updated_at timestamp without time zone,decline_reason character varying(16),decline_reason_text character varying(256),promotion boolean NOT NULL DEFAULT false,c_checked_at timestamp without time zone,forwardable boolean DEFAULT true,type character varying(64),f_promo boolean,c_check_successful boolean,c_check_api_result character varying(32),c_check_human_result character varying(32),CONSTRAINT assignments_pkey PRIMARY KEY (id)
) WITH (
  OIDS=FALSE
);

看起来它无法自动增加id,任何想法?

解决方法

您必须在INSERT操作中跳过id:

INSERT INTO assignments(account_id,...) 
VALUES
(1,...)

id将自动获取下一个序列号,因为它是一个自动增量字段.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读