As mentioned before I'm running on CentOS with PostgreSQL 8.1, I have compiled the latest DBMail from the SVN 2.2 branch. I'm trying to run dbmail-util -py to clean out some purged messages and I'm getting the following:

dbmail-util -py
Deleting messages with DELETE status...
Debug db.c,db_deleted_purge: executing query [SELECT message_idnr FROM dbmail_messages WHERE status=3] Debug module pgsql file dbpgsql.c func db_query line 281: [SELECT message_idnr FROM dbmail_messages WHERE status=3] Debug module pgsql file dbpgsql.c func db_query line 281: [SELECT physmessage_id FROM dbmail_messages WHERE message_idnr = 2375020] Debug module pgsql file dbpgsql.c func db_query line 281: [DELETE FROM dbmail_messages WHERE message_idnr = 2375020] Debug module pgsql file dbpgsql.c func db_query line 281: [SELECT message_idnr FROM dbmail_messages WHERE physmessage_id = 1425398] Warning module pgsql file dbpgsql.c func db_get_result line 234: result set is NULL Debug module pgsql file dbpgsql.c func db_query line 281: [SELECT physmessage_id FROM dbmail_messages WHERE message_idnr = 0] Debug module pgsql file dbpgsql.c func db_query line 281: [DELETE FROM dbmail_messages WHERE message_idnr = 0] Debug module pgsql file dbpgsql.c func db_query line 281: [SELECT message_idnr FROM dbmail_messages WHERE physmessage_id = 0] Debug module pgsql file dbpgsql.c func db_query line 281: [DELETE FROM dbmail_physmessage WHERE id = 0] Debug module pgsql file dbpgsql.c func db_query line 281: [DELETE FROM dbmail_messageblks WHERE physmessage_id = 0] Warning module pgsql file dbpgsql.c func db_get_result line 239: row = 2 or field = 0 out of range Debug module pgsql file dbpgsql.c func db_query line 281: [SELECT physmessage_id FROM dbmail_messages WHERE message_idnr = 0] Debug module pgsql file dbpgsql.c func db_query line 281: [DELETE FROM dbmail_messages WHERE message_idnr = 0] Debug module pgsql file dbpgsql.c func db_query line 281: [SELECT message_idnr FROM dbmail_messages WHERE physmessage_id = 0] Debug module pgsql file dbpgsql.c func db_query line 281: [DELETE FROM dbmail_physmessage WHERE id = 0] Debug module pgsql file dbpgsql.c func db_query line 281: [DELETE FROM dbmail_messageblks WHERE physmessage_id = 0] Warning module pgsql file dbpgsql.c func db_get_result line 239: row = 3 or field = 0 out of range
[ snip ]

This pattern continues for another ~ 5000 messages. It appears only the first message actually gets purged since when I repeat this process it reports only one less message to purge. It appears that this block of code is the problem:

       /* delete each message */
       for (i = 0; i < *affected_rows; i++) {
               message_id = db_get_result_u64(i, 0);
               if (db_delete_message(message_id) == -1) {
                       trace(TRACE_ERROR, "%s,%s: error deleting message",
                             __FILE__, __func__);
                       db_free_result();
                       return DM_EQUERY;
               }
       }

The symptom is that after the first loop, db_get_result_u64 is returning 0 for a message_id, however, I'm not able to diagnose why.

Any words of advice?

Thanks,

Matt

Reply via email to