Thread: Constraint Problem

Constraint Problem

From
Chairudin Sentosa Harjo
Date:
Dear Friends,

I have a very wierd problem. It should be obvious, but I can't
understand why.

I am using Postgresql 6.5.2, SuSe 6.2, Pentium III, Kernel Linux 2.2.10.

Please notice the error, it keeps saying ck_ngetest_disc_pin,
ck_ngetest_disc_country
is the cause of the problem.
I have inserted the correct value, but why keep giving error???

The wierdest part is, when I insert a value to field "disc_all", the
error mentioned
"ck_ngetest_disc_pin" !!!.... If the constraint was violated, the error
message
should be "ck_ngetest_disc_all".


create table ngetest (  custnum              int8 NOT NULL,  first_name           varchar(15) NOT NULL,  service_type
     char NOT NULL,  sex                  char NOT NULL,  detailed_bill        char NOT NULL,  ngetest_status
charNOT NULL,  disc_all             char,  disc_country         char,  disc_pin             char,
 
  constraint pk_ngetest PRIMARY KEY (custnum),
  constraint ck_ngetest_service_type check    (service_type = 'Y' or     service_type = 'N' or     service_type = 'G'
or    service_type = 'M' or     service_type = 'O' or     service_type = 'D'),
 
  constraint ck_ngetest_status check    (ngetest_status = 'A' or     ngetest_status = 'I' or     ngetest_status = 'S'
or    ngetest_status = 'T'),
 
  constraint ck_ngetest_disc_all check    (disc_all = 'Y' or     disc_all = 'N'),  constraint ck_ngetest_disc_country
check   (disc_country = 'Y' or     disc_country = 'N'),  constraint ck_ngetest_disc_pin check    (disc_pin = 'Y' or
disc_pin= 'N') );
 

insert into ngetest
(custnum, first_name, service_type, sex, detailed_bill, ngetest_status,
disc_all)
values
(1,'Bob','Y','M','Y','A','Y');
ERROR:  ExecAppend: rejected due to CHECK constraint ck_ngetest_disc_pin

insert into ngetest
(custnum, first_name, service_type, sex, detailed_bill, ngetest_status,
disc_country)
values
(2,'Mike','Y','M','Y','A','Y');
ERROR:  ExecAppend: rejected due to CHECK constraint ck_ngetest_disc_pin

insert into ngetest
(custnum, first_name, service_type, sex, detailed_bill, ngetest_status,
disc_pin)
values
(3,'John','Y','M','Y','A','Y');
ERROR:  ExecAppend: rejected due to CHECK constraint
ck_ngetest_disc_country


Regards,
Chairudin Sentosa

************


Re: Constraint Problem

From
"Claudio Tassi"
Date:
Chairudin Sentosa Harjo <chai@prima.net.id> wrote in message
news:37F319C6.FA5B5536@prima.net.id...
> Dear Friends,
>
> I have a very wierd problem. It should be obvious, but I can't
> understand why.
>
> I am using Postgresql 6.5.2, SuSe 6.2, Pentium III, Kernel Linux 2.2.10.
>
> Please notice the error, it keeps saying ck_ngetest_disc_pin,
> ck_ngetest_disc_country
> is the cause of the problem.
> I have inserted the correct value, but why keep giving error???
>
> The wierdest part is, when I insert a value to field "disc_all", the
> error mentioned
> "ck_ngetest_disc_pin" !!!.... If the constraint was violated, the error
> message
> should be "ck_ngetest_disc_all".
>
>
> create table ngetest
>   (
>    custnum              int8 NOT NULL,
>    first_name           varchar(15) NOT NULL,
>    service_type         char NOT NULL,
>    sex                  char NOT NULL,
>    detailed_bill        char NOT NULL,
>    ngetest_status       char NOT NULL,
>    disc_all             char,
>    disc_country         char,
>    disc_pin             char,
>
>    constraint pk_ngetest PRIMARY KEY (custnum),
>
>    constraint ck_ngetest_service_type check
>      (service_type = 'Y' or
>       service_type = 'N' or
>       service_type = 'G' or
>       service_type = 'M' or
>       service_type = 'O' or
>       service_type = 'D'),
>
>    constraint ck_ngetest_status check
>      (ngetest_status = 'A' or
>       ngetest_status = 'I' or
>       ngetest_status = 'S' or
>       ngetest_status = 'T'),
>
>    constraint ck_ngetest_disc_all check
>      (disc_all = 'Y' or
>       disc_all = 'N'),
>    constraint ck_ngetest_disc_country check
>      (disc_country = 'Y' or
>       disc_country = 'N'),
>    constraint ck_ngetest_disc_pin check
>      (disc_pin = 'Y' or
>       disc_pin = 'N')
>   );
>
> insert into ngetest
> (custnum, first_name, service_type, sex, detailed_bill, ngetest_status,
> disc_all)
> values


> (1,'Bob','Y','M','Y','A','Y');
> ERROR:  ExecAppend: rejected due to CHECK constraint ck_ngetest_disc_pin

disc_pin is null in this statement and constraint ck_ngetest_disc_pin says
that it can' t be null

Bye

Claudio