错误:“id”列中的空值违反非空约束
问题:错误:“id”列中的空值违反非空约束 我刚刚将我的应用程序从mysql迁移到postgres但是当我尝试在特定表中插入记录时出现violates not-null constraint错误: ERROR: null value in column "id" violates not-null constraint DETAIL: Failing row contains (null, 1,
·
问题:错误:“id”列中的空值违反非空约束
我刚刚将我的应用程序从mysql
迁移到postgres
但是当我尝试在特定表中插入记录时出现violates not-null constraint
错误:
ERROR: null value in column "id" violates not-null constraint DETAIL: Failing row contains (null, 1, 1, null, null, null, 2016-03-09 09:24:12.841891, 2012-12-31 23:00:00, 2012-12-31 23:00:00, null, null, f, null, f, XYZAssignment, null, null, null, null).
********** Error **********
ERROR: null value in column "id" violates not-null constraint
SQL state: 23502
Detail: Failing row contains (null, 1, 1, null, null, null, 2016-03-09 09:24:12.841891, 2012-12-31 23:00:00, 2012-12-31 23:00:00, null, null, f, null, f, XYZAssignment, null, null, 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, 1, 1, null, null, null, '2016-03-09 09:24:12.841891', '2012-12-31 23:00:00', '2012-12-31 23:00:00', null, null, 'f', null, 'f', 'XYZAssignment', null, null, null, 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, l_id, ...)
VALUES
(1, 1, ...)
id
会自动获取下一个序列号,因为它是一个自增字段。
更多推荐
已为社区贡献19912条内容
所有评论(0)