From: | "Vilson farias" <vilson(dot)farias(at)digitro(dot)com(dot)br> |
---|---|
To: | <pgsql-general(at)postgresql(dot)org> |
Subject: | Fw: Referencial integrity when there are timestamp primary keys |
Date: | 2000-10-09 10:33:40 |
Message-ID: | 008a01c031dc$63f76e20$98a0a8c0@dti.digitro.com.br |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
----- Original Message -----
From: Vilson farias <vilson(dot)farias(at)digitro(dot)com(dot)br>
To: <pgsql-bugs(at)postgresql(dot)org>
Sent: Sexta-feira, 6 de Outubro de 2000 18:29
Subject: Referencial integrity when there are timestamp primary keys
I can only set a referencial integrity between these tables when there are
no data, even if there are no possible referential integrity violation.
It's strange, but this error only happens when I'm using a primary key
containing timestamp fields.
Please analyse the following case.
teste=# CREATE TABLE E_2 (
teste(# codigo2 integer NOT NULL,
teste(# dt_inicio datetime NOT NULL,
teste(# CONSTRAINT XPKE_2 PRIMARY KEY (codigo2, dt_inicio)
teste(#
teste(# );
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'xpke_2' for
table 'e_2'
CREATE
teste=# CREATE TABLE E_1 (
teste(# codigo1 integer NOT NULL,
teste(# dt_inicial datetime NOT NULL,
teste(# valor varchar(20),
teste(# CONSTRAINT XPKE_1 PRIMARY KEY (codigo1, dt_inicial)
teste(#
teste(# );
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'xpke_1' for
table 'e_1'
CREATE
teste=# CREATE TABLE E_3 (
teste(# codigo3 serial NOT NULL,
teste(# codigo1 integer,
teste(# dt_inicial datetime,
teste(# codigo2 integer,
teste(# dt_inicio datetime,
teste(# CONSTRAINT XPKE_3 PRIMARY KEY (codigo3)
teste(#
teste(# );
NOTICE: CREATE TABLE will create implicit sequence 'e_3_codigo3_seq' for
SERIAL column 'e_3.codigo3'
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'xpke_3' for
table 'e_3'
CREATE
teste=# insert into e_1 values (1, '2000-10-06 10:00:00', 'll');
INSERT 445181 1
teste=# insert into e_2 values (2, '2000-10-06 11:00:00');
INSERT 445182 1
teste=# insert into e_3 values (1,1,'2000-10-06 10:00:00',2,'2000-10-06
11:00:00');
INSERT 445183 1
teste=# ALTER TABLE E_3
teste-# ADD CONSTRAINT R_3 FOREIGN KEY (codigo2, dt_inicio)
teste-# REFERENCES E_2;
NOTICE: ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s) for
FOREIGN KEY check(s)
ERROR: <unnamed> referential integrity violation - key referenced from e_3
not found in e_2
teste=# ALTER TABLE E_3
teste-# ADD CONSTRAINT R_2 FOREIGN KEY (codigo1, dt_inicial)
teste-# REFERENCES E_1;
NOTICE: ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s) for
FOREIGN KEY check(s)
ERROR: <unnamed> referential integrity violation - key referenced from e_3
not found in e_1
teste=# delete from e_3;
DELETE 1
teste=# ALTER TABLE E_3
teste-# ADD CONSTRAINT R_2 FOREIGN KEY (codigo1, dt_inicial)
teste-# REFERENCES E_1;
NOTICE: ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s) for
FOREIGN KEY check(s)
CREATE
CREATE TABLE E_2 (
codigo2 integer NOT NULL,
dt_inicio datetime NOT NULL,
CONSTRAINT XPKE_2 PRIMARY KEY (codigo2, dt_inicio)
);
CREATE TABLE E_1 (
codigo1 integer NOT NULL,
dt_inicial datetime NOT NULL,
valor varchar(20),
CONSTRAINT XPKE_1 PRIMARY KEY (codigo1, dt_inicial)
);
CREATE TABLE E_3 (
codigo3 serial NOT NULL,
codigo1 integer,
dt_inicial datetime,
codigo2 integer,
dt_inicio datetime,
CONSTRAINT XPKE_3 PRIMARY KEY (codigo3)
);
ALTER TABLE E_3
ADD CONSTRAINT R_3 FOREIGN KEY (codigo2, dt_inicio)
REFERENCES E_2;
ALTER TABLE E_3
ADD CONSTRAINT R_2 FOREIGN KEY (codigo1, dt_inicial)
REFERENCES E_1;
Best regards,
José Vilson de Mello de Farias
Dígitro Tecnologia Ltda - Brazil
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Mount | 2000-10-09 11:34:44 | Re: OIDs and JDBC |
Previous Message | andrew | 2000-10-09 10:08:31 | Making changes visible to other connections |