View Single Post

   
  #1 (permalink)  
Old 04-09-2008, 01:44 PM
Florian Weimer
 
Posts: n/a
Default Foreign keys, table inheritance, and TRUNCATE

Here's something I've just noticed:

CREATE TABLE foo (f INTEGER PRIMARY KEY);
INSERT INTO foo VALUES (1);
CREATE TABLE bar (b INTEGER REFERENCES foo);
CREATE TABLE bar1 () INHERITS (bar);
INSERT INTO bar1 VALUES (1);

This is quite correct:

TRUNCATE foo;
ERROR: cannot truncate a table referenced in a foreign key constraint
DETAIL: Table "bar" references "foo".
HINT: Truncate table "bar" at the same time, or use TRUNCATE ... CASCADE.

But:

TRUNCATE foo, bar;
SELECT * FROM bar;
b
---
1
(1 row)

SELECT * FROM foo;
f
---
(0 rows)

Whoops. The referential constraint has been violated. Perhaps it's a
good idea to extend TRUNCATE on a parent table to all children?

--
Florian Weimer <fweimer@bfk.de>
BFK edv-consulting GmbH http://www.bfk.de/
Kriegsstraße 100 tel: +49-721-96201-1
D-76133 Karlsruhe fax: +49-721-96201-99

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Reply With Quote