From: Kern S. <ke...@si...> - 2004-03-26 22:55:21
|
Hello, On Fri, 2004-03-26 at 13:23, Dan Langille wrote: > On Fri, 26 Mar 2004, Kern Sibbald wrote: > > > On Thu, 2004-03-25 at 23:27, Dan Langille wrote: > > > On Thu, 25 Mar 2004, Phil Stracchino wrote: > > > > > > > > Currently, Bacula never removes Filename entries nor Path entries since > > > > > the overhead of finding out if they are orphaned is too high. Long term, > > > > > this needs a solution. > > > > > > I may look at a solution for PostgreSQL. This should be a trivial thing > > > do to. In fact, it may already be implemented. > > > > I'll be interested in seeing the solution you find. > > My time until mid-May is pretty much absorbed by BSDCan. No problems. > > > > > Would adding a reference count to Filename and Path records be a viable > > > > way to handle the problem? Increment the reference count each time a > > > > File record uses it, decrement each time a File record referencing it is > > > > pruned. (For safety, the refcount would probably have to be a bigint.) > > > > Or would that add an unacceptable amount of overhead? > > > > > > Phil: That's a job for the database. That's what Foreign Keys and Primary > > > Keys for for. Yes, I know MySQL doesn't do that very well yet. But > > > PostgreSQL does it very well. It's in that option. > > > > Unfortunately, SQLite doesn't worry about it either, so despite the > > magic you work with PostgreSQL, I'll need to do something in dbcheck ... > > Does SQLite support nested queries? Quite likely, but MySQL does not, though I understand that they do exist in at least some version of 4.0. Many people such as myself are still using 3.xx. > > test=# create table a (id int); > CREATE TABLE > test=# create table b (id int); > CREATE TABLE > test=# insert into a values (1); > INSERT 26936 1 > test=# insert into a values (Segmentation fault (core dumped) > [dan@laptop:~] $ > [dan@laptop:~] $ rm psql.core > [dan@laptop:~] $ psql test > Welcome to psql 7.4.2, the PostgreSQL interactive terminal. > > Type: \copyright for distribution terms > \h for help with SQL commands > \? for help on internal slash commands > \g or terminate with semicolon to execute query > \q to quit > > create table a (id int); > create table b (id int); > insert into a values (1); > insert into a values (2); > insert into b values (2); > select * from a; > id > ---- > 1 > 2 > (2 rows) > > select * from b; > id > ---- > 2 > (1 row) > > select * from b where exists (select * from a where a.id = b.id); > id > ---- > 2 > (1 row) > > If that works, it makes your clean up much easier. |