Re: [BUGS] BUG #6184: Inconsistencies in log messages

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: [BUGS] BUG #6184: Inconsistencies in log messages
Дата
Msg-id 20120815214542.GQ25473@momjian.us
обсуждение исходный текст
Ответы Re: [BUGS] BUG #6184: Inconsistencies in log messages
Список pgsql-hackers
[ moved to hackers]

Would someone review this report for me?  I think there are few
reasonable changes in here, but I am not familiar enough with all the
code areas.

---------------------------------------------------------------------------

On Tue, Aug 30, 2011 at 07:15:19AM +0000, Ding Yuan wrote:
> 
> The following bug has been logged online:
> 
> Bug reference:      6184
> Logged by:          Ding Yuan
> Email address:      ding.yuan.90@hotmail.com
> PostgreSQL version: 8.4.8
> Operating system:   All
> Description:        Inconsistencies in log messages
> Details: 
> 
> Hi Postgres developers,
> (I reported this a day ago and for some reason did not see my message appear
> in the archive, so I am resending it again and I apologize if it seems
> duplicated). 
> 
> I am a student doing research on improving software's diagnosability by
> improving the error messages. Recently I run a static checker on
> postgres-8.4.8 and found that some inconsistencies in log messages in
> similar situations. While we suspect some of them should be fixed, we are
> not 100% sure since we do not have domain expertise in Squid code. 
> 
> I am reporting 10 such cases in this report. We truly appreciate your
> feedback on whether our findings make sense.
> 
> Thanks,
> Ding
> 
> ================== Report 1 ========================
> The two elog messages are of similar situations but with different verbosity
> levels.
> Pattern: 7478
> ---------------- src/backend/executor/nodeResult.c ---------------------
> @@ line: 171 @@
> 171:    void
> 172:    ExecResultMarkPos(ResultState *node)
> 173:    {
> 174:            PlanState  *outerPlan = outerPlanState(node);
> 175:
> 176:            if (outerPlan != NULL)
> 177:                    ExecMarkPos(outerPlan);
> 178:            else
> 179:                    elog(DEBUG2, "Result nodes do not support
> mark/restore");
> ---------------- src/backend/executor/nodeResult.c ---------------------
> @@ line: 186 @@
> 186:    void
> 187:    ExecResultRestrPos(ResultState *node)
> 188:    {
> 189:            PlanState  *outerPlan = outerPlanState(node);
> 190:
> 191:            if (outerPlan != NULL)
> 192:                    ExecRestrPos(outerPlan);
> 193:            else
> 194:                    elog(ERROR, "Result nodes do not support
> mark/restore");
> 
> 
> 
> ======================== Report 2
> ==========================================
> The verbosity level for error return for CreateEvent is not consistent!
> Pattern: 6490
> ---------------- src/backend/port/win32/socket.c ---------------------
> @@ line: 128 @@
> 128:                    waitevent = CreateEvent(NULL, TRUE, FALSE, NULL);
> 129:
> 130:                    if (waitevent == INVALID_HANDLE_VALUE)
> 131:                            ereport(ERROR,
> 132:                                            (errmsg_internal("Failed to
> create socket waiting event: %i", (int) GetLastError())));
> ---------------- src/backend/port/win32/signal.c ---------------------
> @@ line: 83 @@
> 83:             pgwin32_signal_event = CreateEvent(NULL, TRUE, FALSE,
> NULL);
> 84:             if (pgwin32_signal_event == NULL)
> 85:                     ereport(FATAL,
> 86:                                     (errmsg_internal("failed to create
> signal event: %d", (int) GetLastError())));
> 
> 
> ======================== Report 3
> ==========================================
> The log message in the first snippet (line 3487) has ERROR level, while
> PANIC
> is logged in other similar situations.
> Pattern: 4207
> ---------------- src/backend/access/heap/heapam.c ---------------------
> @@ line: 3483 @@
> 3483:           if (PageGetMaxOffsetNumber(page) >= offnum)
> 3484:                   lp = PageGetItemId(page, offnum);
> 3485:
> 3486:           if (PageGetMaxOffsetNumber(page) < offnum ||
> !ItemIdIsNormal(lp))
> 3487:                   elog(ERROR, "heap_inplace_update: invalid lp");
> 3488:
> 3489:           htup = (HeapTupleHeader) PageGetItem(page, lp);
> 3490:
> 3491:           oldlen = ItemIdGetLength(lp) - htup->t_hoff;
> ---------------- src/backend/access/heap/heapam.c ---------------------
> @@ line: 4732 @@
> 4732:           if (PageGetMaxOffsetNumber(page) >= offnum)
> 4733:                   lp = PageGetItemId(page, offnum);
> 4734:
> 4735:           if (PageGetMaxOffsetNumber(page) < offnum ||
> !ItemIdIsNormal(lp))
> 4736:                   elog(PANIC, "heap_inplace_redo: invalid lp");
> 4737:
> 4738:           htup = (HeapTupleHeader) PageGetItem(page, lp);
> 4739:
> 4740:           oldlen = ItemIdGetLength(lp) - htup->t_hoff;
> ---------------- src/backend/access/heap/heapam.c ---------------------
> @@ line: 4268 @@
> 4268:           if (PageGetMaxOffsetNumber(page) >= offnum)
> 4269:                   lp = PageGetItemId(page, offnum);
> 4270:
> 4271:           if (PageGetMaxOffsetNumber(page) < offnum ||
> !ItemIdIsNormal(lp))
> 4272:                   elog(PANIC, "heap_delete_redo: invalid lp");
> 4273:
> 4274:           htup = (HeapTupleHeader) PageGetItem(page, lp);
> ---------------- src/backend/access/heap/heapam.c ---------------------
> @@ line: 4469 @@
> 4469:           if (PageGetMaxOffsetNumber(page) >= offnum)
> 4470:                   lp = PageGetItemId(page, offnum);
> 4471:
> 4472:           if (PageGetMaxOffsetNumber(page) < offnum ||
> !ItemIdIsNormal(lp))
> 4473:                   elog(PANIC, "heap_update_redo: invalid lp");
> 4474:
> 4475:           htup = (HeapTupleHeader) PageGetItem(page, lp);
> ---------------- src/backend/access/heap/heapam.c ---------------------
> @@ line: 4673 @@
> 4673:           if (PageGetMaxOffsetNumber(page) >= offnum)
> 4674:                   lp = PageGetItemId(page, offnum);
> 4675:
> 4676:           if (PageGetMaxOffsetNumber(page) < offnum ||
> !ItemIdIsNormal(lp))
> 4677:                   elog(PANIC, "heap_lock_redo: invalid lp");
> 4678:
> 4679:           htup = (HeapTupleHeader) PageGetItem(page, lp);
> 
> 
> ======================== Report 4
> ==========================================
> There is no error message in the 2nd snippet, when:
> 3089:           if (!SplitIdentifierString(rawname, ',', &namelist))
> occurred, while there is one at line 62 under similar situations.
> Pattern: 4440
> ---------------- src/backend/commands/variable.c ---------------------
> @@ line: 46 @@
> 46:             char       *rawstring;
> 47:             char       *result;
> 48:             List       *elemlist;
> 49:             ListCell   *l;
> 50:
> 51:             /* Need a modifiable copy of string */
> 52:             rawstring = pstrdup(value);
> 53:
> 54:             /* Parse string into list of identifiers */
> 55:             if (!SplitIdentifierString(rawstring, ',', &elemlist))
> 56:             {
> 57:                     /* syntax error in list */
> 58:                     pfree(rawstring);
> 59:                     list_free(elemlist);
> 60:                     ereport(GUC_complaint_elevel(source),
> 61:                                    
> (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
> 62:                                      errmsg("invalid list syntax for
> parameter \"datestyle\"")));
> 63:                     return NULL;
> 64:             }
> 65:
> 66:             foreach(l, elemlist)
> ---------------- src/backend/catalog/namespace.c ---------------------
> @@ line: 3081 @@
> 3081:           char       *rawname;
> 3082:           List       *namelist;
> 3083:           ListCell   *l;
> 3084:
> 3085:           /* Need a modifiable copy of string */
> 3086:           rawname = pstrdup(newval);
> 3087:
> 3088:           /* Parse string into list of identifiers */
> 3089:           if (!SplitIdentifierString(rawname, ',', &namelist))
> 3090:           {
> 3091:                   /* syntax error in name list */
> 3092:                   pfree(rawname);
> 3093:                   list_free(namelist);
> 3094:                   return NULL;
> 3095:           }
> 3096:
> 3097:           /*
> 3098:            * If we aren't inside a transaction, we cannot do database
> access so
> 3099:            * cannot verify the individual names.  Must accept the list
> on faith.
> 3100:            */
> 3101:           if (source >= PGC_S_INTERACTIVE && IsTransactionState())
> 3102:           {
> 3103:                   /*
> 3104:                    * Verify that all the names are either valid
> namespace names or
> 3105:                    * "$user" or "pg_temp".  We do not require $user to
> correspond to a
> 3106:                    * valid namespace, and pg_temp might not exist yet.
>  We do not check
> 3107:                    * for USAGE rights, either; should we?
> 3108:                    *
> 3109:                    * When source == PGC_S_TEST, we are checking the
> argument of an ALTER
> 3110:                    * DATABASE SET or ALTER USER SET command.      It
> could be that the
> 3111:                    * intended use of the search path is for some other
> database, so we
> 3112:                    * should not error out if it mentions schemas not
> present in the
> 3113:                    * current database.  We reduce the message to
> NOTICE instead.
> 3114:                    */
> 3115:                   foreach(l, namelist)
> 
> 
> ======================== Report 5
> ==========================================
> The first log message at line 2221 is of ERROR level, while the other log
> messages in similar situations are FATAL!
> Pattern: 3948
> ---------------- src/backend/access/transam/xact.c ---------------------
> @@ line: 2210 @@
> 2210:                   case TBLOCK_BEGIN:
> 2211:                   case TBLOCK_SUBBEGIN:
> 2212:                   case TBLOCK_END:
> 2213:                   case TBLOCK_SUBEND:
> 2214:                   case TBLOCK_ABORT_END:
> 2215:                   case TBLOCK_SUBABORT_END:
> 2216:                   case TBLOCK_ABORT_PENDING:
> 2217:                   case TBLOCK_SUBABORT_PENDING:
> 2218:                   case TBLOCK_SUBRESTART:
> 2219:                   case TBLOCK_SUBABORT_RESTART:
> 2220:                   case TBLOCK_PREPARE:
> 2221:                           elog(ERROR, "StartTransactionCommand:
> unexpected state %s",
> 2222:                                   
> BlockStateAsString(s->blockState));
> 2223:                           break;
> ---------------- src/backend/access/transam/xact.c ---------------------
> @@ line: 2890 @@
> 2890:                   case TBLOCK_BEGIN:
> 2891:                   case TBLOCK_SUBBEGIN:
> 2892:                   case TBLOCK_END:
> 2893:                   case TBLOCK_SUBEND:
> 2894:                   case TBLOCK_ABORT_END:
> 2895:                   case TBLOCK_SUBABORT_END:
> 2896:                   case TBLOCK_ABORT_PENDING:
> 2897:                   case TBLOCK_SUBABORT_PENDING:
> 2898:                   case TBLOCK_SUBRESTART:
> 2899:                   case TBLOCK_SUBABORT_RESTART:
> 2900:                   case TBLOCK_PREPARE:
> 2901:                           elog(FATAL, "BeginTransactionBlock:
> unexpected state %s",
> 2902:                                   
> BlockStateAsString(s->blockState));
> 2903:                           break;
> ---------------- src/backend/access/transam/xact.c ---------------------
> @@ line: 3058 @@
> 3058:                   case TBLOCK_BEGIN:
> 3059:                   case TBLOCK_SUBBEGIN:
> 3060:                   case TBLOCK_END:
> 3061:                   case TBLOCK_SUBEND:
> 3062:                   case TBLOCK_ABORT_END:
> 3063:                   case TBLOCK_SUBABORT_END:
> 3064:                   case TBLOCK_ABORT_PENDING:
> 3065:                   case TBLOCK_SUBABORT_PENDING:
> 3066:                   case TBLOCK_SUBRESTART:
> 3067:                   case TBLOCK_SUBABORT_RESTART:
> 3068:                   case TBLOCK_PREPARE:
> 3069:                           elog(FATAL, "EndTransactionBlock: unexpected
> state %s",
> 3070:                                   
> BlockStateAsString(s->blockState));
> 3071:                           break;
> ---------------- src/backend/access/transam/xact.c ---------------------
> @@ line: 3150 @@
> 3150:                   case TBLOCK_BEGIN:
> 3151:                   case TBLOCK_SUBBEGIN:
> 3152:                   case TBLOCK_END:
> 3153:                   case TBLOCK_SUBEND:
> 3154:                   case TBLOCK_ABORT_END:
> 3155:                   case TBLOCK_SUBABORT_END:
> 3156:                   case TBLOCK_ABORT_PENDING:
> 3157:                   case TBLOCK_SUBABORT_PENDING:
> 3158:                   case TBLOCK_SUBRESTART:
> 3159:                   case TBLOCK_SUBABORT_RESTART:
> 3160:                   case TBLOCK_PREPARE:
> 3161:                           elog(FATAL, "UserAbortTransactionBlock:
> unexpected state %s",
> 3162:                                   
> BlockStateAsString(s->blockState));
> 3163:                           break;
> ---------------- src/backend/access/transam/xact.c ---------------------
> @@ line: 3351 @@
> 3351:                   case TBLOCK_BEGIN:
> 3352:                   case TBLOCK_SUBBEGIN:
> 3353:                   case TBLOCK_END:
> 3354:                   case TBLOCK_SUBEND:
> 3355:                   case TBLOCK_ABORT_END:
> 3356:                   case TBLOCK_SUBABORT_END:
> 3357:                   case TBLOCK_ABORT_PENDING:
> 3358:                   case TBLOCK_SUBABORT_PENDING:
> 3359:                   case TBLOCK_SUBRESTART:
> 3360:                   case TBLOCK_SUBABORT_RESTART:
> 3361:                   case TBLOCK_PREPARE:
> 3362:                           elog(FATAL, "RollbackToSavepoint: unexpected
> state %s",
> 3363:                                   
> BlockStateAsString(s->blockState));
> 3364:                           break;
> ---------------- src/backend/access/transam/xact.c ---------------------
> @@ line: 3524 @@
> 3524:                   case TBLOCK_BEGIN:
> 3525:                   case TBLOCK_SUBBEGIN:
> 3526:                   case TBLOCK_INPROGRESS:
> 3527:                   case TBLOCK_END:
> 3528:                   case TBLOCK_SUBEND:
> 3529:                   case TBLOCK_ABORT:
> 3530:                   case TBLOCK_ABORT_END:
> 3531:                   case TBLOCK_SUBABORT_END:
> 3532:                   case TBLOCK_ABORT_PENDING:
> 3533:                   case TBLOCK_SUBABORT_PENDING:
> 3534:                   case TBLOCK_SUBRESTART:
> 3535:                   case TBLOCK_SUBABORT_RESTART:
> 3536:                   case TBLOCK_PREPARE:
> 3537:                           elog(FATAL,
> "RollbackAndReleaseCurrentSubTransaction: unexpected state %s",
> 3538:                                   
> BlockStateAsString(s->blockState));
> 3539:                           break;
> 
> 
> 
> ======================== Report 6
> ==========================================
> The verbosity level of log messages are inconsistent!
> Pattern: 3894
> ---------------- src/backend/access/transam/xlog.c ---------------------
> @@ line: 7537 @@
> 7537:           if (fscanf(lfp, "START WAL LOCATION: %X/%X (file %24s)%c",
> 7538:                              &startpoint.xlogid, &startpoint.xrecoff,
> startxlogfilename,
> 7539:                              &ch) != 4 || ch != '\n')
> 7540:                   ereport(ERROR,
> 7541:                                  
> (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
> 7542:                                    errmsg("invalid data in file
> \"%s\"", BACKUP_LABEL_FILE)));
> ---------------- src/backend/access/transam/xlog.c ---------------------
> @@ line: 7915 @@
> 7915:                   if (fscanf(fp, "START WAL LOCATION: %X/%X (file
> %24s)%c",
> 7916:                                      &startpoint.xlogid,
> &startpoint.xrecoff, startxlogfilename,
> 7917:                                      &ch) != 4 || ch != '\n')
> 7918:                           ereport(FATAL,
> 7919:                                          
> (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
> 7920:                                            errmsg("invalid data in
> file \"%s\"", histfilename)));
> ---------------- src/backend/access/transam/xlog.c ---------------------
> @@ line: 7921 @@
> 7921:                   if (fscanf(fp, "STOP WAL LOCATION: %X/%X (file
> %24s)%c",
> 7922:                                      &stoppoint.xlogid,
> &stoppoint.xrecoff, stopxlogfilename,
> 7923:                                      &ch) != 4 || ch != '\n')
> 7924:                           ereport(FATAL,
> 7925:                                          
> (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
> 7926:                                            errmsg("invalid data in
> file \"%s\"", histfilename)));
> 
> 
> 
> ======================== Report 7
> ==========================================
> The log message at line 3050 and line 3142 have inconsistent verbosity
> levels!
> Pattern: 3955
> ---------------- src/backend/access/transam/xact.c ---------------------
> @@ line: 3022 @@
> 3022:                   case TBLOCK_SUBABORT:
> 3023:                           while (s->parent != NULL)
> 3024:                           {
> 3025:                                   if (s->blockState ==
> TBLOCK_SUBINPROGRESS)
> 3026:                                           s->blockState =
> TBLOCK_SUBABORT_PENDING;
> 3027:                                   else if (s->blockState ==
> TBLOCK_SUBABORT)
> 3028:                                           s->blockState =
> TBLOCK_SUBABORT_END;
> 3029:                                   else
> 3030:                                           elog(FATAL,
> "EndTransactionBlock: unexpected state %s",
> 3031:                                                   
> BlockStateAsString(s->blockState));
> 3032:                                   s = s->parent;
> 3033:                           }
> 3034:                           if (s->blockState == TBLOCK_INPROGRESS)
> 3035:                                   s->blockState =
> TBLOCK_ABORT_PENDING;
> 3036:                           else if (s->blockState == TBLOCK_ABORT)
> 3037:                                   s->blockState = TBLOCK_ABORT_END;
> 3038:                           else
> 3039:                                   elog(FATAL, "EndTransactionBlock:
> unexpected state %s",
> 3040:                                           
> BlockStateAsString(s->blockState));
> 3041:                           break;
> 3042:
> 3043:                           /*
> 3044:                            * The user issued COMMIT when not inside a
> transaction.  Issue a
> 3045:                            * WARNING, staying in TBLOCK_STARTED state.
>  The upcoming call to
> 3046:                            * CommitTransactionCommand() will then
> close the transaction and
> 3047:                            * put us back into the default state.
> 3048:                            */
> 3049:                   case TBLOCK_STARTED:
> 3050:                           ereport(WARNING,
> 3051:                                          
> (errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
> 3052:                                            errmsg("there is no
> transaction in progress")));
> 3053:                           result = true;
> 3054:                           break;
> 3055:
> 3056:                           /* These cases are invalid. */
> 3057:                   case TBLOCK_DEFAULT:
> 3058:                   case TBLOCK_BEGIN:
> 3059:                   case TBLOCK_SUBBEGIN:
> 3060:                   case TBLOCK_END:
> 3061:                   case TBLOCK_SUBEND:
> 3062:                   case TBLOCK_ABORT_END:
> 3063:                   case TBLOCK_SUBABORT_END:
> 3064:                   case TBLOCK_ABORT_PENDING:
> 3065:                   case TBLOCK_SUBABORT_PENDING:
> 3066:                   case TBLOCK_SUBRESTART:
> 3067:                   case TBLOCK_SUBABORT_RESTART:
> 3068:                   case TBLOCK_PREPARE:
> 3069:                           elog(FATAL, "EndTransactionBlock: unexpected
> state %s",
> 3070:                                   
> BlockStateAsString(s->blockState));
> 3071:                           break;
> ---------------- src/backend/access/transam/xact.c ---------------------
> @@ line: 3114 @@
> 3114:                   case TBLOCK_SUBABORT:
> 3115:                           while (s->parent != NULL)
> 3116:                           {
> 3117:                                   if (s->blockState ==
> TBLOCK_SUBINPROGRESS)
> 3118:                                           s->blockState =
> TBLOCK_SUBABORT_PENDING;
> 3119:                                   else if (s->blockState ==
> TBLOCK_SUBABORT)
> 3120:                                           s->blockState =
> TBLOCK_SUBABORT_END;
> 3121:                                   else
> 3122:                                           elog(FATAL,
> "UserAbortTransactionBlock: unexpected state %s",
> 3123:                                                   
> BlockStateAsString(s->blockState));
> 3124:                                   s = s->parent;
> 3125:                           }
> 3126:                           if (s->blockState == TBLOCK_INPROGRESS)
> 3127:                                   s->blockState =
> TBLOCK_ABORT_PENDING;
> 3128:                           else if (s->blockState == TBLOCK_ABORT)
> 3129:                                   s->blockState = TBLOCK_ABORT_END;
> 3130:                           else
> 3131:                                   elog(FATAL,
> "UserAbortTransactionBlock: unexpected state %s",
> 3132:                                           
> BlockStateAsString(s->blockState));
> 3133:                           break;
> 3134:
> 3135:                           /*
> 3136:                            * The user issued ABORT when not inside a
> transaction. Issue a
> 3137:                            * WARNING and go to abort state.  The
> upcoming call to
> 3138:                            * CommitTransactionCommand() will then put
> us back into the
> 3139:                            * default state.
> 3140:                            */
> 3141:                   case TBLOCK_STARTED:
> 3142:                           ereport(NOTICE,
> 3143:                                          
> (errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
> 3144:                                            errmsg("there is no
> transaction in progress")));
> 3145:                           s->blockState = TBLOCK_ABORT_PENDING;
> 3146:                           break;
> 3147:
> 3148:                           /* These cases are invalid. */
> 3149:                   case TBLOCK_DEFAULT:
> 3150:                   case TBLOCK_BEGIN:
> 3151:                   case TBLOCK_SUBBEGIN:
> 3152:                   case TBLOCK_END:
> 3153:                   case TBLOCK_SUBEND:
> 3154:                   case TBLOCK_ABORT_END:
> 3155:                   case TBLOCK_SUBABORT_END:
> 3156:                   case TBLOCK_ABORT_PENDING:
> 3157:                   case TBLOCK_SUBABORT_PENDING:
> 3158:                   case TBLOCK_SUBRESTART:
> 3159:                   case TBLOCK_SUBABORT_RESTART:
> 3160:                   case TBLOCK_PREPARE:
> 3161:                           elog(FATAL, "UserAbortTransactionBlock:
> unexpected state %s",
> 3162:                                   
> BlockStateAsString(s->blockState));
> 3163:                           break;
> 
> ======================== Report 8
> ==========================================
> The log message at 2292 is ERROR, inconsistent with the line @line 2521
> (PANIC).
> Pattern: 3850
> ---------------- src/backend/access/transam/xlog.c ---------------------
> @@ line: 2289 @@
> 2289:           fd = BasicOpenFile(path, O_RDWR | PG_BINARY |
> get_sync_bit(sync_method),
> 2290:                                              S_IRUSR | S_IWUSR);
> 2291:           if (fd < 0)
> 2292:                   ereport(ERROR,
> 2293:                                   (errcode_for_file_access(),
> 2294:                      errmsg("could not open file \"%s\" (log file %u,
> segment %u): %m",
> 2295:                                     path, log, seg)));
> 2296:
> 2297:           elog(DEBUG2, "done creating and filling new WAL file");
> 2298:
> 2299:           return fd;
> ---------------- src/backend/access/transam/xlog.c ---------------------
> @@ line: 2518 @@
> 2518:           fd = BasicOpenFile(path, O_RDWR | PG_BINARY |
> get_sync_bit(sync_method),
> 2519:                                              S_IRUSR | S_IWUSR);
> 2520:           if (fd < 0)
> 2521:                   ereport(PANIC,
> 2522:                                   (errcode_for_file_access(),
> 2523:                      errmsg("could not open file \"%s\" (log file %u,
> segment %u): %m",
> 2524:                                     path, log, seg)));
> 2525:
> 2526:           return fd;
> 
> 
> ======================== Report 9
> ==========================================
> The 2 log messages: 624@comment.c and 663@comment.c have different
> verbosity
> levels!
> Pattern: 8162 
> ---------------- src/backend/commands/comment.c ---------------------
> @@ line: 607 @@
> 607:                    ereport(ERROR,
> 608:                                    (errcode(ERRCODE_SYNTAX_ERROR),
> 609:                                     errmsg("database name cannot be
> qualified")));
> 610:            database = strVal(linitial(qualname));
> 611:
> 612:            /*
> 613:             * When loading a dump, we may see a COMMENT ON DATABASE for
> the old name
> 614:             * of the database.  Erroring out would prevent pg_restore
> from completing
> 615:             * (which is really pg_restore's fault, but for now we will
> work around
> 616:             * the problem here).  Consensus is that the best fix is to
> treat wrong
> 617:             * database name as a WARNING not an ERROR.
> 618:             */
> 619:
> 620:            /* First get the database OID */
> 621:            oid = get_database_oid(database);
> 622:            if (!OidIsValid(oid))
> 623:            {
> 624:                    ereport(WARNING,
> 625:                                   
> (errcode(ERRCODE_UNDEFINED_DATABASE),
> 626:                                     errmsg("database \"%s\" does not
> exist", database)));
> 627:                    return;
> ---------------- src/backend/commands/comment.c ---------------------
> @@ line: 655 @@
> 655:                    ereport(ERROR,
> 656:                                    (errcode(ERRCODE_SYNTAX_ERROR),
> 657:                                     errmsg("tablespace name cannot be
> qualified")));
> 658:            tablespace = strVal(linitial(qualname));
> 659:
> 660:            oid = get_tablespace_oid(tablespace);
> 661:            if (!OidIsValid(oid))
> 662:            {
> 663:                    ereport(ERROR,
> 664:                                    (errcode(ERRCODE_UNDEFINED_OBJECT),
> 665:                                     errmsg("tablespace \"%s\" does not
> exist", tablespace)));
> 666:                    return;
> 
> 
> 
> ======================== Report 10
> ==========================================
> The first log message has WARNING while the others have ERROR!
> Pattern: 3126
> ---------------- src/backend/utils/misc/guc.c ---------------------
> @@ line: 7029 @@
> 7029:                   ParseLongOption(s, &name, &value);
> 7030:                   if (!value)
> 7031:                   {
> 7032:                           ereport(WARNING,
> 7033:                                          
> (errcode(ERRCODE_SYNTAX_ERROR),
> 7034:                                            errmsg("could not parse
> setting for parameter \"%s\"",
> 7035:                                                           name)));
> ---------------- src/backend/postmaster/postmaster.c ---------------------
> @@ line: 647 @@
> 647:                                            ParseLongOption(optarg,
> &name, &value);
> 648:                                            if (!value)
> 649:                                            {
> 650:                                                    if (opt == '-')
> 651:                                                           
> ereport(ERROR,
> 652:                                                                        
>    (errcode(ERRCODE_SYNTAX_ERROR),
> 653:                                                                        
>     errmsg("--%s requires a value",
> 654:                                                                        
>                    optarg)));
> ---------------- src/backend/bootstrap/bootstrap.c ---------------------
> @@ line: 288 @@
> 288:                                            ParseLongOption(optarg,
> &name, &value);
> 289:                                            if (!value)
> 290:                                            {
> 291:                                                    if (flag == '-')
> 292:                                                           
> ereport(ERROR,
> 293:                                                                        
>    (errcode(ERRCODE_SYNTAX_ERROR),
> 294:                                                                        
>     errmsg("--%s requires a value",
> 295:                                                                        
>                    optarg)));
> ---------------- src/backend/tcop/postgres.c ---------------------
> @@ line: 3175 @@
> 3175:                                           ParseLongOption(optarg,
> &name, &value);
> 3176:                                           if (!value)
> 3177:                                           {
> 3178:                                                   if (flag == '-')
> 3179:                                                          
> ereport(ERROR,
> 3180:                                                                       
>    (errcode(ERRCODE_SYNTAX_ERROR),
> 3181:                                                                       
>     errmsg("--%s requires a value",
> 3182:                                                                       
>                   optarg)));
> 
> -- 
> Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + It's impossible for everything to be true. +



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: timestamptz parsing bug?
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: B-tree parent pointer and checkpoints