我无法在POSTGRES数据库中插入记录,我希望外键为空。
我的桌子:
CREATE TABLE sad_avaliado (
id BIGSERIAL NOT NULL,
tenant_id INT8 NOT NULL,
funcionario_id BIGSERIAL NOT NULL,
epoca_id BIGSERIAL NOT NULL,
cca_id BIGSERIAL,
avaliador_id BIGSERIAL NOT NULL,
apagado boolean NOT NULL,
PRIMARY KEY (id)
);
alter table sad_avaliado add constraint sad_funcionario_fkey foreign key (funcionario_id) references sad_funcionario;
alter table sad_avaliado add constraint sad_epoca_fkey foreign key (epoca_id) references sad_epoca;
alter table sad_avaliado add constraint sad_cca_fkey foreign key (cca_id) references sad_cca;
alter table sad_avaliado add constraint sad_avaliador_fkey foreign key (avaliador_id) references sad_avaliador;
我的SQL插入
INSERT INTO public.sad_avaliado(
id, tenant_id, funcionario_id, epoca_id, cca_id, avaliador_id, apagado)
VALUES (1, 1, 1, 1, null, 1, false);
我的错误:
ERROR: null value in column "cca_id" violates not-null constraint
答案 0 :(得分:0)
bigserial用于自动递增的id列,其默认值为“ not null”并创建一个序列。
并且您不应该在insert语句中指定ID,因为它是通过nextval()默认插入的。
查看此示例
test=# create table test01 ( id bigserial );
CREATE TABLE
test=# \d test01*
Table "public.test01"
Column | Type | Collation | Nullable | Default
--------+--------+-----------+----------+------------------------------------
id | bigint | | not null | nextval('test01_id_seq'::regclass)
Sequence "public.test01_id_seq"
Type | Start | Minimum | Maximum | Increment | Cycles? | Cache
--------+-------+---------+---------------------+-----------+---------+-------
bigint | 1 | 1 | 9223372036854775807 | 1 | no | 1
Owned by: public.test01.id
答案 1 :(得分:0)
BIGSERIAL
的外键引用应使用BIGINT
:
CREATE TABLE sad_avaliado (
id BIGSERIAL NOT NULL,
tenant_id INT8 NOT NULL,
funcionario_id BIGINT NOT NULL,
epoca_id BIGINT NOT NULL,
cca_id BIGINT,
avaliador_id BIGINT NOT NULL,
apagado boolean NOT NULL,
PRIMARY KEY (id)
);
我认为这是外键引用应该与主键具有相同类型的观念的一个例外。我的意思是,基础类型是相同的,但是BIGSERIAL
用于指定它是自动递增的(其他数据库使用单独的关键字,例如auto_increment
或{{ 1}})。