Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb06d8e5

Browse files
committed
Accept "B" in all memory-unit GUCs, and improve error messages.
Commit6e7baa3 added support for "B" unit, for specifying config optionsin bytes. However, it was only accepted in GUC_UNIT_BYTE settings,wal_segment_size and track_activity_query_size, and not e.g. in work_mem.This patch makes it consistent, so that "B" accepted in all the samecontexts where "kB", "MB", and so forth are accepted.Add "B" to the list of accepted units in the error hint, along with "kB","MB", etc.Add an entry in the conversion table for "TB" to "B" conversion. A terabyteis out of range for any GUC_UNIT_BYTE option, so you always get an "out ofrange" error with that, but without it, you get a confusing error messagethat claims that "TB" is not an accepted unit, with a hint that neverthelesslists "TB" as an accepted unit.Reviewed-by: Alexander Korotkov, Andres FreundDiscussion:https://www.postgresql.org/message-id/1bfe7f4a-7e22-aa6e-7b37-f4d222ed2d67@iki.fi
1 parente41c2b0 commitb06d8e5

File tree

1 file changed

+12
-2
lines changed
  • src/backend/utils/misc

1 file changed

+12
-2
lines changed

‎src/backend/utils/misc/guc.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,7 @@ typedef struct
705705
charunit[MAX_UNIT_LEN+1];/* unit, as a string, like "kB" or
706706
* "min" */
707707
intbase_unit;/* GUC_UNIT_XXX */
708-
intmultiplier;/* If positive, multiply the value with this
708+
int64multiplier;/* If positive, multiply the value with this
709709
* for unit -> base_unit conversion. If
710710
* negative, divide (with the absolute value) */
711711
}unit_conversion;
@@ -718,10 +718,16 @@ typedef struct
718718
#error XLOG_BLCKSZ must be between 1KB and 1MB
719719
#endif
720720

721-
staticconstchar*memory_units_hint=gettext_noop("Valid units for this parameter are \"kB\", \"MB\", \"GB\", and \"TB\".");
721+
staticconstchar*memory_units_hint=gettext_noop("Valid units for this parameter are \"B\", \"kB\", \"MB\", \"GB\", and \"TB\".");
722722

723723
staticconstunit_conversionmemory_unit_conversion_table[]=
724724
{
725+
/*
726+
* TB -> bytes conversion always overflows 32-bit integer, so this always
727+
* produces an error. Include it nevertheless for completeness, and so
728+
* that you get an "out of range" error, rather than "invalid unit".
729+
*/
730+
{"TB",GUC_UNIT_BYTE,INT64CONST(1024)*1024*1024*1024},
725731
{"GB",GUC_UNIT_BYTE,1024*1024*1024},
726732
{"MB",GUC_UNIT_BYTE,1024*1024},
727733
{"kB",GUC_UNIT_BYTE,1024},
@@ -731,21 +737,25 @@ static const unit_conversion memory_unit_conversion_table[] =
731737
{"GB",GUC_UNIT_KB,1024*1024},
732738
{"MB",GUC_UNIT_KB,1024},
733739
{"kB",GUC_UNIT_KB,1},
740+
{"B",GUC_UNIT_KB,-1024},
734741

735742
{"TB",GUC_UNIT_MB,1024*1024},
736743
{"GB",GUC_UNIT_MB,1024},
737744
{"MB",GUC_UNIT_MB,1},
738745
{"kB",GUC_UNIT_MB,-1024},
746+
{"B",GUC_UNIT_MB,-(1024*1024)},
739747

740748
{"TB",GUC_UNIT_BLOCKS, (1024*1024*1024) / (BLCKSZ /1024)},
741749
{"GB",GUC_UNIT_BLOCKS, (1024*1024) / (BLCKSZ /1024)},
742750
{"MB",GUC_UNIT_BLOCKS,1024 / (BLCKSZ /1024)},
743751
{"kB",GUC_UNIT_BLOCKS,-(BLCKSZ /1024)},
752+
{"B",GUC_UNIT_BLOCKS,-BLCKSZ},
744753

745754
{"TB",GUC_UNIT_XBLOCKS, (1024*1024*1024) / (XLOG_BLCKSZ /1024)},
746755
{"GB",GUC_UNIT_XBLOCKS, (1024*1024) / (XLOG_BLCKSZ /1024)},
747756
{"MB",GUC_UNIT_XBLOCKS,1024 / (XLOG_BLCKSZ /1024)},
748757
{"kB",GUC_UNIT_XBLOCKS,-(XLOG_BLCKSZ /1024)},
758+
{"B",GUC_UNIT_XBLOCKS,-XLOG_BLCKSZ},
749759

750760
{""}/* end of table marker */
751761
};

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp