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