Index: res/res_config_pgsql.c =================================================================== --- res/res_config_pgsql.c (revision 408084) +++ res/res_config_pgsql.c (working copy) @@ -743,19 +743,23 @@ ast_str_set(&sql, 0, "UPDATE %s SET %s = '%s'", tablename, field->name, ast_str_buffer(escapebuf)); while ((field = field->next)) { - if (!find_column(table, field->name)) { + struct columns *column; + if (!(column = find_column(table, field->name))) { ast_log(LOG_NOTICE, "Attempted to update column '%s' in table '%s', but column does not exist!\n", field->name, tablename); continue; } - ESCAPE_STRING(escapebuf, field->value); - if (pgresult) { - ast_log(LOG_ERROR, "PostgreSQL RealTime: detected invalid input: '%s'\n", field->value); - release_table(table); - return -1; + if (ast_strlen_zero(field->value) && !column->notnull) { + ast_str_append(&sql, 0, ", %s = NULL", field->name); + } else { + ESCAPE_STRING(escapebuf, field->value); + if (pgresult) { + ast_log(LOG_ERROR, "PostgreSQL RealTime: detected invalid input: '%s'\n", field->value); + release_table(table); + return -1; + } + ast_str_append(&sql, 0, ", %s = '%s'", field->name, ast_str_buffer(escapebuf)); } - - ast_str_append(&sql, 0, ", %s = '%s'", field->name, ast_str_buffer(escapebuf)); } release_table(table);