Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

duplicate key value violates unique constraint when trying to insert

I’m using drizzle-orm to work on my postgresql database…

I have this simple table:

export const ExperimentData = pgTable('experiment_data', {
  id: bigserial('id', { mode: 'number' }).primaryKey(),
  timestamp: bigint('timestamp', { mode: 'number' }),
  websiteId: bigint('website_id', { mode: 'number' }),
  experimentId: bigint('experiment_id', { mode: 'number' }),
  variantId: bigint('variant_id', { mode: 'number' }),
  event: varchar('event', { mode: 'string', length: 255 }),
  data: json('data'),
});

and i have a script that reads data from redis and writes to this table:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

await statisticsdb.insert(ExperimentData).values({ timestamp, websiteId, experimentId, variantId, event, data });

this script runs is supposed to run every hour, triggered by a cronjob and now it doesn’t run because i get the error

PostgresError: duplicate key value violates unique constraint "experiment_data_pkey"
 code: "23505"

      at ErrorResponse (/home/ubuntu/production/pertento/node_modules/postgres/src/connection.js:792:23)
      at handle (/home/ubuntu/production/pertento/node_modules/postgres/src/connection.js:811:5)
      at data (/home/ubuntu/production/pertento/node_modules/postgres/src/connection.js:562:3)
      at emit (native:1:1)
      at addChunk (native:1:1)
      at readableAddChunk (native:1:1)
      at data (native:1:1)

this error is caused on the first insertion try.

  • I haven’t done anything, haven’t changed the schema or the data in the database
  • as you can see, the only primary key i have in the table is the id field
  • am not trying to force the id

I don’t know exactly what to do here, this is kind of urgent as our company’s analytics depends on this.
Also, don’t want to mess up the data in Postgres nor in Redis.

Any help would be much appreciated. Thank you

UPDATE:
after running

select * from public.experiment_data_id_seq;

I get the value: 253020

looking to the database, the latest ID is 1171578 which is waaaay off.

How can I fix this?
Can I just update this value in the database directly?

>Solution :

  1. Find who or what changed the sequence and make sure they/it are prevented from doing that again.

  2. Pick a number that is max(id) + 100 or so and do:

BEGIN;

ALTER SEQUENCE  public.experiment_data_id_seq RESTART <above_number>;

ROLLBACK or COMMIT above depending on success or failure.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading