Postgresql

ON CONFLICT ON CONSTRAINT 失敗 postgresql

  • April 16, 2019
INSERT INTO O_USER (ID, NAME, LASTNAME, EMAIL, USERNAME, PASSWD, DATE_REG, DATE_UPD, DATE_DEL, IS_DELETE, TIPO, FTP) 
VALUES (%s,%s,%s,%s,%s,%s,DEFAULT,NULL,NULL,%s,%s,%s) 
ON CONFLICT ON CONSTRAINT ux DO NOTHING;

使用者體驗約束:

CREATE UNIQUE INDEX ux ON public.o_user USING btree (email,username);

但在多次插入中有這個錯誤:

psycopg2.IntegrityError: duplicate key value violates unique constraint "o_user_username_key"
DETAIL:  Key (username)=(jferraro) already exists.

問題是什麼?

更新添加表資訊:

CREATE TABLE O_USER (
   ID          INTEGER         PRIMARY KEY,
   NAME        VARCHAR(30)     NOT NULL,
   LASTNAME    VARCHAR(30)     NOT NULL,
   EMAIL       VARCHAR(50)     NOT NULL UNIQUE,
   USERNAME    VARCHAR(30)     NOT NULL UNIQUE,
   PASSWD      VARCHAR(30)     NOT NULL,
   DATE_REG    DATE            DEFAULT NOW(),
   DATE_UPD    DATE,
   DATE_DEL    DATE,
   IS_DELETE   NUMERIC         NOT NULL,
   TIPO        VARCHAR(10)     NOT NULL,
   FTP         VARCHAR(30)     NOT NULL,
   CONSTRAINT  DEL             CHECK       (IS_DELETE IN ('0','1')),
   CONSTRAINT  FK_FTP          FOREIGN KEY (FTP) REFERENCES FTP_USERS(FTP_USER),
   CONSTRAINT  UX              UNIQUE      (EMAIL,USERNAME),
   CONSTRAINT  TYP             CHECK       (TIPO IN ('ADMIN','STANDARD'))
);

更新解決了問題:問題是我聲明了兩種不同的模式來製作唯一的電子郵件和使用者名,為了解決這個問題,我刪除了 collums 附近的唯一併且只對電子郵件和使用者名使用唯一約束“UX”。感謝大家的支持。

這:

EMAIL       VARCHAR(50)     NOT NULL UNIQUE,
USERNAME    VARCHAR(30)     NOT NULL UNIQUE,

除了您的其他約束之外,還使兩者都EMAIL獨一無二。USERNAME如果只有EMAIL和的組合USERNAME是唯一的,UNIQUE請從列定義中刪除。

引用自:https://dba.stackexchange.com/questions/234824