为什么我不能在PostgreSQL中设置这个唯一约束?

为什么我不能在PostgreSQL中设置这个唯一约束?,第1张

概述我一直在: SQL error: ERROR: could not create unique index “service_import_checksum_key” DETAIL: Key (checksum)=() is duplicated. 声明: ALTER TABLE “public”.”service_import” ADD CONSTRAINT “service_import_ch 我一直在:

sql error: ERROR: Could not create
unique index
“service_import_checksum_key” DETAIL:
Key (checksum)=() is duplicated.

声明:

ALTER table “public”.”service_import” ADD CONSTRAINT “service_import_checksum_key” UNIQUE (“checksum”)

但这种约束并不重复.在整个数据库中没有任何其他类似的限制,我不知道为什么它一直坚持它是重复的.我假设这是我在这里缺少的一些奇怪的postgres细微差别.

我究竟做错了什么?

表转储:

---- Postgresql database dump--SET statement_timeout = 0;SET clIEnt_enCoding = 'UTF8';SET standard_conforming_strings = off;SET check_function_bodIEs = false;SET clIEnt_min_messages = warning;SET escape_string_warning = off;SET search_path = public,pg_catalog;SET default_tablespace = '';SET default_with_oIDs = false;---- name: service_import; Type: table; Schema: public; Owner: cvs_tar; tablespace: --CREATE table service_import (    ID integer NOT NulL,name character varying(32) NOT NulL,importfile character varying(64) NOT NulL,reportfile character varying(64) NOT NulL,percent smallint NOT NulL,message text NOT NulL,stamp timestamp without time zone DEFAulT Now() NOT NulL,complete smallint DEFAulT 0 NOT NulL,checksum character varying(40) NOT NulL);ALTER table public.service_import OWNER TO cvs_tar;---- name: service_imports_ID_seq; Type: SEQUENCE; Schema: public; Owner: cvs_tar--CREATE SEQUENCE service_imports_ID_seq    START WITH 1    INCREMENT BY 1    NO MINVALUE    NO MAXVALUE    CACHE 1;ALTER table public.service_imports_ID_seq OWNER TO cvs_tar;---- name: service_imports_ID_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: cvs_tar--ALTER SEQUENCE service_imports_ID_seq OWNED BY service_import.ID;---- name: ID; Type: DEFAulT; Schema: public; Owner: cvs_tar--ALTER table service_import ALTER ColUMN ID SET DEFAulT nextval('service_imports_ID_seq'::regclass);---- name: service_import_name_key; Type: CONSTRAINT; Schema: public; Owner: cvs_tar; tablespace: --ALTER table ONLY service_import    ADD CONSTRAINT service_import_name_key UNIQUE (name);---- name: service_import_pkey; Type: CONSTRAINT; Schema: public; Owner: cvs_tar; tablespace: --ALTER table ONLY service_import    ADD CONSTRAINT service_import_pkey PRIMARY KEY (ID);---- name: service_import_complete_IDx; Type: INDEX; Schema: public; Owner: cvs_tar; tablespace: --CREATE INDEX service_import_complete_IDx ON service_import USING btree (complete);---- name: service_import_stamp_IDx; Type: INDEX; Schema: public; Owner: cvs_tar; tablespace: --CREATE INDEX service_import_stamp_IDx ON service_import USING btree (stamp);---- Postgresql database dump complete--
再次阅读错误消息:

sql error: ERROR: Could not create unique index “service_import_checksum_key”
DETAIL: Key (checksum)=() is duplicated.

看起来它告诉您校验和列中存在重复值,并且您尝试使用约束强制该列的唯一性.约束不重复,数据有重复.

此外,“()”部分表示校验和列中有多个空字符串.唯一约束允许多个NulL值(因为NulL = NulL是NulL,这不是真的)但空字符串不是NulL.

澄清正在发生的事情的一个例子:

=> CREATE table x (s VARCHAR NulL);CREATE table=> INSERT INTO x (s) VALUES (''),('a'),('');INSERT 0 3=> ALTER table x ADD CONSTRAINT ux UNIQUE(s);NOTICE:  ALTER table / ADD UNIQUE will create implicit index "ux" for table "x"ERROR:  Could not create unique index "ux"DETAIL:  Key (s)=() is duplicated.=> delete from x where s='';DELETE 2=> INSERT INTO x (s) VALUES ('a');INSERT 0 1=> ALTER table x ADD CONSTRAINT ux UNIQUE(s);NOTICE:  ALTER table / ADD UNIQUE will create implicit index "ux" for table "x"ERROR:  Could not create unique index "ux"DETAIL:  Key (s)=(a) is duplicated.

特别要注意ERROR和DETAIL所说的内容,并将其与INSERT进行比较.

总结

以上是内存溢出为你收集整理的为什么我不能在PostgreSQL中设置这个唯一约束?全部内容,希望文章能够帮你解决为什么我不能在PostgreSQL中设置这个唯一约束?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1181729.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-02
下一篇2022-06-02

发表评论

登录后才能评论

评论列表(0条)

    保存