Обсуждение: CASCADE PB

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

CASCADE PB

От
fred
Дата:
Hello,
I use postgreSQL 7.2.3 and I have trouble on deleting.
I would like to automaticly delete line in the 'coop' table when I dlete the
line in the 'fact' table but it is not ok.
Where is my mistake ?
This is my database:

create table coop (
id_coop serial not null,
nom_coop varchar(50) not null,
primary key(id_coop)
);

create table fact (
id_fact serial not null,
id_coop integer references coop(id_coop) on delete cascade,
date_fact timestamp not null,
montant_fact decimal(6,3),
primary key(id_fact)
);

Thank's for your support.

Re: CASCADE PB

От
Stephan Szabo
Дата:
On Wed, 27 Nov 2002, fred wrote:

> Hello,
> I use postgreSQL 7.2.3 and I have trouble on deleting.
> I would like to automaticly delete line in the 'coop' table when I dlete the
> line in the 'fact' table but it is not ok.
> Where is my mistake ?

On delete cascade goes the other direction.  What you've written says that
for any coop row that is deleted associated fact rows should be removed
not the other way around.  AFAICT your schema allows multiple fact rows
to reference a single coop row which means deleting the coop row will fail
unless this is the only fact row.

> This is my database:
>
> create table coop (
> id_coop serial not null,
> nom_coop varchar(50) not null,
> primary key(id_coop)
> );
>
> create table fact (
> id_fact serial not null,
> id_coop integer references coop(id_coop) on delete cascade,
> date_fact timestamp not null,
> montant_fact decimal(6,3),
> primary key(id_fact)
> );
>
> Thank's for your support.


Re: CASCADE PB

От
fred
Дата:
Ok,
Thank you for your quick answer,
I'm affraid I made a mistake on my mail.
I really wanted to automaticly delete line in the 'fact' table when I delete
a line in the 'fact' table.
But when I suppress a line in the 'coop' table I still have the related line
in the 'fact' table.
Do you think there is a mistake in my sql syntaxe ?

create table coop (
id_coop serial not null,
nom_coop varchar(50) not null,
primary key(id_coop)
);

create table fact (
id_fact serial not null,
id_coop integer references coop(id_coop) on delete cascade,
date_fact timestamp not null,
montant_fact decimal(6,3),
primary key(id_fact)
);


Thank's for your support.




On Wednesday 27 November 2002 17:36, Stephan Szabo wrote:
> On Wed, 27 Nov 2002, fred wrote:
> > Hello,
> > I use postgreSQL 7.2.3 and I have trouble on deleting.
> > I would like to automaticly delete line in the 'coop' table when I dlete
> > the line in the 'fact' table but it is not ok.
> > Where is my mistake ?
>
> On delete cascade goes the other direction.  What you've written says that
> for any coop row that is deleted associated fact rows should be removed
> not the other way around.  AFAICT your schema allows multiple fact rows
> to reference a single coop row which means deleting the coop row will fail
> unless this is the only fact row.
>
> > This is my database:
> >
> > create table coop (
> > id_coop serial not null,
> > nom_coop varchar(50) not null,
> > primary key(id_coop)
> > );
> >
> > create table fact (
> > id_fact serial not null,
> > id_coop integer references coop(id_coop) on delete cascade,
> > date_fact timestamp not null,
> > montant_fact decimal(6,3),
> > primary key(id_fact)
> > );
> >
> > Thank's for your support.
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

Re: CASCADE PB

От
Stephan Szabo
Дата:
On Wed, 27 Nov 2002, fred wrote:

> Ok,
> Thank you for your quick answer,
> I'm affraid I made a mistake on my mail.
> I really wanted to automaticly delete line in the 'fact' table when I delete
> a line in the 'fact' table.
> But when I suppress a line in the 'coop' table I still have the related line
> in the 'fact' table.
> Do you think there is a mistake in my sql syntaxe ?

Not really, and on my 7.3b2 system (should be pretty much the same as
7.2.3 for the integrity constraints, since the only change I remember
being made was pretty unrelated) a delete from coop deletes all the rows
from fact.

Can you give a complete example (including some inserts and deletes) so we
can try it?