详细:Failing row contains (null, xxx,xx..)

大意是 你将id字段设置了不允许为空
但在插入数据时id 却是空 因为没有自增

以下是我的创建表sql 没有创建id序列 类似 mysql的 AUTO INCREMENT
CREATE TABLE "public"."ship_faults" (
   "id" int4 NOT NULL,
      "is_ack" bool DEFAULT false,
        CONSTRAINT "ship_faults_pkey" PRIMARY KEY ("id"),
        CONSTRAINT "ship_faults_tag_key" UNIQUE ("tag")
)

解决:

SELECT setval('ship_fault_alarm_log_id_seq', (SELECT MAX(id) FROM ship_fault_alarm_log));

-- 或者创建新的序列(如果序列不存在)
CREATE SEQUENCE ship_fault_alarm_log_id_seq;
ALTER TABLE ship_fault_alarm_log ALTER COLUMN id SET DEFAULT nextval('ship_fault_alarm_log_id_seq');
SELECT setval('ship_fault_alarm_log_id_seq', COALESCE((SELECT MAX(id) FROM ship_fault_alarm_log), 1), false);

也可以在创建表的时候 使用 SERIAL 自动创建序列


-- 使用 SERIAL 自动创建序列
CREATE TABLE "public"."ship_fault_alarm_log" (
    "id" SERIAL NOT NULL,  -- SERIAL 会自动创建并关联序列
    "description" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
    -- 其他字段...
    CONSTRAINT "ship_fault_alarm_log_pkey" PRIMARY KEY ("id")
);
最后修改:2026 年 01 月 07 日
如果觉得我的文章对你有用,请随意赞赏