Looks ok to me, but why write a special script? You can do:

CREATE TABLE tmp (id bigint(21) not null primary key);
INSERT INTO tmp (id) SELECT id FROM dbmail_physmessage p
        LEFT JOIN dbmail_messages m ON p.id = m.physmessage_id
        WHERE m.physmessage_id IS NULL);
DELETE FROM dbmail_physmessage WHERE id IN (SELECT id FROM tmp);
DROP TABLE tmp;

This will delete all physmessages that do not have a message associated
with them, taking with them all related messageblks if you have the
constraints setup correctly.



Niblett, David A wrote:
> So before I do something monumentally stupid.  Paul can you
> tell me if this is correct for finding my unconnected physmessages.
> 
>   SELECT dbmail_physmessage.id, dbmail_messages.physmessage_id
>   FROM dbmail_physmessage
>   LEFT JOIN dbmail_messages
>   ON dbmail_physmessage.id = dbmail_messages.physmessage_id
>   WHERE dbmail_messages.physmessage_id IS NULL
> 
> My plan is to dump the ID's to a file and then use a simple program
> to work through them and delete them.
> 
> If my calculations are correct I have about 600k messages that are
> not attached to a mailbox any more.  That's about 1/3 of my Email
> store and over a year of time.
> 
> Thanks.
> 
> --
> David A. Niblett               | email: [EMAIL PROTECTED]
> Network Administrator          | Phone: (352) 334-3400
> Gainesville Regional Utilities | Web: http://www.gru.net/
>  
> 
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
> Behalf Of Paul J Stevens
> Sent: Tuesday, July 11, 2006 3:37 AM
> To: DBMail mailinglist
> Subject: Re: [Dbmail] Delete accounts
> 
> 
> 
> 
> Niblett, David A wrote:
>> Sorry, I didn't remember, that I did create a foreign key constraint 
>> on a new column in dbmail_aliases connecting it back to user_idnr.
>>
>> By adding that column, I was able to retain complete functionality. 
>> Now I admit that my internal requirement is that you can't have an 
>> dbmail_alias entry if you don't have a dbmail_users entry. I made a 
>> placeholder user and tie all my standalone aliases to it.  I suppose I
> 
>> could have used user_idnr #1 (the internal user), but that doesn't 
>> seem like a good idea.
>>
>> As for the messages, I think that is also removed (this is v2.0.10).
>>
>> CREATE TABLE dbmail_messages (
>> ...
>>    mailbox_idnr INT8 REFERENCES dbmail_mailboxes(mailbox_idnr)
>>         ON DELETE CASCADE,
>>    physmessage_id INT8 REFERENCES dbmail_physmessage(id)
>>         ON DELETE CASCADE,
>> ...
> 
> David,
> 
> You're reading this the wrong way. The statement above says that if you
> delete a physmessage all associated messages are deleted. Deleting
> messages does *not* affect related physmessages.
> 
>>
>> Since the dbmail_messages keys to the dbmail_mailboxes, and to 
>> dbmail_physmessages (same with dbmail_messageblks), I believe that it 
>> will cascade all the way down.
> 
> No it doesn't. And that's a known bug (#305).
> 
>> When I delete a user, I never see any orphaned blocks when I run 
>> dbmail-util.
> 
> Because it turns out dbmail-util does not check for them properly;
> contrary to my earlier statement.
> 

-- 
  ________________________________________________________________
  Paul Stevens                                      paul at nfg.nl
  NET FACILITIES GROUP                     GPG/PGP: 1024D/11F8CD31
  The Netherlands________________________________http://www.nfg.nl

Reply via email to