Обсуждение: Referencial integrity when there are timestamp primary keys

Поиск
Список
Период
Сортировка

Referencial integrity when there are timestamp primary keys

От
"Vilson farias"
Дата:
I found a irregular behavior with constraints.

I can only set a referencial integrity between these tables when there are
no data, even if there are no change to referential integrity violation.

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

Re: Referencial integrity when there are timestamp primary keys

От
Stephan Szabo
Дата:
This is a stupid garden variety bug and I'm not sure why I didn't catch
it previously.  The patch included is against fairly current sources, but
it may apply cleanly against 7.0.2 as well.

On Fri, 6 Oct 2000, Vilson farias wrote:

> I found a irregular behavior with constraints.
>
> I can only set a referencial integrity between these tables when there are
> no data, even if there are no change to referential integrity violation.

Re: Referencial integrity when there are timestamp primary keys

От
Bruce Momjian
Дата:
Applied.  Thanks.

>
> This is a stupid garden variety bug and I'm not sure why I didn't catch
> it previously.  The patch included is against fairly current sources, but
> it may apply cleanly against 7.0.2 as well.
>
> On Fri, 6 Oct 2000, Vilson farias wrote:
>
> > I found a irregular behavior with constraints.
> >
> > I can only set a referencial integrity between these tables when there are
> > no data, even if there are no change to referential integrity violation.
Content-Description:

[ Attachment, skipping... ]


--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026