Jon*_*rez 4 sql postgresql check-constraints pgadmin
我试图用postgresql在数据库中插入一些数据,但仍然显示相同的消息:
错误:关系“ empleados”的新行违反了检查约束“ ck_empleados_documento”详细信息:失败行包含(13,22222222,f,Lopez,Ana,Colon 123,1,2,casado,1990-10-10)。
我不知道错误在哪里或什么地方,也找不到解决此问题的方法。这是我尝试插入的内容:
insert into empleados (documento, sexo, apellido, nombre, domicilio, idSecc, cantidadhijos, estadocivil, fechaingreso) values('22222222','f','Lopez','Ana','Colon 123',1,2,'casado','1990-10-10');
Run Code Online (Sandbox Code Playgroud)
这是表的结构:
CREATE TABLE public.empleados
(
idempleado integer NOT NULL DEFAULT nextval('empleados_idempleado_seq'::regclass),
documento character(8),
sexo character(1),
apellido character varying(20),
nombre character varying(20),
domicilio character varying(30),
idsecc smallint NOT NULL,
cantidadhijos smallint,
estadocivil character(10),
fechaingreso date,
CONSTRAINT pk_empleados PRIMARY KEY (idempleado),
CONSTRAINT fk_empleados_idsecc FOREIGN KEY (idsecc)
REFERENCES public.puestos (idpuesto) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE NO ACTION,
CONSTRAINT uq_empleados_documento UNIQUE (documento),
CONSTRAINT ck_empleados_documento CHECK (documento ~~ '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'::text),
CONSTRAINT ck_empleados_estadocivil CHECK (estadocivil = ANY (ARRAY['casado'::bpchar, 'divorciado'::bpchar, 'soltero'::bpchar, 'viudo'::bpchar])),
CONSTRAINT ck_empleados_hijos CHECK (cantidadhijos >= 0),
CONSTRAINT ck_empleados_sexo CHECK (sexo = ANY (ARRAY['f'::bpchar, 'm'::bpchar]))
)
Run Code Online (Sandbox Code Playgroud)
错误消息显示您所在的行violates check constraint "ck_empleados_documento"。
ck_empleados_documento 被定义为
CONSTRAINT ck_empleados_documento CHECK (documento ~~ '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'::text)
Run Code Online (Sandbox Code Playgroud)
根据https://www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-LIKE:
运算符
~~等于LIKE
所以你的约束真的意味着
documento LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'::text
Run Code Online (Sandbox Code Playgroud)
在同一页面上:
stringLIKEpattern
如果模式不包含百分号或下划线,则该模式仅表示字符串本身
您的模式不包含%或_,因此等效于
documento = '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Run Code Online (Sandbox Code Playgroud)
这永远是不正确的,因为documento只有8个字符长。
您可能想改为执行此操作:
documento SIMILAR TO '[0-9]{8}'
Run Code Online (Sandbox Code Playgroud)
SIMILAR TO使用SQL正则表达式并理解字符类,如[0-9]。
| 归档时间: |
|
| 查看次数: |
7152 次 |
| 最近记录: |