Yesterday I copied data from the old production server to the new production server. One thing I missed, but did think about at the time, was updating the sequence used by the table in question. Looking at the table definition:
freshports.org=# \d report_log Table "public.report_log" Column | Type | Collation | Nullable | Default --------------+--------------------------+-----------+----------+-------------------------------------------- id | integer | | not null | nextval('report_log_id_seq'::regclass) report_id | integer | | not null | frequency_id | integer | | | report_date | timestamp with time zone | | not null | ('now'::text)::timestamp(6) with time zone email_count | integer | | not null | commit_count | integer | | not null | port_count | integer | | not null | Indexes: "report_log_pkey" PRIMARY KEY, btree (id) Foreign-key constraints: "$1" FOREIGN KEY (frequency_id) REFERENCES report_frequency(id) ON UPDATE CASCADE ON DELETE CASCADE "$2" FOREIGN KEY (report_id) REFERENCES reports(id) ON UPDATE CASCADE ON DELETE CASCADE freshports.org=#
The report_log_id_seq value will be wrong. When the reports run, they will use values for id which are already present in the table. To confirm, I ran this test:
freshports.org=# BEGIN; BEGIN freshports.org=# INSERT INTO report_log (report_id, frequency_id, email_count, commit_count, port_count) VALUES (2, 4, 0, 0, 0); ERROR: duplicate key value violates unique constraint "report_log_pkey" DETAIL: Key (id)=(19074) already exists. freshports.org=# ROLLBACK; ROLLBACK freshports.org=# SELECT max(id) FROM report_log; max ------- 20144 (1 row) freshports.org=#
Historically, I have done this with setval but today I will try ALTER SEQUENCE.
freshports.org=# BEGIN; ALTER SEQUENCE report_log_id_seq RESTART WITH 20145; BEGIN ALTER SEQUENCE freshports.org=# INSERT INTO report_log (report_id, frequency_id, email_count, commit_count, port_count) VALUES (2, 4, 0, 0, 0); INSERT 0 1 freshports.org=# ROLLBACK; ROLLBACK
That worked, so I rolled it back and this time I’ll save the changes without inserting data;
freshports.org=# BEGIN; ALTER SEQUENCE report_log_id_seq RESTART WITH 20145; BEGIN ALTER SEQUENCE freshports.org=# COMMIT; COMMIT freshports.org=#
I remembered this issue while sorting out a configuration & code error this morning.