diff --git a/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl b/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl
index c741d6e703ec199ac18bfedded5340735b6f002b..bd479298ec7a45e82886ba49d97a4d11082bcefc 100755
--- a/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl
+++ b/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl
@@ -97,7 +97,7 @@ close(FILE);
 
 $file = lc("utf8_to_big5.map");
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_utf_to_local ULmapBIG5[ $count ] = {\n";
+print FILE "static const pg_utf_to_local ULmapBIG5[ $count ] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array))
 {
@@ -185,7 +185,7 @@ close(FILE);
 
 $file = lc("big5_to_utf8.map");
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_local_to_utf LUmapBIG5[ $count ] = {\n";
+print FILE "static const pg_local_to_utf LUmapBIG5[ $count ] = {\n";
 for $index (sort { $a <=> $b } keys(%array))
 {
 	$utf = $array{$index};
diff --git a/src/backend/utils/mb/Unicode/UCS_to_EUC_CN.pl b/src/backend/utils/mb/Unicode/UCS_to_EUC_CN.pl
index cb9a8cb0039b91b1b7f70bfdc27f8f618f9f75cc..bfc99123bf627bcef8d9faaeb1ce953dcffe32e0 100755
--- a/src/backend/utils/mb/Unicode/UCS_to_EUC_CN.pl
+++ b/src/backend/utils/mb/Unicode/UCS_to_EUC_CN.pl
@@ -55,7 +55,7 @@ close(FILE);
 
 $file = "utf8_to_euc_cn.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_utf_to_local ULmapEUC_CN[ $count ] = {\n";
+print FILE "static const pg_utf_to_local ULmapEUC_CN[ $count ] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array))
 {
@@ -109,7 +109,7 @@ close(FILE);
 
 $file = "euc_cn_to_utf8.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_local_to_utf LUmapEUC_CN[ $count ] = {\n";
+print FILE "static const pg_local_to_utf LUmapEUC_CN[ $count ] = {\n";
 for $index (sort { $a <=> $b } keys(%array))
 {
 	$utf = $array{$index};
diff --git a/src/backend/utils/mb/Unicode/UCS_to_EUC_JIS_2004.pl b/src/backend/utils/mb/Unicode/UCS_to_EUC_JIS_2004.pl
index 67962e39d26d935bb5c8a536abc5067a6831a62f..7860736b3bb0216bf7d51f5a6cc7624a8eef5f33 100755
--- a/src/backend/utils/mb/Unicode/UCS_to_EUC_JIS_2004.pl
+++ b/src/backend/utils/mb/Unicode/UCS_to_EUC_JIS_2004.pl
@@ -72,7 +72,7 @@ open(FILE, "> $file") || die("cannot open $file");
 print FILE "/*\n";
 print FILE " * This file was generated by UCS_to_EUC_JIS_2004.pl\n";
 print FILE " */\n";
-print FILE "static pg_utf_to_local ULmapEUC_JIS_2004[] = {\n";
+print FILE "static const pg_utf_to_local ULmapEUC_JIS_2004[] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array))
 {
@@ -133,7 +133,7 @@ print FILE "/*\n";
 print FILE " * This file was generated by UCS_to_EUC_JIS_2004.pl\n";
 print FILE " */\n";
 print FILE
-  "static pg_utf_to_local_combined ULmapEUC_JIS_2004_combined[] = {\n";
+  "static const pg_utf_to_local_combined ULmapEUC_JIS_2004_combined[] = {\n";
 
 for $index (sort { $a cmp $b } keys(%array1))
 {
@@ -256,7 +256,7 @@ open(FILE, "> $file") || die("cannot open $file");
 print FILE "/*\n";
 print FILE " * This file was generated by UCS_to_EUC_JIS_2004.pl\n";
 print FILE " */\n";
-print FILE "static pg_local_to_utf LUmapEUC_JIS_2004[] = {\n";
+print FILE "static const pg_local_to_utf LUmapEUC_JIS_2004[] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array))
 {
@@ -283,7 +283,7 @@ print FILE "/*\n";
 print FILE " * This file was generated by UCS_to_EUC_JIS_2004.pl\n";
 print FILE " */\n";
 print FILE
-  "static pg_local_to_utf_combined LUmapEUC_JIS_2004_combined[] = {\n";
+  "static const pg_local_to_utf_combined LUmapEUC_JIS_2004_combined[] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array1))
 {
diff --git a/src/backend/utils/mb/Unicode/UCS_to_EUC_JP.pl b/src/backend/utils/mb/Unicode/UCS_to_EUC_JP.pl
index c2297e5d67b61f3347628b81c5e9ba1271471207..79bc05b4bb00e9251b9836877d9d03db5efdda10 100755
--- a/src/backend/utils/mb/Unicode/UCS_to_EUC_JP.pl
+++ b/src/backend/utils/mb/Unicode/UCS_to_EUC_JP.pl
@@ -136,7 +136,7 @@ close(FILE);
 
 $file = "utf8_to_euc_jp.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_utf_to_local ULmapEUC_JP[ $count ] = {\n";
+print FILE "static const pg_utf_to_local ULmapEUC_JP[ $count ] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array))
 {
@@ -263,7 +263,7 @@ close(FILE);
 
 $file = "euc_jp_to_utf8.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_local_to_utf LUmapEUC_JP[ $count ] = {\n";
+print FILE "static const pg_local_to_utf LUmapEUC_JP[ $count ] = {\n";
 for $index (sort { $a <=> $b } keys(%array))
 {
 	$utf = $array{$index};
diff --git a/src/backend/utils/mb/Unicode/UCS_to_EUC_KR.pl b/src/backend/utils/mb/Unicode/UCS_to_EUC_KR.pl
index 42cd20028c0d24df9d5bba06b06ddd40fabbf314..fa553fdafa95d6032993734695b478547f2ce848 100755
--- a/src/backend/utils/mb/Unicode/UCS_to_EUC_KR.pl
+++ b/src/backend/utils/mb/Unicode/UCS_to_EUC_KR.pl
@@ -55,7 +55,7 @@ close(FILE);
 
 $file = "utf8_to_euc_kr.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_utf_to_local ULmapEUC_KR[ $count ] = {\n";
+print FILE "static const pg_utf_to_local ULmapEUC_KR[ $count ] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array))
 {
@@ -109,7 +109,7 @@ close(FILE);
 
 $file = "euc_kr_to_utf8.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_local_to_utf LUmapEUC_KR[ $count ] = {\n";
+print FILE "static const pg_local_to_utf LUmapEUC_KR[ $count ] = {\n";
 for $index (sort { $a <=> $b } keys(%array))
 {
 	$utf = $array{$index};
diff --git a/src/backend/utils/mb/Unicode/UCS_to_EUC_TW.pl b/src/backend/utils/mb/Unicode/UCS_to_EUC_TW.pl
index 1d76f135e676d66447b7fb66f15f91fa5ec2e32e..02414ba20232cf5807c73163c5be0816d695d6de 100755
--- a/src/backend/utils/mb/Unicode/UCS_to_EUC_TW.pl
+++ b/src/backend/utils/mb/Unicode/UCS_to_EUC_TW.pl
@@ -71,7 +71,7 @@ close(FILE);
 
 $file = "utf8_to_euc_tw.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_utf_to_local ULmapEUC_TW[ $count ] = {\n";
+print FILE "static const pg_utf_to_local ULmapEUC_TW[ $count ] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array))
 {
@@ -138,7 +138,7 @@ close(FILE);
 
 $file = "euc_tw_to_utf8.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_local_to_utf LUmapEUC_TW[ $count ] = {\n";
+print FILE "static const pg_local_to_utf LUmapEUC_TW[ $count ] = {\n";
 for $index (sort { $a <=> $b } keys(%array))
 {
 	$utf = $array{$index};
diff --git a/src/backend/utils/mb/Unicode/UCS_to_GB18030.pl b/src/backend/utils/mb/Unicode/UCS_to_GB18030.pl
index 4f0bd078f72ebc77b82ef9697325fabb50e87597..259cb5d9ddbda33f9c3ab55f5ace3d021e310423 100755
--- a/src/backend/utils/mb/Unicode/UCS_to_GB18030.pl
+++ b/src/backend/utils/mb/Unicode/UCS_to_GB18030.pl
@@ -52,7 +52,7 @@ close(FILE);
 
 $file = "utf8_to_gb18030.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_utf_to_local ULmapGB18030[ $count ] = {\n";
+print FILE "static const pg_utf_to_local ULmapGB18030[ $count ] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array))
 {
@@ -106,7 +106,7 @@ close(FILE);
 
 $file = "gb18030_to_utf8.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_local_to_utf LUmapGB18030[ $count ] = {\n";
+print FILE "static const pg_local_to_utf LUmapGB18030[ $count ] = {\n";
 for $index (sort { $a <=> $b } keys(%array))
 {
 	$utf = $array{$index};
diff --git a/src/backend/utils/mb/Unicode/UCS_to_SHIFT_JIS_2004.pl b/src/backend/utils/mb/Unicode/UCS_to_SHIFT_JIS_2004.pl
index 1a367d71a3a665e2031d593a637bef35be5e6f4f..edfb61bcd93b06f1280f6aec0f713520260942a3 100755
--- a/src/backend/utils/mb/Unicode/UCS_to_SHIFT_JIS_2004.pl
+++ b/src/backend/utils/mb/Unicode/UCS_to_SHIFT_JIS_2004.pl
@@ -72,7 +72,7 @@ open(FILE, "> $file") || die("cannot open $file");
 print FILE "/*\n";
 print FILE " * This file was generated by UCS_to_SHIFT_JIS_2004.pl\n";
 print FILE " */\n";
-print FILE "static pg_utf_to_local ULmapSHIFT_JIS_2004[] = {\n";
+print FILE "static const pg_utf_to_local ULmapSHIFT_JIS_2004[] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array))
 {
@@ -99,7 +99,7 @@ print FILE "/*\n";
 print FILE " * This file was generated by UCS_to_SHIFT_JIS_2004.pl\n";
 print FILE " */\n";
 print FILE
-  "static pg_utf_to_local_combined ULmapSHIFT_JIS_2004_combined[] = {\n";
+  "static const pg_utf_to_local_combined ULmapSHIFT_JIS_2004_combined[] = {\n";
 
 for $index (sort { $a cmp $b } keys(%array1))
 {
@@ -185,7 +185,7 @@ open(FILE, "> $file") || die("cannot open $file");
 print FILE "/*\n";
 print FILE " * This file was generated by UCS_to_SHIFTJIS_2004.pl\n";
 print FILE " */\n";
-print FILE "static pg_local_to_utf LUmapSHIFT_JIS_2004[] = {\n";
+print FILE "static const pg_local_to_utf LUmapSHIFT_JIS_2004[] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array))
 {
@@ -212,7 +212,7 @@ print FILE "/*\n";
 print FILE " * This file was generated by UCS_to_SHIFT_JIS_2004.pl\n";
 print FILE " */\n";
 print FILE
-  "static pg_local_to_utf_combined LUmapSHIFT_JIS_2004_combined[] = {\n";
+  "static const pg_local_to_utf_combined LUmapSHIFT_JIS_2004_combined[] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array1))
 {
diff --git a/src/backend/utils/mb/Unicode/UCS_to_SJIS.pl b/src/backend/utils/mb/Unicode/UCS_to_SJIS.pl
index 66597989963afa477598e37d8e7e2d84508002ab..74cd7ac5f88cf323f94ab6f4f8d029afea3eae10 100755
--- a/src/backend/utils/mb/Unicode/UCS_to_SJIS.pl
+++ b/src/backend/utils/mb/Unicode/UCS_to_SJIS.pl
@@ -72,7 +72,7 @@ close(FILE);
 
 $file = "utf8_to_sjis.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_utf_to_local ULmapSJIS[ $count ] = {\n";
+print FILE "static const pg_utf_to_local ULmapSJIS[ $count ] = {\n";
 
 for $index (sort { $a <=> $b } keys(%array))
 {
@@ -122,7 +122,7 @@ close(FILE);
 
 $file = "sjis_to_utf8.map";
 open(FILE, "> $file") || die("cannot open $file");
-print FILE "static pg_local_to_utf LUmapSJIS[ $count ] = {\n";
+print FILE "static const pg_local_to_utf LUmapSJIS[ $count ] = {\n";
 for $index (sort { $a <=> $b } keys(%array))
 {
 	$utf = $array{$index};
diff --git a/src/backend/utils/mb/Unicode/UCS_to_most.pl b/src/backend/utils/mb/Unicode/UCS_to_most.pl
index 9c8e39b9e5d020886462e30eee1f2d0b2b30fe4a..94e13fa241c5d2f98430699ea380e3475a813b35 100644
--- a/src/backend/utils/mb/Unicode/UCS_to_most.pl
+++ b/src/backend/utils/mb/Unicode/UCS_to_most.pl
@@ -88,7 +88,7 @@ foreach $charset (@charsets)
 
 	$file = lc("utf8_to_${charset}.map");
 	open(FILE, "> $file") || die("cannot open $file");
-	print FILE "static pg_utf_to_local ULmap${charset}[ $count ] = {\n";
+	print FILE "static const pg_utf_to_local ULmap${charset}[ $count ] = {\n";
 
 	for $index (sort { $a <=> $b } keys(%array))
 	{
@@ -140,7 +140,7 @@ foreach $charset (@charsets)
 
 	$file = lc("${charset}_to_utf8.map");
 	open(FILE, "> $file") || die("cannot open $file");
-	print FILE "static pg_local_to_utf LUmap${charset}[ $count ] = {\n";
+	print FILE "static const pg_local_to_utf LUmap${charset}[ $count ] = {\n";
 	for $index (sort { $a <=> $b } keys(%array))
 	{
 		$utf = $array{$index};
diff --git a/src/backend/utils/mb/Unicode/big5_to_utf8.map b/src/backend/utils/mb/Unicode/big5_to_utf8.map
index cf180b61cd19a0506a37e4fcfacb00d9fed01a16..8d6dbd2a35f6335f4fbc0e0ed774e50f62589708 100644
--- a/src/backend/utils/mb/Unicode/big5_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/big5_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapBIG5[ 13717 ] = {
+static const pg_local_to_utf LUmapBIG5[ 13717 ] = {
   {0xa140, 0xe38080},
   {0xa141, 0xefbc8c},
   {0xa142, 0xe38081},
diff --git a/src/backend/utils/mb/Unicode/euc_cn_to_utf8.map b/src/backend/utils/mb/Unicode/euc_cn_to_utf8.map
index bd12ebe39bd177c3484b86ee81d3602ff988e110..4052379832e82645cf5d5d486f891d4021509281 100644
--- a/src/backend/utils/mb/Unicode/euc_cn_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/euc_cn_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/euc_cn_to_utf8.map */
 
-static pg_local_to_utf LUmapEUC_CN[ 7445 ] = {
+static const pg_local_to_utf LUmapEUC_CN[ 7445 ] = {
   {0xa1a1, 0xe38080},
   {0xa1a2, 0xe38081},
   {0xa1a3, 0xe38082},
diff --git a/src/backend/utils/mb/Unicode/euc_jis_2004_to_utf8.map b/src/backend/utils/mb/Unicode/euc_jis_2004_to_utf8.map
index d81b00b46a1e11fcce32ca705540f806b2c7bf8d..509592975214c3412353f574622b7442bdc2e6b6 100644
--- a/src/backend/utils/mb/Unicode/euc_jis_2004_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/euc_jis_2004_to_utf8.map
@@ -1,7 +1,7 @@
 /*
  * This file was generated by UCS_to_EUC_JIS_2004.pl
  */
-static pg_local_to_utf LUmapEUC_JIS_2004[] = {
+static const pg_local_to_utf LUmapEUC_JIS_2004[] = {
   {0x000000, 0x00000000},	/* U+0000	 <control> */
   {0x000001, 0x00000001},	/* U+0001	 <control> */
   {0x000002, 0x00000002},	/* U+0002	 <control> */
diff --git a/src/backend/utils/mb/Unicode/euc_jis_2004_to_utf8_combined.map b/src/backend/utils/mb/Unicode/euc_jis_2004_to_utf8_combined.map
index 318c26f2ba7316f097d16587cb94e977de3939c3..fb4b2477723024274cde41c25114b00df3f11489 100644
--- a/src/backend/utils/mb/Unicode/euc_jis_2004_to_utf8_combined.map
+++ b/src/backend/utils/mb/Unicode/euc_jis_2004_to_utf8_combined.map
@@ -1,7 +1,7 @@
 /*
  * This file was generated by UCS_to_EUC_JIS_2004.pl
  */
-static pg_local_to_utf_combined LUmapEUC_JIS_2004_combined[] = {
+static const pg_local_to_utf_combined LUmapEUC_JIS_2004_combined[] = {
   {0x00a4f7, 0x00e3818b, 0x00e3829a},	/* U+304B+309A	 	[2000] */
   {0x00a4f8, 0x00e3818d, 0x00e3829a},	/* U+304D+309A	 	[2000] */
   {0x00a4f9, 0x00e3818f, 0x00e3829a},	/* U+304F+309A	 	[2000] */
diff --git a/src/backend/utils/mb/Unicode/euc_jp_to_utf8.map b/src/backend/utils/mb/Unicode/euc_jp_to_utf8.map
index ae796c12c2ea48071e5db8d760efdaa49afdbe1d..db427cbb24cdc94617ed026b3fe50638e42d8f9e 100644
--- a/src/backend/utils/mb/Unicode/euc_jp_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/euc_jp_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/euc_jp_to_utf8.map */
 
-static pg_local_to_utf LUmapEUC_JP[] = {
+static const pg_local_to_utf LUmapEUC_JP[] = {
   {0x8ea1, 0xefbda1},
   {0x8ea2, 0xefbda2},
   {0x8ea3, 0xefbda3},
diff --git a/src/backend/utils/mb/Unicode/euc_kr_to_utf8.map b/src/backend/utils/mb/Unicode/euc_kr_to_utf8.map
index c3283be6fc8ea4b864113e3a8938b61aa8cc3c1c..e37152137d6b93bc95466e9135fb5df2d7d71784 100644
--- a/src/backend/utils/mb/Unicode/euc_kr_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/euc_kr_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapEUC_KR[ 8227 ] = {
+static const pg_local_to_utf LUmapEUC_KR[ 8227 ] = {
   {0xa1a1, 0xe38080},
   {0xa1a2, 0xe38081},
   {0xa1a3, 0xe38082},
diff --git a/src/backend/utils/mb/Unicode/euc_tw_to_utf8.map b/src/backend/utils/mb/Unicode/euc_tw_to_utf8.map
index d3a303f64b5906e2ca136b632bcb1f8d1afd5541..b430b446dd953e86ad9e94bdde94fa93280d1377 100644
--- a/src/backend/utils/mb/Unicode/euc_tw_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/euc_tw_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/euc_tw_to_utf8.map */
 
-static pg_local_to_utf LUmapEUC_TW[ 23575 ] = {
+static const pg_local_to_utf LUmapEUC_TW[ 23575 ] = {
   {0xa1a1, 0xe38080},
   {0xa1a2, 0xefbc8c},
   {0xa1a3, 0xe38081},
diff --git a/src/backend/utils/mb/Unicode/gb18030_to_utf8.map b/src/backend/utils/mb/Unicode/gb18030_to_utf8.map
index 95669451d270d33cda36bb43736ff9e66b8d63b7..1715f6dd53ece1719d5f1693a6f68405e1813196 100644
--- a/src/backend/utils/mb/Unicode/gb18030_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/gb18030_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/gb18030_to_utf8.map */
 
-static pg_local_to_utf LUmapGB18030[ 63360 ] = {
+static const pg_local_to_utf LUmapGB18030[ 63360 ] = {
   {0x8140, 0xe4b882},
   {0x8141, 0xe4b884},
   {0x8142, 0xe4b885},
diff --git a/src/backend/utils/mb/Unicode/gbk_to_utf8.map b/src/backend/utils/mb/Unicode/gbk_to_utf8.map
index 6804f5dc6955854990e8d173baab4ad405dd1191..fced1f459041c63d68413accdff103e34535ece0 100644
--- a/src/backend/utils/mb/Unicode/gbk_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/gbk_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/gbk_to_utf8.map */
 
-static pg_local_to_utf LUmapGBK[ 21792 ] = {
+static const pg_local_to_utf LUmapGBK[ 21792 ] = {
   {0x0080, 0xe282ac},
   {0x8140, 0xe4b882},
   {0x8141, 0xe4b884},
diff --git a/src/backend/utils/mb/Unicode/iso8859_10_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_10_to_utf8.map
index 607b8e940163605c290d83affc6cd4f9639509de..8a650ee5e7ae806d8d43da5e4c6dba2aa91cdfc2 100644
--- a/src/backend/utils/mb/Unicode/iso8859_10_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_10_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_10_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_10[ 128 ] = {
+static const pg_local_to_utf LUmapISO8859_10[ 128 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_13_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_13_to_utf8.map
index d50ce084f0937c00400c4a8effff06c1ef08ecef..207570635de4de4786d95b0c6656f263221a52b6 100644
--- a/src/backend/utils/mb/Unicode/iso8859_13_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_13_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_13_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_13[ 128 ] = {
+static const pg_local_to_utf LUmapISO8859_13[ 128 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_14_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_14_to_utf8.map
index eaecef88e8a291e672e75500cd9d6b65a8ad8f91..49d63d4f076436c5d6433441e055aa1baafeae94 100644
--- a/src/backend/utils/mb/Unicode/iso8859_14_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_14_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_14_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_14[ 128 ] = {
+static const pg_local_to_utf LUmapISO8859_14[ 128 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_15_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_15_to_utf8.map
index e11a6bd241935f316134ac94e7e6a96e57fa22a5..349b64cbda480e11e68c9d0a8b37e30bb0c2b6da 100644
--- a/src/backend/utils/mb/Unicode/iso8859_15_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_15_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_15_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_15[ 128 ] = {
+static const pg_local_to_utf LUmapISO8859_15[ 128 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_16_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_16_to_utf8.map
index 77382cb7ed40417cba99a399ad8d4a9a078cc0b2..d8e280166ccb2ab8e82650c831e74db42802f08b 100644
--- a/src/backend/utils/mb/Unicode/iso8859_16_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_16_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_16_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_16[ 128 ] = {
+static const pg_local_to_utf LUmapISO8859_16[ 128 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_2_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_2_to_utf8.map
index 5cc984470d97db04a77a9c51415744b1c60d1015..30d487a0c037397640c09ab77b30187915d158d4 100644
--- a/src/backend/utils/mb/Unicode/iso8859_2_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_2_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_2_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_2[ 128 ] = {
+static const pg_local_to_utf LUmapISO8859_2[ 128 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_3_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_3_to_utf8.map
index 2a7e2855976efca47655312404d134444421940a..94b5bc4f2036b1e2cdc2ed3b41e72dd381f6bf78 100644
--- a/src/backend/utils/mb/Unicode/iso8859_3_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_3_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_3_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_3[ 121 ] = {
+static const pg_local_to_utf LUmapISO8859_3[ 121 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_4_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_4_to_utf8.map
index 315f1d3be64724ca4dc3c83f14b4b0f0b23405dc..f339c1991f5faea68c4b7ef05862f6623a4f30b1 100644
--- a/src/backend/utils/mb/Unicode/iso8859_4_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_4_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_4_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_4[ 128 ] = {
+static const pg_local_to_utf LUmapISO8859_4[ 128 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_5_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_5_to_utf8.map
index 60838e1be73f999876df530731647c0edac331ae..601be303e066914ed44800a99608db7f2a10144b 100644
--- a/src/backend/utils/mb/Unicode/iso8859_5_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_5_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_5_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_5[ 128 ] = {
+static const pg_local_to_utf LUmapISO8859_5[ 128 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_6_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_6_to_utf8.map
index f097a01bf5ae0e6ecd49b1cc9104f365480da53c..289f97e7b5065926d6c00889705d73f39f5ce895 100644
--- a/src/backend/utils/mb/Unicode/iso8859_6_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_6_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_6_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_6[ 83 ] = {
+static const pg_local_to_utf LUmapISO8859_6[ 83 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_7_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_7_to_utf8.map
index 8cc6826a795f015246e26aeb1e2708d969a796c8..fbbecaa340007c7fd0431f4a1c67fccea37b0313 100644
--- a/src/backend/utils/mb/Unicode/iso8859_7_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_7_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_7_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_7[ 125 ] = {
+static const pg_local_to_utf LUmapISO8859_7[ 125 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_8_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_8_to_utf8.map
index 22e0b4e26614fce9ae0324a530d5e600e34e98cf..4ed316c7891e6bece6d51dbedfa7043086ebb898 100644
--- a/src/backend/utils/mb/Unicode/iso8859_8_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_8_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_8_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_8[ 92 ] = {
+static const pg_local_to_utf LUmapISO8859_8[ 92 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/iso8859_9_to_utf8.map b/src/backend/utils/mb/Unicode/iso8859_9_to_utf8.map
index 268f0e4c933a271949528444867540b7ed31c25c..f86cc65129bd5ef54cb7615be4822ad7a6500ed1 100644
--- a/src/backend/utils/mb/Unicode/iso8859_9_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/iso8859_9_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/iso8859_9_to_utf8.map */
 
-static pg_local_to_utf LUmapISO8859_9[ 128 ] = {
+static const pg_local_to_utf LUmapISO8859_9[ 128 ] = {
   {0x0080, 0xc280},
   {0x0081, 0xc281},
   {0x0082, 0xc282},
diff --git a/src/backend/utils/mb/Unicode/johab_to_utf8.map b/src/backend/utils/mb/Unicode/johab_to_utf8.map
index a4584c5bc5829e10c61b35689649bc9f3830a785..8110f6e8531c7aeebd298ac368475d272640c76d 100644
--- a/src/backend/utils/mb/Unicode/johab_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/johab_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapJOHAB[ 17049 ] = {
+static const pg_local_to_utf LUmapJOHAB[ 17049 ] = {
   {0x8444, 0xe384b3},
   {0x8446, 0xe384b5},
   {0x8447, 0xe384b6},
diff --git a/src/backend/utils/mb/Unicode/koi8r_to_utf8.map b/src/backend/utils/mb/Unicode/koi8r_to_utf8.map
index 9364e5efe9ae1fdf54a35f927f6b9612d7a3f9d2..738f160bfaf39e4d3b50f7170e3db8b410b7f5dc 100644
--- a/src/backend/utils/mb/Unicode/koi8r_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/koi8r_to_utf8.map
@@ -1,6 +1,6 @@
 /* src/backend/utils/mb/Unicode/koi8r_to_utf8.map */
 
-static pg_local_to_utf LUmapKOI8R[ 128 ] = {
+static const pg_local_to_utf LUmapKOI8R[ 128 ] = {
   {0x0080, 0xe29480},
   {0x0081, 0xe29482},
   {0x0082, 0xe2948c},
diff --git a/src/backend/utils/mb/Unicode/koi8u_to_utf8.map b/src/backend/utils/mb/Unicode/koi8u_to_utf8.map
index 659f4868e597cb127e747eb1b5e310d6f21cdac0..087ad4a5f5ee61f8f817c9146846be11b46f4ca9 100644
--- a/src/backend/utils/mb/Unicode/koi8u_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/koi8u_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapKOI8U[ 128 ] = {
+static const pg_local_to_utf LUmapKOI8U[ 128 ] = {
   {0x0080, 0xe29480},
   {0x0081, 0xe29482},
   {0x0082, 0xe2948c},
diff --git a/src/backend/utils/mb/Unicode/shift_jis_2004_to_utf8.map b/src/backend/utils/mb/Unicode/shift_jis_2004_to_utf8.map
index 5a1496c88c960e35f5e4e862b00c52ab34891a69..f2b268acd396f633f8bd55b9dbaad80126f33f9c 100644
--- a/src/backend/utils/mb/Unicode/shift_jis_2004_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/shift_jis_2004_to_utf8.map
@@ -1,7 +1,7 @@
 /*
  * This file was generated by UCS_to_SHIFTJIS_2004.pl
  */
-static pg_local_to_utf LUmapSHIFT_JIS_2004[] = {
+static const pg_local_to_utf LUmapSHIFT_JIS_2004[] = {
   {0x0000, 0x00000000},	/* U+0000	 <control> */
   {0x0001, 0x00000001},	/* U+0001	 <control> */
   {0x0002, 0x00000002},	/* U+0002	 <control> */
diff --git a/src/backend/utils/mb/Unicode/shift_jis_2004_to_utf8_combined.map b/src/backend/utils/mb/Unicode/shift_jis_2004_to_utf8_combined.map
index 57d54c9f09551bde69becb2f41d2265eb5b28a42..b1c7bced5fd605816fd02bc2185c7d59f83ddabc 100644
--- a/src/backend/utils/mb/Unicode/shift_jis_2004_to_utf8_combined.map
+++ b/src/backend/utils/mb/Unicode/shift_jis_2004_to_utf8_combined.map
@@ -1,7 +1,7 @@
 /*
  * This file was generated by UCS_to_SHIFT_JIS_2004.pl
  */
-static pg_local_to_utf_combined LUmapSHIFT_JIS_2004_combined[] = {
+static const pg_local_to_utf_combined LUmapSHIFT_JIS_2004_combined[] = {
   {0x82f5, 0x00e3818b, 0x00e3829a},	/* U+304B+309A	 	[2000] */
   {0x82f6, 0x00e3818d, 0x00e3829a},	/* U+304D+309A	 	[2000] */
   {0x82f7, 0x00e3818f, 0x00e3829a},	/* U+304F+309A	 	[2000] */
diff --git a/src/backend/utils/mb/Unicode/sjis_to_utf8.map b/src/backend/utils/mb/Unicode/sjis_to_utf8.map
index 05e846177b7a679548a7bba2f86a3e0358a149f4..6bafaa330fab7fcc3d6ffb3e8f454495658e44b7 100644
--- a/src/backend/utils/mb/Unicode/sjis_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/sjis_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapSJIS[ 7787 ] = {
+static const pg_local_to_utf LUmapSJIS[ 7787 ] = {
   {0x00a1, 0xefbda1},
   {0x00a2, 0xefbda2},
   {0x00a3, 0xefbda3},
diff --git a/src/backend/utils/mb/Unicode/uhc_to_utf8.map b/src/backend/utils/mb/Unicode/uhc_to_utf8.map
index 47bcfec53b273c66bba00a4a4ad7c63288871d24..26a7b18f658672ef404d3894d2e9d64fb316305c 100644
--- a/src/backend/utils/mb/Unicode/uhc_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/uhc_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapUHC[ 17237 ] = {
+static const pg_local_to_utf LUmapUHC[ 17237 ] = {
   {0x8141, 0xeab082},
   {0x8142, 0xeab083},
   {0x8143, 0xeab085},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_big5.map b/src/backend/utils/mb/Unicode/utf8_to_big5.map
index 85b3c24f1d542357f10ed4305a9e3c06e9e6571b..68cccf441c025ad98cb0005cf36e32d37161707a 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_big5.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_big5.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapBIG5[ 13711 ] = {
+static const pg_utf_to_local ULmapBIG5[ 13711 ] = {
   {0xc2a2, 0xa246},
   {0xc2a3, 0xa247},
   {0xc2a5, 0xa244},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_euc_cn.map b/src/backend/utils/mb/Unicode/utf8_to_euc_cn.map
index 949bade3eb0f7d250db576bcc5c7aae7f359f3ca..b28eb9cc0c7ba0cb7f6d2ebc14f5a275c005a09a 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_euc_cn.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_euc_cn.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapEUC_CN[ 7445 ] = {
+static const pg_utf_to_local ULmapEUC_CN[ 7445 ] = {
   {0xc2a4, 0xa1e8},
   {0xc2a7, 0xa1ec},
   {0xc2a8, 0xa1a7},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_euc_jis_2004.map b/src/backend/utils/mb/Unicode/utf8_to_euc_jis_2004.map
index b51589cd6e6cd181d2d8374a4b84770237971804..250771f19bb3e9836b035b3fa8077be6491fcf7e 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_euc_jis_2004.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_euc_jis_2004.map
@@ -1,7 +1,7 @@
 /*
  * This file was generated by UCS_to_EUC_JIS_2004.pl
  */
-static pg_utf_to_local ULmapEUC_JIS_2004[] = {
+static const pg_utf_to_local ULmapEUC_JIS_2004[] = {
   {0x00000000, 0x000000},	/* U+0000	 <control> */
   {0x00000001, 0x000001},	/* U+0001	 <control> */
   {0x00000002, 0x000002},	/* U+0002	 <control> */
diff --git a/src/backend/utils/mb/Unicode/utf8_to_euc_jis_2004_combined.map b/src/backend/utils/mb/Unicode/utf8_to_euc_jis_2004_combined.map
index c26cc8d7014856f39031eaf86ff874a6759ca6d8..d098e256df7e39d9f0fc3443be74edbc4d1e9753 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_euc_jis_2004_combined.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_euc_jis_2004_combined.map
@@ -1,7 +1,7 @@
 /*
  * This file was generated by UCS_to_EUC_JIS_2004.pl
  */
-static pg_utf_to_local_combined ULmapEUC_JIS_2004_combined[] = {
+static const pg_utf_to_local_combined ULmapEUC_JIS_2004_combined[] = {
   {0x0000c3a6, 0x0000cc80, 0x00abc4},	/* U+00E6+0300	 	[2000] */
   {0x0000c994, 0x0000cc80, 0x00abc8},	/* U+0254+0300	 	[2000] */
   {0x0000c994, 0x0000cc81, 0x00abc9},	/* U+0254+0301	 	[2000] */
diff --git a/src/backend/utils/mb/Unicode/utf8_to_euc_jp.map b/src/backend/utils/mb/Unicode/utf8_to_euc_jp.map
index a5b0944440ec60771b0b440435b2b5898144e101..137d4fdef614e574fa53ba34ea3872ac34e2a83d 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_euc_jp.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_euc_jp.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapEUC_JP[ 13175 ] = {
+static const pg_utf_to_local ULmapEUC_JP[ 13175 ] = {
   {0xc2a1, 0x8fa2c2},
   {0xc2a4, 0x8fa2f0},
   {0xc2a6, 0x8fa2c3},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_euc_kr.map b/src/backend/utils/mb/Unicode/utf8_to_euc_kr.map
index f5c9d0ab8b4d70b733168eb7d1e0f36c46732f6b..4a78b260ea45759058d2762b3a0a247fd819de97 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_euc_kr.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_euc_kr.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapEUC_KR[ 8227 ] = {
+static const pg_utf_to_local ULmapEUC_KR[ 8227 ] = {
   {0xc2a1, 0xa2ae},
   {0xc2a4, 0xa2b4},
   {0xc2a7, 0xa1d7},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_euc_tw.map b/src/backend/utils/mb/Unicode/utf8_to_euc_tw.map
index 3ddf9a017624e47f08b6ac08df8eac57bb03498f..0ade01aa8851438fef090fc992d6b0d8656d527f 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_euc_tw.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_euc_tw.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapEUC_TW[ 17711 ] = {
+static const pg_utf_to_local ULmapEUC_TW[ 17711 ] = {
   {0xc2a7, 0xa1f0},
   {0xc2b0, 0xa2f8},
   {0xc2b1, 0xa2b4},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_gb18030.map b/src/backend/utils/mb/Unicode/utf8_to_gb18030.map
index 476625b22b8affc37984922f22c4431ea264a79c..52d380c5c14ee7a683d89770d414b5fffab87728 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_gb18030.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_gb18030.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapGB18030[ 63360 ] = {
+static const pg_utf_to_local ULmapGB18030[ 63360 ] = {
   {0xc280, 0x81308130},
   {0xc281, 0x81308131},
   {0xc282, 0x81308132},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_gbk.map b/src/backend/utils/mb/Unicode/utf8_to_gbk.map
index df7c4e2a9e70595878fd6911b35043949bd2cecf..70febd7b2c4a0b46aeddb0213af94dfc764d79c8 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_gbk.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_gbk.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapGBK[ 21792 ] = {
+static const pg_utf_to_local ULmapGBK[ 21792 ] = {
   {0xc2a4, 0xa1e8},
   {0xc2a7, 0xa1ec},
   {0xc2a8, 0xa1a7},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_10.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_10.map
index b4aeafee2ba19d39ddc6050bd44f6e0bce190952..85bbd23cea6a52c90d30263455425753576fe369 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_10.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_10.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_10[ 128 ] = {
+static const pg_utf_to_local ULmapISO8859_10[ 128 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_13.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_13.map
index eca37849248e82d0dd7b914c49c2773cb1932bf2..24588af340129390497034ba7366de028ebf33af 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_13.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_13.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_13[ 128 ] = {
+static const pg_utf_to_local ULmapISO8859_13[ 128 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_14.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_14.map
index bef24578eaa86c9fb877ad9453166bbc66aa35ff..8f273050861b3c4566024362c6711c4425075e27 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_14.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_14.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_14[ 128 ] = {
+static const pg_utf_to_local ULmapISO8859_14[ 128 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_15.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_15.map
index e1e098865c6b1571c30e9a59146ec51bb36f0dd4..f314021b9c7df93cb5e8950f142b3e6e0b0e4ffb 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_15.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_15.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_15[ 128 ] = {
+static const pg_utf_to_local ULmapISO8859_15[ 128 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_16.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_16.map
index 63ba6bdafaf3d45445537f7dd81cee6d91b1108f..6a8c754bc0f639f3020967f68fd9e12e3702e46d 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_16.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_16.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_16[ 128 ] = {
+static const pg_utf_to_local ULmapISO8859_16[ 128 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_2.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_2.map
index 85ff468e84a71a2ebe6c38f182106a6d97f7552c..8e65a6a4afe738a617fe3f608e8675533c9ece40 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_2.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_2.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_2[ 128 ] = {
+static const pg_utf_to_local ULmapISO8859_2[ 128 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_3.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_3.map
index e1eced40db9a201b61e62370da4b9b0b8d153b80..8d0242dd15109d3324a6cbfe512cf66a1d5e04b4 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_3.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_3.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_3[ 121 ] = {
+static const pg_utf_to_local ULmapISO8859_3[ 121 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_4.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_4.map
index a621c5a7c4449a2c113981b4aa56fe1a24796f04..30fe4f3a501e538e5f13e749060493184ab399ef 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_4.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_4.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_4[ 128 ] = {
+static const pg_utf_to_local ULmapISO8859_4[ 128 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_5.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_5.map
index 524c585bb60678675d6f427f5b7c360e84b2bcec..6509d7f6ebfe2c8af83f9cba7599ff5441397bef 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_5.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_5.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_5[ 128 ] = {
+static const pg_utf_to_local ULmapISO8859_5[ 128 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_6.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_6.map
index 291f7cf5da16af98c1298887f8491f4da9f7ee5c..8f29f26ffe610f31f8ae136e20a11543fb5dee43 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_6.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_6.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_6[ 83 ] = {
+static const pg_utf_to_local ULmapISO8859_6[ 83 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_7.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_7.map
index 8e4b7d0eb00d817f159eaf2c0dd3660ada0ef191..b0488ec3e0c0d7e2247194c40baa87a0978e980c 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_7.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_7.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_7[ 125 ] = {
+static const pg_utf_to_local ULmapISO8859_7[ 125 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_8.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_8.map
index 62095e54f48b31bb513b81fc22c14a57731cda0f..7f31c5dee9903773b6210a87be1ed2956844004b 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_8.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_8.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_8[ 92 ] = {
+static const pg_utf_to_local ULmapISO8859_8[ 92 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_iso8859_9.map b/src/backend/utils/mb/Unicode/utf8_to_iso8859_9.map
index baff0f0319fdc384697bf0ebbee0499d3f62cafb..d34b8afcf2e08d7ece6a40b7f0c3fd1fcfa81cc5 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_iso8859_9.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_iso8859_9.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapISO8859_9[ 128 ] = {
+static const pg_utf_to_local ULmapISO8859_9[ 128 ] = {
   {0xc280, 0x0080},
   {0xc281, 0x0081},
   {0xc282, 0x0082},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_johab.map b/src/backend/utils/mb/Unicode/utf8_to_johab.map
index 5469f1280bdac69a13b4c1b94e375661220477a8..869f8213d214bb23d05ce309c844ce58e7b2825b 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_johab.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_johab.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapJOHAB[ 17049 ] = {
+static const pg_utf_to_local ULmapJOHAB[ 17049 ] = {
   {0xc2a1, 0xd9ae},
   {0xc2a4, 0xd9b4},
   {0xc2a7, 0xd967},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_koi8r.map b/src/backend/utils/mb/Unicode/utf8_to_koi8r.map
index 97ab485e195f957e618f883263fd2c6333a6f943..b4760da43c8a2f6ae28c655bc63d0025c4939e25 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_koi8r.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_koi8r.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapKOI8R[ 128 ] = {
+static const pg_utf_to_local ULmapKOI8R[ 128 ] = {
   {0xc2a0, 0x009a},
   {0xc2a9, 0x00bf},
   {0xc2b0, 0x009c},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_koi8u.map b/src/backend/utils/mb/Unicode/utf8_to_koi8u.map
index 7f262a4aaa422cdda5ea4c0457fd3b0308888b0d..b6366e8718dcb2895cb15e9095231c0cc6d04442 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_koi8u.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_koi8u.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapKOI8U[ 128 ] = {
+static const pg_utf_to_local ULmapKOI8U[ 128 ] = {
   {0xc2a0, 0x009a},
   {0xc2a9, 0x00bf},
   {0xc2b0, 0x009c},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_shift_jis_2004.map b/src/backend/utils/mb/Unicode/utf8_to_shift_jis_2004.map
index 2c52d4b57474dfe02ff334140b707c4df5d97d31..2db1902f58779b042aed51b9b16260db54e3246b 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_shift_jis_2004.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_shift_jis_2004.map
@@ -1,7 +1,7 @@
 /*
  * This file was generated by UCS_to_SHIFT_JIS_2004.pl
  */
-static pg_utf_to_local ULmapSHIFT_JIS_2004[] = {
+static const pg_utf_to_local ULmapSHIFT_JIS_2004[] = {
   {0x00000000, 0x000000},	/* U+0000	 <control> */
   {0x00000001, 0x000001},	/* U+0001	 <control> */
   {0x00000002, 0x000002},	/* U+0002	 <control> */
diff --git a/src/backend/utils/mb/Unicode/utf8_to_shift_jis_2004_combined.map b/src/backend/utils/mb/Unicode/utf8_to_shift_jis_2004_combined.map
index c6502e3a8e917e66ca40121487acb3b74828cb5f..e55d4a2a6cfd53eca7e96653dc4f38c32b605ebf 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_shift_jis_2004_combined.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_shift_jis_2004_combined.map
@@ -1,7 +1,7 @@
 /*
  * This file was generated by UCS_to_SHIFT_JIS_2004.pl
  */
-static pg_utf_to_local_combined ULmapSHIFT_JIS_2004_combined[] = {
+static const pg_utf_to_local_combined ULmapSHIFT_JIS_2004_combined[] = {
   {0x0000c3a6, 0x0000cc80, 0x8663},	/* U+00E6+0300	 	[2000] */
   {0x0000c994, 0x0000cc80, 0x8667},	/* U+0254+0300	 	[2000] */
   {0x0000c994, 0x0000cc81, 0x8668},	/* U+0254+0301	 	[2000] */
diff --git a/src/backend/utils/mb/Unicode/utf8_to_sjis.map b/src/backend/utils/mb/Unicode/utf8_to_sjis.map
index d827ae5c269b22fce0dd05bb8ceb3e60662e6f2e..bcb76c9150e93464e528aa8901ae600756b3bd18 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_sjis.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_sjis.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapSJIS[ 7398 ] = {
+static const pg_utf_to_local ULmapSJIS[ 7398 ] = {
   {0xc19c, 0x815f},
   {0xc2a2, 0x8191},
   {0xc2a3, 0x8192},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_uhc.map b/src/backend/utils/mb/Unicode/utf8_to_uhc.map
index e252eecc093e31959433f2889fdcadcf21cafb9d..15dfb56a09958393bc1d7bbea776ab45a5f179f2 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_uhc.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_uhc.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapUHC[ 17237 ] = {
+static const pg_utf_to_local ULmapUHC[ 17237 ] = {
   {0xc2a1, 0xa2ae},
   {0xc2a4, 0xa2b4},
   {0xc2a7, 0xa1d7},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1250.map b/src/backend/utils/mb/Unicode/utf8_to_win1250.map
index ef0381dc4342148735813f9470f9a7bb5cb235bc..4dd4631ab82ffd3e61e57201fc3f311411fb7f35 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1250.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1250.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapWIN1250[ 123 ] = {
+static const pg_utf_to_local ULmapWIN1250[ 123 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a4, 0x00a4},
   {0xc2a6, 0x00a6},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1251.map b/src/backend/utils/mb/Unicode/utf8_to_win1251.map
index e69fd6573e2fe0aef49bb99dfdbf4bafe942517b..3dc9f2b5e3ae7c1e73a6819b349986306ccfe6eb 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1251.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1251.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapWIN1251[ 127 ] = {
+static const pg_utf_to_local ULmapWIN1251[ 127 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a4, 0x00a4},
   {0xc2a6, 0x00a6},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1252.map b/src/backend/utils/mb/Unicode/utf8_to_win1252.map
index ba9594b74cfbf2d436a347fb60d056837bbec422..bc460a340b2c5bb3b2edd6d012df68cd969d1f1b 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1252.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1252.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapWIN1252[ 123 ] = {
+static const pg_utf_to_local ULmapWIN1252[ 123 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a1, 0x00a1},
   {0xc2a2, 0x00a2},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1253.map b/src/backend/utils/mb/Unicode/utf8_to_win1253.map
index a7961e95f12798ed53e8c2b04086f0501ecd909c..4cf03301363e263fe1aaf050db072d38efbeca8c 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1253.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1253.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapWIN1253[ 111 ] = {
+static const pg_utf_to_local ULmapWIN1253[ 111 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a3, 0x00a3},
   {0xc2a4, 0x00a4},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1254.map b/src/backend/utils/mb/Unicode/utf8_to_win1254.map
index e1afbe8f40d7abe17fef5c86c461833314c4d709..54f1e0fe4cbf8f0ed699a804309efc6e09b2c2cb 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1254.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1254.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapWIN1254[ 121 ] = {
+static const pg_utf_to_local ULmapWIN1254[ 121 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a1, 0x00a1},
   {0xc2a2, 0x00a2},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1255.map b/src/backend/utils/mb/Unicode/utf8_to_win1255.map
index 9071fe0a61b00311f038ee26317080cc07d170d5..328f0a1293d2ba4b8ae3e3fc4bebae536b8256dd 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1255.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1255.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapWIN1255[ 105 ] = {
+static const pg_utf_to_local ULmapWIN1255[ 105 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a1, 0x00a1},
   {0xc2a2, 0x00a2},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1256.map b/src/backend/utils/mb/Unicode/utf8_to_win1256.map
index 1ae675f79168b2cdc1ed886ee0b594f8d0439bff..aa7d36a18e2ff018a484a0be7084453dc08214c6 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1256.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1256.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapWIN1256[ 128 ] = {
+static const pg_utf_to_local ULmapWIN1256[ 128 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a2, 0x00a2},
   {0xc2a3, 0x00a3},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1257.map b/src/backend/utils/mb/Unicode/utf8_to_win1257.map
index 562678119e9d178c5801c506cb7db01a5c37293b..dca28d28ae9cdcf81f320a193cf277c23a444e09 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1257.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1257.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapWIN1257[ 116 ] = {
+static const pg_utf_to_local ULmapWIN1257[ 116 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a2, 0x00a2},
   {0xc2a3, 0x00a3},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win1258.map b/src/backend/utils/mb/Unicode/utf8_to_win1258.map
index 7c4629ff91fce3de9290ad27695ec9eab9240bec..371e315bdb6cdf810f5315243d0fcf7aadb49562 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win1258.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win1258.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapWIN1258[ 119 ] = {
+static const pg_utf_to_local ULmapWIN1258[ 119 ] = {
   {0xc2a0, 0x00a0},
   {0xc2a1, 0x00a1},
   {0xc2a2, 0x00a2},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win866.map b/src/backend/utils/mb/Unicode/utf8_to_win866.map
index e5767e09307781c1c039dbab65989b7356c03aaf..dbd705b96c7b025a1f3d31d88d8584101b626c26 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win866.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win866.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapWIN866[ 128 ] = {
+static const pg_utf_to_local ULmapWIN866[ 128 ] = {
   {0xc2a0, 0x00ff},
   {0xc2a4, 0x00fd},
   {0xc2b0, 0x00f8},
diff --git a/src/backend/utils/mb/Unicode/utf8_to_win874.map b/src/backend/utils/mb/Unicode/utf8_to_win874.map
index d765744461fffdfabe2c5ff3d7f57c238905c991..9265a39f4e445a78b57b2dae2aa22b18273df429 100644
--- a/src/backend/utils/mb/Unicode/utf8_to_win874.map
+++ b/src/backend/utils/mb/Unicode/utf8_to_win874.map
@@ -1,4 +1,4 @@
-static pg_utf_to_local ULmapWIN874[ 97 ] = {
+static const pg_utf_to_local ULmapWIN874[ 97 ] = {
   {0xc2a0, 0x00a0},
   {0xe0b881, 0x00a1},
   {0xe0b882, 0x00a2},
diff --git a/src/backend/utils/mb/Unicode/win1250_to_utf8.map b/src/backend/utils/mb/Unicode/win1250_to_utf8.map
index 22f44b7f58ac5ecd6cc71a56b1f93dd3ef090ddd..dd44dceafc8a5f3464c51dc8b22c9f18ccefda0e 100644
--- a/src/backend/utils/mb/Unicode/win1250_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1250_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN1250[ 123 ] = {
+static const pg_local_to_utf LUmapWIN1250[ 123 ] = {
   {0x0080, 0xe282ac},
   {0x0082, 0xe2809a},
   {0x0084, 0xe2809e},
diff --git a/src/backend/utils/mb/Unicode/win1251_to_utf8.map b/src/backend/utils/mb/Unicode/win1251_to_utf8.map
index cdea6fe4459c48a588d68585542497c5ef0b952d..a4f1aeb49da0fb498f31bdd027a13c87d68aa6b5 100644
--- a/src/backend/utils/mb/Unicode/win1251_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1251_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN1251[ 127 ] = {
+static const pg_local_to_utf LUmapWIN1251[ 127 ] = {
   {0x0080, 0xd082},
   {0x0081, 0xd083},
   {0x0082, 0xe2809a},
diff --git a/src/backend/utils/mb/Unicode/win1252_to_utf8.map b/src/backend/utils/mb/Unicode/win1252_to_utf8.map
index ad849ee011dd98349e2a7593f718532b054da0f8..7b547becc81c7fdfe47e870dc8b44c2965997f77 100644
--- a/src/backend/utils/mb/Unicode/win1252_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1252_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN1252[ 123 ] = {
+static const pg_local_to_utf LUmapWIN1252[ 123 ] = {
   {0x0080, 0xe282ac},
   {0x0082, 0xe2809a},
   {0x0083, 0xc692},
diff --git a/src/backend/utils/mb/Unicode/win1253_to_utf8.map b/src/backend/utils/mb/Unicode/win1253_to_utf8.map
index 519a435d7507a0054b411b46f2a2f3d223c5eae9..d22b72f23f708b1e79988943f3e18bd3845d97b6 100644
--- a/src/backend/utils/mb/Unicode/win1253_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1253_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN1253[ 111 ] = {
+static const pg_local_to_utf LUmapWIN1253[ 111 ] = {
   {0x0080, 0xe282ac},
   {0x0082, 0xe2809a},
   {0x0083, 0xc692},
diff --git a/src/backend/utils/mb/Unicode/win1254_to_utf8.map b/src/backend/utils/mb/Unicode/win1254_to_utf8.map
index 370e4bc910100b77721534c19b9df2d1af5d4f82..3eff3d657a864fbe634c381dbd1657c8a717bce3 100644
--- a/src/backend/utils/mb/Unicode/win1254_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1254_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN1254[ 121 ] = {
+static const pg_local_to_utf LUmapWIN1254[ 121 ] = {
   {0x0080, 0xe282ac},
   {0x0082, 0xe2809a},
   {0x0083, 0xc692},
diff --git a/src/backend/utils/mb/Unicode/win1255_to_utf8.map b/src/backend/utils/mb/Unicode/win1255_to_utf8.map
index f5d7454c29f8bbd38e2da21751cc1d0a9c7c2acd..5be6b63e08d239dc7f3ed3357230b3031a386975 100644
--- a/src/backend/utils/mb/Unicode/win1255_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1255_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN1255[ 105 ] = {
+static const pg_local_to_utf LUmapWIN1255[ 105 ] = {
   {0x0080, 0xe282ac},
   {0x0082, 0xe2809a},
   {0x0083, 0xc692},
diff --git a/src/backend/utils/mb/Unicode/win1256_to_utf8.map b/src/backend/utils/mb/Unicode/win1256_to_utf8.map
index edf3ae9de306fece88f3161477ef7051d0495a9e..a61aa45ec26d2f920c7f9deaf3a0d173ff24930d 100644
--- a/src/backend/utils/mb/Unicode/win1256_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1256_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN1256[ 128 ] = {
+static const pg_local_to_utf LUmapWIN1256[ 128 ] = {
   {0x0080, 0xe282ac},
   {0x0081, 0xd9be},
   {0x0082, 0xe2809a},
diff --git a/src/backend/utils/mb/Unicode/win1257_to_utf8.map b/src/backend/utils/mb/Unicode/win1257_to_utf8.map
index 45d946d57c9c6f585a6b5e357d4814eb45778c3b..134f9726a859025cf95270b93b223f4df55142c6 100644
--- a/src/backend/utils/mb/Unicode/win1257_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1257_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN1257[ 116 ] = {
+static const pg_local_to_utf LUmapWIN1257[ 116 ] = {
   {0x0080, 0xe282ac},
   {0x0082, 0xe2809a},
   {0x0084, 0xe2809e},
diff --git a/src/backend/utils/mb/Unicode/win1258_to_utf8.map b/src/backend/utils/mb/Unicode/win1258_to_utf8.map
index ed8a9146fc1812c52a48387fbda114c5eac3e8b8..5807d112dc216a3257214770bba3b51c1c8b6856 100644
--- a/src/backend/utils/mb/Unicode/win1258_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win1258_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN1258[ 119 ] = {
+static const pg_local_to_utf LUmapWIN1258[ 119 ] = {
   {0x0080, 0xe282ac},
   {0x0082, 0xe2809a},
   {0x0083, 0xc692},
diff --git a/src/backend/utils/mb/Unicode/win866_to_utf8.map b/src/backend/utils/mb/Unicode/win866_to_utf8.map
index d2a377a537505545cf17aa11d9be17c5c71bbe40..411c043b277174799fe3138b5498f664f01fba10 100644
--- a/src/backend/utils/mb/Unicode/win866_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win866_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN866[ 128 ] = {
+static const pg_local_to_utf LUmapWIN866[ 128 ] = {
   {0x0080, 0xd090},
   {0x0081, 0xd091},
   {0x0082, 0xd092},
diff --git a/src/backend/utils/mb/Unicode/win874_to_utf8.map b/src/backend/utils/mb/Unicode/win874_to_utf8.map
index bd4eadbbb6a54654f034ebd96145f706f0e6efbc..1472b0f1e6fc941f118a52b93645cf89e8d7ac44 100644
--- a/src/backend/utils/mb/Unicode/win874_to_utf8.map
+++ b/src/backend/utils/mb/Unicode/win874_to_utf8.map
@@ -1,4 +1,4 @@
-static pg_local_to_utf LUmapWIN874[ 97 ] = {
+static const pg_local_to_utf LUmapWIN874[ 97 ] = {
   {0x0080, 0xe282ac},
   {0x0085, 0xe280a6},
   {0x0091, 0xe28098},
diff --git a/src/backend/utils/mb/conv.c b/src/backend/utils/mb/conv.c
index d5c5c74a9cee8a4c7b9ecd7efb60afae8eab18e1..f957b6efd320dd9c38c1a847fb54581b02614fdb 100644
--- a/src/backend/utils/mb/conv.c
+++ b/src/backend/utils/mb/conv.c
@@ -302,47 +302,62 @@ compare4(const void *p1, const void *p2)
 }
 
 /*
- * convert 32bit wide character to mutibye stream pointed to by iso
+ * store 32bit character representation into multibyte stream
  */
-static unsigned char *
-set_iso_code(unsigned char *iso, uint32 code)
+static inline unsigned char *
+store_coded_char(unsigned char *dest, uint32 code)
 {
 	if (code & 0xff000000)
-		*iso++ = code >> 24;
+		*dest++ = code >> 24;
 	if (code & 0x00ff0000)
-		*iso++ = (code & 0x00ff0000) >> 16;
+		*dest++ = code >> 16;
 	if (code & 0x0000ff00)
-		*iso++ = (code & 0x0000ff00) >> 8;
+		*dest++ = code >> 8;
 	if (code & 0x000000ff)
-		*iso++ = code & 0x000000ff;
-	return iso;
+		*dest++ = code;
+	return dest;
 }
 
 /*
  * UTF8 ---> local code
  *
- * utf: input UTF8 string (need not be null-terminated).
+ * utf: input string in UTF8 encoding (need not be null-terminated)
+ * len: length of input string (in bytes)
  * iso: pointer to the output area (must be large enough!)
- * map: the conversion map.
- * cmap: the conversion map for combined characters.
- *		  (optional)
- * size1: the size of the conversion map.
- * size2: the size of the conversion map for combined characters
- *		  (optional)
- * encoding: the PG identifier for the local encoding.
- * len: length of input string.
+		  (output string will be null-terminated)
+ * map: conversion map for single characters
+ * mapsize: number of entries in the conversion map
+ * cmap: conversion map for combined characters
+ *		  (optional, pass NULL if none)
+ * cmapsize: number of entries in the conversion map for combined characters
+ *		  (optional, pass 0 if none)
+ * conv_func: algorithmic encoding conversion function
+ *		  (optional, pass NULL if none)
+ * encoding: PG identifier for the local encoding
+ *
+ * For each character, the cmap (if provided) is consulted first; if no match,
+ * the map is consulted next; if still no match, the conv_func (if provided)
+ * is applied.  An error is raised if no match is found.
+ *
+ * See pg_wchar.h for more details about the data structures used here.
  */
 void
-UtfToLocal(const unsigned char *utf, unsigned char *iso,
-		   const pg_utf_to_local *map, const pg_utf_to_local_combined *cmap,
-		   int size1, int size2, int encoding, int len)
+UtfToLocal(const unsigned char *utf, int len,
+		   unsigned char *iso,
+		   const pg_utf_to_local *map, int mapsize,
+		   const pg_utf_to_local_combined *cmap, int cmapsize,
+		   utf_local_conversion_func conv_func,
+		   int encoding)
 {
 	uint32		iutf;
-	uint32		cutf[2];
-	uint32		code;
-	pg_utf_to_local *p;
-	pg_utf_to_local_combined *cp;
 	int			l;
+	const pg_utf_to_local *p;
+	const pg_utf_to_local_combined *cp;
+
+	if (!PG_VALID_ENCODING(encoding))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("invalid encoding number: %d", encoding)));
 
 	for (; len > 0; len -= l)
 	{
@@ -351,7 +366,6 @@ UtfToLocal(const unsigned char *utf, unsigned char *iso,
 			break;
 
 		l = pg_utf_mblen(utf);
-
 		if (len < l)
 			break;
 
@@ -360,11 +374,13 @@ UtfToLocal(const unsigned char *utf, unsigned char *iso,
 
 		if (l == 1)
 		{
-			/* ASCII case is easy */
+			/* ASCII case is easy, assume it's one-to-one conversion */
 			*iso++ = *utf++;
 			continue;
 		}
-		else if (l == 2)
+
+		/* collect coded char of length l */
+		if (l == 2)
 		{
 			iutf = *utf++ << 8;
 			iutf |= *utf++;
@@ -388,15 +404,14 @@ UtfToLocal(const unsigned char *utf, unsigned char *iso,
 			iutf = 0;			/* keep compiler quiet */
 		}
 
-		/*
-		 * first, try with combined map if possible
-		 */
+		/* First, try with combined map if possible */
 		if (cmap && len > l)
 		{
 			const unsigned char *utf_save = utf;
 			int			len_save = len;
 			int			l_save = l;
 
+			/* collect next character, same as above */
 			len -= l;
 
 			l = pg_utf_mblen(utf);
@@ -406,83 +421,83 @@ UtfToLocal(const unsigned char *utf, unsigned char *iso,
 			if (!pg_utf8_islegal(utf, l))
 				break;
 
-			cutf[0] = iutf;
-
-			if (l == 1)
+			/* We assume ASCII character cannot be in combined map */
+			if (l > 1)
 			{
-				if (len_save > 1)
+				uint32		iutf2;
+				uint32		cutf[2];
+
+				if (l == 2)
+				{
+					iutf2 = *utf++ << 8;
+					iutf2 |= *utf++;
+				}
+				else if (l == 3)
+				{
+					iutf2 = *utf++ << 16;
+					iutf2 |= *utf++ << 8;
+					iutf2 |= *utf++;
+				}
+				else if (l == 4)
+				{
+					iutf2 = *utf++ << 24;
+					iutf2 |= *utf++ << 16;
+					iutf2 |= *utf++ << 8;
+					iutf2 |= *utf++;
+				}
+				else
 				{
-					p = bsearch(&cutf[0], map, size1,
-								sizeof(pg_utf_to_local), compare1);
-					if (p == NULL)
-						report_untranslatable_char(PG_UTF8, encoding,
-							   (const char *) (utf_save - l_save), len_save);
-					iso = set_iso_code(iso, p->code);
+					elog(ERROR, "unsupported character length %d", l);
+					iutf2 = 0;	/* keep compiler quiet */
 				}
 
-				/* ASCII case is easy */
-				*iso++ = *utf++;
-				continue;
-			}
-			else if (l == 2)
-			{
-				iutf = *utf++ << 8;
-				iutf |= *utf++;
-			}
-			else if (l == 3)
-			{
-				iutf = *utf++ << 16;
-				iutf |= *utf++ << 8;
-				iutf |= *utf++;
-			}
-			else if (l == 4)
-			{
-				iutf = *utf++ << 24;
-				iutf |= *utf++ << 16;
-				iutf |= *utf++ << 8;
-				iutf |= *utf++;
-			}
-			else
-			{
-				elog(ERROR, "unsupported character length %d", l);
-				iutf = 0;		/* keep compiler quiet */
-			}
+				cutf[0] = iutf;
+				cutf[1] = iutf2;
 
-			cutf[1] = iutf;
-			cp = bsearch(cutf, cmap, size2,
-						 sizeof(pg_utf_to_local_combined), compare3);
-			if (cp)
-				code = cp->code;
-			else
-			{
-				/* not found in combined map. try with ordinary map */
-				p = bsearch(&cutf[0], map, size1,
-							sizeof(pg_utf_to_local), compare1);
-				if (p == NULL)
-					report_untranslatable_char(PG_UTF8, encoding,
-							   (const char *) (utf_save - l_save), len_save);
-				iso = set_iso_code(iso, p->code);
-
-				p = bsearch(&cutf[1], map, size1,
-							sizeof(pg_utf_to_local), compare1);
-				if (p == NULL)
-					report_untranslatable_char(PG_UTF8, encoding,
-											   (const char *) (utf - l), len);
-				code = p->code;
+				cp = bsearch(cutf, cmap, cmapsize,
+							 sizeof(pg_utf_to_local_combined), compare3);
+
+				if (cp)
+				{
+					iso = store_coded_char(iso, cp->code);
+					continue;
+				}
 			}
+
+			/* fail, so back up to reprocess second character next time */
+			utf = utf_save;
+			len = len_save;
+			l = l_save;
 		}
-		else	/* no cmap or no remaining data */
+
+		/* Now check ordinary map */
+		p = bsearch(&iutf, map, mapsize,
+					sizeof(pg_utf_to_local), compare1);
+
+		if (p)
 		{
-			p = bsearch(&iutf, map, size1,
-						sizeof(pg_utf_to_local), compare1);
-			if (p == NULL)
-				report_untranslatable_char(PG_UTF8, encoding,
-										   (const char *) (utf - l), len);
-			code = p->code;
+			iso = store_coded_char(iso, p->code);
+			continue;
+		}
+
+		/* if there's a conversion function, try that */
+		if (conv_func)
+		{
+			uint32		converted = (*conv_func) (iutf);
+
+			if (converted)
+			{
+				iso = store_coded_char(iso, converted);
+				continue;
+			}
 		}
-		iso = set_iso_code(iso, code);
+
+		/* failed to translate this character */
+		report_untranslatable_char(PG_UTF8, encoding,
+								   (const char *) (utf - l), len);
 	}
 
+	/* if we broke out of loop early, must be invalid input */
 	if (len > 0)
 		report_invalid_encoding(PG_UTF8, (const char *) utf, len);
 
@@ -492,26 +507,38 @@ UtfToLocal(const unsigned char *utf, unsigned char *iso,
 /*
  * local code ---> UTF8
  *
- * iso: input local string (need not be null-terminated).
+ * iso: input string in local encoding (need not be null-terminated)
+ * len: length of input string (in bytes)
  * utf: pointer to the output area (must be large enough!)
- * map: the conversion map.
- * cmap: the conversion map for combined characters.
- *		  (optional)
- * size1: the size of the conversion map.
- * size2: the size of the conversion map for combined characters
- *		  (optional)
- * encoding: the PG identifier for the local encoding.
- * len: length of input string.
+		  (output string will be null-terminated)
+ * map: conversion map for single characters
+ * mapsize: number of entries in the conversion map
+ * cmap: conversion map for combined characters
+ *		  (optional, pass NULL if none)
+ * cmapsize: number of entries in the conversion map for combined characters
+ *		  (optional, pass 0 if none)
+ * conv_func: algorithmic encoding conversion function
+ *		  (optional, pass NULL if none)
+ * encoding: PG identifier for the local encoding
+ *
+ * For each character, the map is consulted first; if no match, the cmap
+ * (if provided) is consulted next; if still no match, the conv_func
+ * (if provided) is applied.  An error is raised if no match is found.
+ *
+ * See pg_wchar.h for more details about the data structures used here.
  */
 void
-LocalToUtf(const unsigned char *iso, unsigned char *utf,
-		   const pg_local_to_utf *map, const pg_local_to_utf_combined *cmap,
-		   int size1, int size2, int encoding, int len)
+LocalToUtf(const unsigned char *iso, int len,
+		   unsigned char *utf,
+		   const pg_local_to_utf *map, int mapsize,
+		   const pg_local_to_utf_combined *cmap, int cmapsize,
+		   utf_local_conversion_func conv_func,
+		   int encoding)
 {
-	unsigned int iiso;
+	uint32		iiso;
 	int			l;
-	pg_local_to_utf *p;
-	pg_local_to_utf_combined *cp;
+	const pg_local_to_utf *p;
+	const pg_local_to_utf_combined *cp;
 
 	if (!PG_VALID_ENCODING(encoding))
 		ereport(ERROR,
@@ -526,7 +553,7 @@ LocalToUtf(const unsigned char *iso, unsigned char *utf,
 
 		if (!IS_HIGHBIT_SET(*iso))
 		{
-			/* ASCII case is easy */
+			/* ASCII case is easy, assume it's one-to-one conversion */
 			*utf++ = *iso++;
 			l = 1;
 			continue;
@@ -536,6 +563,7 @@ LocalToUtf(const unsigned char *iso, unsigned char *utf,
 		if (l < 0)
 			break;
 
+		/* collect coded char of length l */
 		if (l == 1)
 			iiso = *iso++;
 		else if (l == 2)
@@ -562,61 +590,48 @@ LocalToUtf(const unsigned char *iso, unsigned char *utf,
 			iiso = 0;			/* keep compiler quiet */
 		}
 
-		p = bsearch(&iiso, map, size1,
+		/* First check ordinary map */
+		p = bsearch(&iiso, map, mapsize,
 					sizeof(pg_local_to_utf), compare2);
 
-		if (p == NULL)
+		if (p)
 		{
-			/*
-			 * not found in the ordinary map. if there's a combined character
-			 * map, try with it
-			 */
-			if (cmap)
-			{
-				cp = bsearch(&iiso, cmap, size2,
-							 sizeof(pg_local_to_utf_combined), compare4);
+			utf = store_coded_char(utf, p->utf);
+			continue;
+		}
 
-				if (cp)
-				{
-					if (cp->utf1 & 0xff000000)
-						*utf++ = cp->utf1 >> 24;
-					if (cp->utf1 & 0x00ff0000)
-						*utf++ = (cp->utf1 & 0x00ff0000) >> 16;
-					if (cp->utf1 & 0x0000ff00)
-						*utf++ = (cp->utf1 & 0x0000ff00) >> 8;
-					if (cp->utf1 & 0x000000ff)
-						*utf++ = cp->utf1 & 0x000000ff;
-
-					if (cp->utf2 & 0xff000000)
-						*utf++ = cp->utf2 >> 24;
-					if (cp->utf2 & 0x00ff0000)
-						*utf++ = (cp->utf2 & 0x00ff0000) >> 16;
-					if (cp->utf2 & 0x0000ff00)
-						*utf++ = (cp->utf2 & 0x0000ff00) >> 8;
-					if (cp->utf2 & 0x000000ff)
-						*utf++ = cp->utf2 & 0x000000ff;
+		/* If there's a combined character map, try that */
+		if (cmap)
+		{
+			cp = bsearch(&iiso, cmap, cmapsize,
+						 sizeof(pg_local_to_utf_combined), compare4);
 
-					continue;
-				}
+			if (cp)
+			{
+				utf = store_coded_char(utf, cp->utf1);
+				utf = store_coded_char(utf, cp->utf2);
+				continue;
 			}
-
-			report_untranslatable_char(encoding, PG_UTF8,
-									   (const char *) (iso - l), len);
-
 		}
-		else
+
+		/* if there's a conversion function, try that */
+		if (conv_func)
 		{
-			if (p->utf & 0xff000000)
-				*utf++ = p->utf >> 24;
-			if (p->utf & 0x00ff0000)
-				*utf++ = (p->utf & 0x00ff0000) >> 16;
-			if (p->utf & 0x0000ff00)
-				*utf++ = (p->utf & 0x0000ff00) >> 8;
-			if (p->utf & 0x000000ff)
-				*utf++ = p->utf & 0x000000ff;
+			uint32		converted = (*conv_func) (iiso);
+
+			if (converted)
+			{
+				utf = store_coded_char(utf, converted);
+				continue;
+			}
 		}
+
+		/* failed to translate this character */
+		report_untranslatable_char(encoding, PG_UTF8,
+								   (const char *) (iso - l), len);
 	}
 
+	/* if we broke out of loop early, must be invalid input */
 	if (len > 0)
 		report_invalid_encoding(encoding, (const char *) iso, len);
 
diff --git a/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/big5.c b/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/big5.c
index 6861572655220a24d7e52d4456468d132387a2b2..1d9b10f8a7a9ab3db27514b3761c143bdcbb9e7e 100644
--- a/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/big5.c
+++ b/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/big5.c
@@ -22,7 +22,7 @@ typedef struct
 } codes_t;
 
 /* map Big5 Level 1 to CNS 11643-1992 Plane 1 */
-static codes_t big5Level1ToCnsPlane1[25] = {	/* range */
+static const codes_t big5Level1ToCnsPlane1[25] = {	/* range */
 	{0xA140, 0x2121},
 	{0xA1F6, 0x2258},
 	{0xA1F7, 0x2257},
@@ -51,7 +51,7 @@ static codes_t big5Level1ToCnsPlane1[25] = {	/* range */
 };
 
 /* map CNS 11643-1992 Plane 1 to Big5 Level 1 */
-static codes_t cnsPlane1ToBig5Level1[26] = {	/* range */
+static const codes_t cnsPlane1ToBig5Level1[26] = {	/* range */
 	{0x2121, 0xA140},
 	{0x2257, 0xA1F7},
 	{0x2258, 0xA1F6},
@@ -81,7 +81,7 @@ static codes_t cnsPlane1ToBig5Level1[26] = {	/* range */
 };
 
 /* map Big5 Level 2 to CNS 11643-1992 Plane 2 */
-static codes_t big5Level2ToCnsPlane2[48] = {	/* range */
+static const codes_t big5Level2ToCnsPlane2[48] = {	/* range */
 	{0xC940, 0x2121},
 	{0xc94a, 0x0000},
 	{0xC94B, 0x212B},
@@ -133,7 +133,7 @@ static codes_t big5Level2ToCnsPlane2[48] = {	/* range */
 };
 
 /* map CNS 11643-1992 Plane 2 to Big5 Level 2 */
-static codes_t cnsPlane2ToBig5Level2[49] = {	/* range */
+static const codes_t cnsPlane2ToBig5Level2[49] = {	/* range */
 	{0x2121, 0xC940},
 	{0x212B, 0xC94B},
 	{0x214C, 0xC9BE},
@@ -186,7 +186,7 @@ static codes_t cnsPlane2ToBig5Level2[49] = {	/* range */
 };
 
 /* Big Five Level 1 Correspondence to CNS 11643-1992 Plane 4 */
-static unsigned short b1c4[][2] = {
+static const unsigned short b1c4[][2] = {
 	{0xC879, 0x2123},
 	{0xC87B, 0x2124},
 	{0xC87D, 0x212A},
@@ -194,7 +194,7 @@ static unsigned short b1c4[][2] = {
 };
 
 /* Big Five Level 2 Correspondence to CNS 11643-1992 Plane 3 */
-static unsigned short b2c3[][2] = {
+static const unsigned short b2c3[][2] = {
 	{0xF9D6, 0x4337},
 	{0xF9D7, 0x4F50},
 	{0xF9D8, 0x444E},
@@ -205,7 +205,7 @@ static unsigned short b2c3[][2] = {
 };
 
 static unsigned short BinarySearchRange
-			(codes_t *array, int high, unsigned short code)
+			(const codes_t *array, int high, unsigned short code)
 {
 	int			low,
 				mid,
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c b/src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c
index 35e71a2ce5316c711f68ea6f45b0333a9551c0b6..a422a26d0083a6f71409076858ecf9aa08856085 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c
@@ -44,8 +44,11 @@ big5_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_BIG5, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapBIG5, NULL,
-			   sizeof(LUmapBIG5) / sizeof(pg_local_to_utf), 0, PG_BIG5, len);
+	LocalToUtf(src, len, dest,
+			   LUmapBIG5, lengthof(LUmapBIG5),
+			   NULL, 0,
+			   NULL,
+			   PG_BIG5);
 
 	PG_RETURN_VOID();
 }
@@ -59,8 +62,11 @@ utf8_to_big5(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_BIG5);
 
-	UtfToLocal(src, dest, ULmapBIG5, NULL,
-			   sizeof(ULmapBIG5) / sizeof(pg_utf_to_local), 0, PG_BIG5, len);
+	UtfToLocal(src, len, dest,
+			   ULmapBIG5, lengthof(ULmapBIG5),
+			   NULL, 0,
+			   NULL,
+			   PG_BIG5);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c b/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c
index 5d9e9150e446467a261919c04d68150948d8e724..f2b01e50a349488e0603ab712d3016b01466965c 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c
@@ -53,8 +53,11 @@ utf8_to_koi8r(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_KOI8R);
 
-	UtfToLocal(src, dest, ULmapKOI8R, NULL,
-			 sizeof(ULmapKOI8R) / sizeof(pg_utf_to_local), 0, PG_KOI8R, len);
+	UtfToLocal(src, len, dest,
+			   ULmapKOI8R, lengthof(ULmapKOI8R),
+			   NULL, 0,
+			   NULL,
+			   PG_KOI8R);
 
 	PG_RETURN_VOID();
 }
@@ -68,8 +71,11 @@ koi8r_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapKOI8R, NULL,
-			 sizeof(LUmapKOI8R) / sizeof(pg_local_to_utf), 0, PG_KOI8R, len);
+	LocalToUtf(src, len, dest,
+			   LUmapKOI8R, lengthof(LUmapKOI8R),
+			   NULL, 0,
+			   NULL,
+			   PG_KOI8R);
 
 	PG_RETURN_VOID();
 }
@@ -83,8 +89,11 @@ utf8_to_koi8u(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_KOI8U);
 
-	UtfToLocal(src, dest, ULmapKOI8U, NULL,
-			 sizeof(ULmapKOI8U) / sizeof(pg_utf_to_local), 0, PG_KOI8U, len);
+	UtfToLocal(src, len, dest,
+			   ULmapKOI8U, lengthof(ULmapKOI8U),
+			   NULL, 0,
+			   NULL,
+			   PG_KOI8U);
 
 	PG_RETURN_VOID();
 }
@@ -98,8 +107,11 @@ koi8u_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8U, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapKOI8U, NULL,
-			 sizeof(LUmapKOI8U) / sizeof(pg_local_to_utf), 0, PG_KOI8U, len);
+	LocalToUtf(src, len, dest,
+			   LUmapKOI8U, lengthof(LUmapKOI8U),
+			   NULL, 0,
+			   NULL,
+			   PG_KOI8U);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_euc2004/utf8_and_euc2004.c b/src/backend/utils/mb/conversion_procs/utf8_and_euc2004/utf8_and_euc2004.c
index 15d079cfa68003a5e0924c51457daa6d91f2aa1f..a49eda8838ced89768d59daa2e96cb183f6d0af6 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_euc2004/utf8_and_euc2004.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_euc2004/utf8_and_euc2004.c
@@ -46,10 +46,11 @@ euc_jis_2004_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_JIS_2004, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapEUC_JIS_2004, LUmapEUC_JIS_2004_combined,
-			   sizeof(LUmapEUC_JIS_2004) / sizeof(pg_local_to_utf),
-	   sizeof(LUmapEUC_JIS_2004_combined) / sizeof(pg_local_to_utf_combined),
-			   PG_EUC_JIS_2004, len);
+	LocalToUtf(src, len, dest,
+			   LUmapEUC_JIS_2004, lengthof(LUmapEUC_JIS_2004),
+			LUmapEUC_JIS_2004_combined, lengthof(LUmapEUC_JIS_2004_combined),
+			   NULL,
+			   PG_EUC_JIS_2004);
 
 	PG_RETURN_VOID();
 }
@@ -63,10 +64,11 @@ utf8_to_euc_jis_2004(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_JIS_2004);
 
-	UtfToLocal(src, dest, ULmapEUC_JIS_2004, ULmapEUC_JIS_2004_combined,
-			   sizeof(ULmapEUC_JIS_2004) / sizeof(pg_utf_to_local),
-	   sizeof(ULmapEUC_JIS_2004_combined) / sizeof(pg_utf_to_local_combined),
-			   PG_EUC_JIS_2004, len);
+	UtfToLocal(src, len, dest,
+			   ULmapEUC_JIS_2004, lengthof(ULmapEUC_JIS_2004),
+			ULmapEUC_JIS_2004_combined, lengthof(ULmapEUC_JIS_2004_combined),
+			   NULL,
+			   PG_EUC_JIS_2004);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c b/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c
index 7a321aa38ee6f5f48b3b8be6204a1d887d01a2a0..83329263179ebd6c574e11f47c502a1ce04c1cb1 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c
@@ -44,8 +44,11 @@ euc_cn_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_CN, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapEUC_CN, NULL,
-		   sizeof(LUmapEUC_CN) / sizeof(pg_local_to_utf), 0, PG_EUC_CN, len);
+	LocalToUtf(src, len, dest,
+			   LUmapEUC_CN, lengthof(LUmapEUC_CN),
+			   NULL, 0,
+			   NULL,
+			   PG_EUC_CN);
 
 	PG_RETURN_VOID();
 }
@@ -59,8 +62,11 @@ utf8_to_euc_cn(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_CN);
 
-	UtfToLocal(src, dest, ULmapEUC_CN, NULL,
-		   sizeof(ULmapEUC_CN) / sizeof(pg_utf_to_local), 0, PG_EUC_CN, len);
+	UtfToLocal(src, len, dest,
+			   ULmapEUC_CN, lengthof(ULmapEUC_CN),
+			   NULL, 0,
+			   NULL,
+			   PG_EUC_CN);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c b/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c
index bc6d6484359a7f15ab55271ffaeabb790a878bcb..6d9aeb4138bc9b9f5a4d7137dba8daee29ac0ac9 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c
@@ -44,8 +44,11 @@ euc_jp_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_JP, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapEUC_JP, NULL,
-		   sizeof(LUmapEUC_JP) / sizeof(pg_local_to_utf), 0, PG_EUC_JP, len);
+	LocalToUtf(src, len, dest,
+			   LUmapEUC_JP, lengthof(LUmapEUC_JP),
+			   NULL, 0,
+			   NULL,
+			   PG_EUC_JP);
 
 	PG_RETURN_VOID();
 }
@@ -59,8 +62,11 @@ utf8_to_euc_jp(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_JP);
 
-	UtfToLocal(src, dest, ULmapEUC_JP, NULL,
-		   sizeof(ULmapEUC_JP) / sizeof(pg_utf_to_local), 0, PG_EUC_JP, len);
+	UtfToLocal(src, len, dest,
+			   ULmapEUC_JP, lengthof(ULmapEUC_JP),
+			   NULL, 0,
+			   NULL,
+			   PG_EUC_JP);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c b/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c
index 7233f06a7dd507619d24925e3655d89a87a52c64..7edd09b1154c1a0bc5031454b7c3c632cec72e7a 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c
@@ -44,8 +44,11 @@ euc_kr_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_KR, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapEUC_KR, NULL,
-		   sizeof(LUmapEUC_KR) / sizeof(pg_local_to_utf), 0, PG_EUC_KR, len);
+	LocalToUtf(src, len, dest,
+			   LUmapEUC_KR, lengthof(LUmapEUC_KR),
+			   NULL, 0,
+			   NULL,
+			   PG_EUC_KR);
 
 	PG_RETURN_VOID();
 }
@@ -59,8 +62,11 @@ utf8_to_euc_kr(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_KR);
 
-	UtfToLocal(src, dest, ULmapEUC_KR, NULL,
-		   sizeof(ULmapEUC_KR) / sizeof(pg_utf_to_local), 0, PG_EUC_KR, len);
+	UtfToLocal(src, len, dest,
+			   ULmapEUC_KR, lengthof(ULmapEUC_KR),
+			   NULL, 0,
+			   NULL,
+			   PG_EUC_KR);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c b/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c
index 8bd093a59aa2068729230fd2d27782d4100b31bc..bc129993ba4ebfebfa628bbad1f55bfbcc9f9286 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c
@@ -44,8 +44,11 @@ euc_tw_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_TW, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapEUC_TW, NULL,
-		   sizeof(LUmapEUC_TW) / sizeof(pg_local_to_utf), 0, PG_EUC_TW, len);
+	LocalToUtf(src, len, dest,
+			   LUmapEUC_TW, lengthof(LUmapEUC_TW),
+			   NULL, 0,
+			   NULL,
+			   PG_EUC_TW);
 
 	PG_RETURN_VOID();
 }
@@ -59,8 +62,11 @@ utf8_to_euc_tw(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_TW);
 
-	UtfToLocal(src, dest, ULmapEUC_TW, NULL,
-		   sizeof(ULmapEUC_TW) / sizeof(pg_utf_to_local), 0, PG_EUC_TW, len);
+	UtfToLocal(src, len, dest,
+			   ULmapEUC_TW, lengthof(ULmapEUC_TW),
+			   NULL, 0,
+			   NULL,
+			   PG_EUC_TW);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c b/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c
index 4427fea41491a9ffae759c2c207a8373b687db37..b41e4a84b073f19ead1c124e00f6fc38dd848cc5 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c
@@ -44,8 +44,11 @@ gb18030_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_GB18030, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapGB18030, NULL,
-		 sizeof(LUmapGB18030) / sizeof(pg_local_to_utf), 0, PG_GB18030, len);
+	LocalToUtf(src, len, dest,
+			   LUmapGB18030, lengthof(LUmapGB18030),
+			   NULL, 0,
+			   NULL,
+			   PG_GB18030);
 
 	PG_RETURN_VOID();
 }
@@ -59,8 +62,11 @@ utf8_to_gb18030(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_GB18030);
 
-	UtfToLocal(src, dest, ULmapGB18030, NULL,
-		 sizeof(ULmapGB18030) / sizeof(pg_utf_to_local), 0, PG_GB18030, len);
+	UtfToLocal(src, len, dest,
+			   ULmapGB18030, lengthof(ULmapGB18030),
+			   NULL, 0,
+			   NULL,
+			   PG_GB18030);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c b/src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c
index 456cc04bb6333db1370eb9ddbf2ea1cde9735805..adc33a68e6b18687e36033703de1a9259a659306 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c
@@ -44,8 +44,11 @@ gbk_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_GBK, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapGBK, NULL,
-			   sizeof(LUmapGBK) / sizeof(pg_local_to_utf), 0, PG_GBK, len);
+	LocalToUtf(src, len, dest,
+			   LUmapGBK, lengthof(LUmapGBK),
+			   NULL, 0,
+			   NULL,
+			   PG_GBK);
 
 	PG_RETURN_VOID();
 }
@@ -59,8 +62,11 @@ utf8_to_gbk(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_GBK);
 
-	UtfToLocal(src, dest, ULmapGBK, NULL,
-			   sizeof(ULmapGBK) / sizeof(pg_utf_to_local), 0, PG_GBK, len);
+	UtfToLocal(src, len, dest,
+			   ULmapGBK, lengthof(ULmapGBK),
+			   NULL, 0,
+			   NULL,
+			   PG_GBK);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c b/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c
index 886e296d9aa63691f51436c53e932d625ec4ee6c..39e4ce12e5a525ff81087fe094607f01edf65263 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c
@@ -63,52 +63,52 @@ extern Datum utf8_to_iso8859(PG_FUNCTION_ARGS);
 typedef struct
 {
 	pg_enc		encoding;
-	pg_local_to_utf *map1;		/* to UTF8 map name */
-	pg_utf_to_local *map2;		/* from UTF8 map name */
+	const pg_local_to_utf *map1;	/* to UTF8 map name */
+	const pg_utf_to_local *map2;	/* from UTF8 map name */
 	int			size1;			/* size of map1 */
 	int			size2;			/* size of map2 */
 } pg_conv_map;
 
-static pg_conv_map maps[] = {
+static const pg_conv_map maps[] = {
 	{PG_LATIN2, LUmapISO8859_2, ULmapISO8859_2,
-		sizeof(LUmapISO8859_2) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_2) / sizeof(pg_utf_to_local)},	/* ISO-8859-2 Latin 2 */
+		lengthof(LUmapISO8859_2),
+	lengthof(ULmapISO8859_2)},	/* ISO-8859-2 Latin 2 */
 	{PG_LATIN3, LUmapISO8859_3, ULmapISO8859_3,
-		sizeof(LUmapISO8859_3) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_3) / sizeof(pg_utf_to_local)},	/* ISO-8859-3 Latin 3 */
+		lengthof(LUmapISO8859_3),
+	lengthof(ULmapISO8859_3)},	/* ISO-8859-3 Latin 3 */
 	{PG_LATIN4, LUmapISO8859_4, ULmapISO8859_4,
-		sizeof(LUmapISO8859_4) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_4) / sizeof(pg_utf_to_local)},	/* ISO-8859-4 Latin 4 */
+		lengthof(LUmapISO8859_4),
+	lengthof(ULmapISO8859_4)},	/* ISO-8859-4 Latin 4 */
 	{PG_LATIN5, LUmapISO8859_9, ULmapISO8859_9,
-		sizeof(LUmapISO8859_9) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_9) / sizeof(pg_utf_to_local)},	/* ISO-8859-9 Latin 5 */
+		lengthof(LUmapISO8859_9),
+	lengthof(ULmapISO8859_9)},	/* ISO-8859-9 Latin 5 */
 	{PG_LATIN6, LUmapISO8859_10, ULmapISO8859_10,
-		sizeof(LUmapISO8859_10) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_10) / sizeof(pg_utf_to_local)}, /* ISO-8859-10 Latin 6 */
+		lengthof(LUmapISO8859_10),
+	lengthof(ULmapISO8859_10)}, /* ISO-8859-10 Latin 6 */
 	{PG_LATIN7, LUmapISO8859_13, ULmapISO8859_13,
-		sizeof(LUmapISO8859_13) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_13) / sizeof(pg_utf_to_local)}, /* ISO-8859-13 Latin 7 */
+		lengthof(LUmapISO8859_13),
+	lengthof(ULmapISO8859_13)}, /* ISO-8859-13 Latin 7 */
 	{PG_LATIN8, LUmapISO8859_14, ULmapISO8859_14,
-		sizeof(LUmapISO8859_14) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_14) / sizeof(pg_utf_to_local)}, /* ISO-8859-14 Latin 8 */
+		lengthof(LUmapISO8859_14),
+	lengthof(ULmapISO8859_14)}, /* ISO-8859-14 Latin 8 */
 	{PG_LATIN9, LUmapISO8859_15, ULmapISO8859_15,
-		sizeof(LUmapISO8859_15) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_15) / sizeof(pg_utf_to_local)}, /* ISO-8859-15 Latin 9 */
+		lengthof(LUmapISO8859_15),
+	lengthof(ULmapISO8859_15)}, /* ISO-8859-15 Latin 9 */
 	{PG_LATIN10, LUmapISO8859_16, ULmapISO8859_16,
-		sizeof(LUmapISO8859_16) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_16) / sizeof(pg_utf_to_local)}, /* ISO-8859-16 Latin 10 */
+		lengthof(LUmapISO8859_16),
+	lengthof(ULmapISO8859_16)}, /* ISO-8859-16 Latin 10 */
 	{PG_ISO_8859_5, LUmapISO8859_5, ULmapISO8859_5,
-		sizeof(LUmapISO8859_5) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_5) / sizeof(pg_utf_to_local)},	/* ISO-8859-5 */
+		lengthof(LUmapISO8859_5),
+	lengthof(ULmapISO8859_5)},	/* ISO-8859-5 */
 	{PG_ISO_8859_6, LUmapISO8859_6, ULmapISO8859_6,
-		sizeof(LUmapISO8859_6) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_6) / sizeof(pg_utf_to_local)},	/* ISO-8859-6 */
+		lengthof(LUmapISO8859_6),
+	lengthof(ULmapISO8859_6)},	/* ISO-8859-6 */
 	{PG_ISO_8859_7, LUmapISO8859_7, ULmapISO8859_7,
-		sizeof(LUmapISO8859_7) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_7) / sizeof(pg_utf_to_local)},	/* ISO-8859-7 */
+		lengthof(LUmapISO8859_7),
+	lengthof(ULmapISO8859_7)},	/* ISO-8859-7 */
 	{PG_ISO_8859_8, LUmapISO8859_8, ULmapISO8859_8,
-		sizeof(LUmapISO8859_8) / sizeof(pg_local_to_utf),
-	sizeof(ULmapISO8859_8) / sizeof(pg_utf_to_local)},	/* ISO-8859-8 */
+		lengthof(LUmapISO8859_8),
+	lengthof(ULmapISO8859_8)},	/* ISO-8859-8 */
 };
 
 Datum
@@ -122,18 +122,23 @@ iso8859_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(-1, PG_UTF8);
 
-	for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
+	for (i = 0; i < lengthof(maps); i++)
 	{
 		if (encoding == maps[i].encoding)
 		{
-			LocalToUtf(src, dest, maps[i].map1, NULL, maps[i].size1, 0, encoding, len);
+			LocalToUtf(src, len, dest,
+					   maps[i].map1, maps[i].size1,
+					   NULL, 0,
+					   NULL,
+					   encoding);
 			PG_RETURN_VOID();
 		}
 	}
 
 	ereport(ERROR,
 			(errcode(ERRCODE_INTERNAL_ERROR),
-			 errmsg("unexpected encoding ID %d for ISO 8859 character sets", encoding)));
+			 errmsg("unexpected encoding ID %d for ISO 8859 character sets",
+					encoding)));
 
 	PG_RETURN_VOID();
 }
@@ -149,18 +154,23 @@ utf8_to_iso8859(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, -1);
 
-	for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
+	for (i = 0; i < lengthof(maps); i++)
 	{
 		if (encoding == maps[i].encoding)
 		{
-			UtfToLocal(src, dest, maps[i].map2, NULL, maps[i].size2, 0, encoding, len);
+			UtfToLocal(src, len, dest,
+					   maps[i].map2, maps[i].size2,
+					   NULL, 0,
+					   NULL,
+					   encoding);
 			PG_RETURN_VOID();
 		}
 	}
 
 	ereport(ERROR,
 			(errcode(ERRCODE_INTERNAL_ERROR),
-			 errmsg("unexpected encoding ID %d for ISO 8859 character sets", encoding)));
+			 errmsg("unexpected encoding ID %d for ISO 8859 character sets",
+					encoding)));
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c b/src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c
index 42c010585433ada1ecebff8ed6c9f898739f259f..15b49f24b1ead2155adffb1e4c70b65bc7d5f263 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c
@@ -44,8 +44,11 @@ johab_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_JOHAB, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapJOHAB, NULL,
-			 sizeof(LUmapJOHAB) / sizeof(pg_local_to_utf), 0, PG_JOHAB, len);
+	LocalToUtf(src, len, dest,
+			   LUmapJOHAB, lengthof(LUmapJOHAB),
+			   NULL, 0,
+			   NULL,
+			   PG_JOHAB);
 
 	PG_RETURN_VOID();
 }
@@ -59,8 +62,11 @@ utf8_to_johab(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_JOHAB);
 
-	UtfToLocal(src, dest, ULmapJOHAB, NULL,
-			 sizeof(ULmapJOHAB) / sizeof(pg_utf_to_local), 0, PG_JOHAB, len);
+	UtfToLocal(src, len, dest,
+			   ULmapJOHAB, lengthof(ULmapJOHAB),
+			   NULL, 0,
+			   NULL,
+			   PG_JOHAB);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c b/src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c
index 7f7e7b0b0b6903f2f1a3f93f36574942f9ea86a5..7a3281b640b0d47205c893d78c2aee3e925aa30e 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c
@@ -44,8 +44,11 @@ sjis_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_SJIS, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapSJIS, NULL,
-			   sizeof(LUmapSJIS) / sizeof(pg_local_to_utf), 0, PG_SJIS, len);
+	LocalToUtf(src, len, dest,
+			   LUmapSJIS, lengthof(LUmapSJIS),
+			   NULL, 0,
+			   NULL,
+			   PG_SJIS);
 
 	PG_RETURN_VOID();
 }
@@ -59,8 +62,11 @@ utf8_to_sjis(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_SJIS);
 
-	UtfToLocal(src, dest, ULmapSJIS, NULL,
-			   sizeof(ULmapSJIS) / sizeof(pg_utf_to_local), 0, PG_SJIS, len);
+	UtfToLocal(src, len, dest,
+			   ULmapSJIS, lengthof(ULmapSJIS),
+			   NULL, 0,
+			   NULL,
+			   PG_SJIS);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/utf8_and_sjis2004.c b/src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/utf8_and_sjis2004.c
index 2acdcacaaa6cbf7382f5b162a96f9f59c83d5ba3..29f4256fe01b0d2181dd637a5f3fb601280cb84a 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/utf8_and_sjis2004.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/utf8_and_sjis2004.c
@@ -46,10 +46,11 @@ shift_jis_2004_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_SHIFT_JIS_2004, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapSHIFT_JIS_2004, LUmapSHIFT_JIS_2004_combined,
-			   sizeof(LUmapSHIFT_JIS_2004) / sizeof(pg_local_to_utf),
-	 sizeof(LUmapSHIFT_JIS_2004_combined) / sizeof(pg_local_to_utf_combined),
-			   PG_SHIFT_JIS_2004, len);
+	LocalToUtf(src, len, dest,
+			   LUmapSHIFT_JIS_2004, lengthof(LUmapSHIFT_JIS_2004),
+		LUmapSHIFT_JIS_2004_combined, lengthof(LUmapSHIFT_JIS_2004_combined),
+			   NULL,
+			   PG_SHIFT_JIS_2004);
 
 	PG_RETURN_VOID();
 }
@@ -63,10 +64,11 @@ utf8_to_shift_jis_2004(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_SHIFT_JIS_2004);
 
-	UtfToLocal(src, dest, ULmapSHIFT_JIS_2004, ULmapSHIFT_JIS_2004_combined,
-			   sizeof(ULmapSHIFT_JIS_2004) / sizeof(pg_utf_to_local),
-	 sizeof(ULmapSHIFT_JIS_2004_combined) / sizeof(pg_utf_to_local_combined),
-			   PG_SHIFT_JIS_2004, len);
+	UtfToLocal(src, len, dest,
+			   ULmapSHIFT_JIS_2004, lengthof(ULmapSHIFT_JIS_2004),
+		ULmapSHIFT_JIS_2004_combined, lengthof(ULmapSHIFT_JIS_2004_combined),
+			   NULL,
+			   PG_SHIFT_JIS_2004);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c b/src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c
index 72b72d87bb776373ffcff00a9ae422f78330be8e..984980935d2f2efa5b6062d2e6af6c13a32aa8dd 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c
@@ -44,8 +44,11 @@ uhc_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UHC, PG_UTF8);
 
-	LocalToUtf(src, dest, LUmapUHC, NULL,
-			   sizeof(LUmapUHC) / sizeof(pg_local_to_utf), 0, PG_UHC, len);
+	LocalToUtf(src, len, dest,
+			   LUmapUHC, lengthof(LUmapUHC),
+			   NULL, 0,
+			   NULL,
+			   PG_UHC);
 
 	PG_RETURN_VOID();
 }
@@ -59,8 +62,11 @@ utf8_to_uhc(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_UHC);
 
-	UtfToLocal(src, dest, ULmapUHC, NULL,
-			   sizeof(ULmapUHC) / sizeof(pg_utf_to_local), 0, PG_UHC, len);
+	UtfToLocal(src, len, dest,
+			   ULmapUHC, lengthof(ULmapUHC),
+			   NULL, 0,
+			   NULL,
+			   PG_UHC);
 
 	PG_RETURN_VOID();
 }
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c b/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c
index 97d890206fbdea03e79a2a953ec7333c706466a4..c2a4ec35f7f7a00c65d8f949f5c199f9ef5a532b 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c
@@ -59,46 +59,46 @@ extern Datum utf8_to_win(PG_FUNCTION_ARGS);
 typedef struct
 {
 	pg_enc		encoding;
-	pg_local_to_utf *map1;		/* to UTF8 map name */
-	pg_utf_to_local *map2;		/* from UTF8 map name */
+	const pg_local_to_utf *map1;	/* to UTF8 map name */
+	const pg_utf_to_local *map2;	/* from UTF8 map name */
 	int			size1;			/* size of map1 */
 	int			size2;			/* size of map2 */
 } pg_conv_map;
 
-static pg_conv_map maps[] = {
+static const pg_conv_map maps[] = {
 	{PG_WIN866, LUmapWIN866, ULmapWIN866,
-		sizeof(LUmapWIN866) / sizeof(pg_local_to_utf),
-	sizeof(ULmapWIN866) / sizeof(pg_utf_to_local)},
+		lengthof(LUmapWIN866),
+	lengthof(ULmapWIN866)},
 	{PG_WIN874, LUmapWIN874, ULmapWIN874,
-		sizeof(LUmapWIN874) / sizeof(pg_local_to_utf),
-	sizeof(ULmapWIN874) / sizeof(pg_utf_to_local)},
+		lengthof(LUmapWIN874),
+	lengthof(ULmapWIN874)},
 	{PG_WIN1250, LUmapWIN1250, ULmapWIN1250,
-		sizeof(LUmapWIN1250) / sizeof(pg_local_to_utf),
-	sizeof(ULmapWIN1250) / sizeof(pg_utf_to_local)},
+		lengthof(LUmapWIN1250),
+	lengthof(ULmapWIN1250)},
 	{PG_WIN1251, LUmapWIN1251, ULmapWIN1251,
-		sizeof(LUmapWIN1251) / sizeof(pg_local_to_utf),
-	sizeof(ULmapWIN1251) / sizeof(pg_utf_to_local)},
+		lengthof(LUmapWIN1251),
+	lengthof(ULmapWIN1251)},
 	{PG_WIN1252, LUmapWIN1252, ULmapWIN1252,
-		sizeof(LUmapWIN1252) / sizeof(pg_local_to_utf),
-	sizeof(ULmapWIN1252) / sizeof(pg_utf_to_local)},
+		lengthof(LUmapWIN1252),
+	lengthof(ULmapWIN1252)},
 	{PG_WIN1253, LUmapWIN1253, ULmapWIN1253,
-		sizeof(LUmapWIN1253) / sizeof(pg_local_to_utf),
-	sizeof(ULmapWIN1253) / sizeof(pg_utf_to_local)},
+		lengthof(LUmapWIN1253),
+	lengthof(ULmapWIN1253)},
 	{PG_WIN1254, LUmapWIN1254, ULmapWIN1254,
-		sizeof(LUmapWIN1254) / sizeof(pg_local_to_utf),
-	sizeof(ULmapWIN1254) / sizeof(pg_utf_to_local)},
+		lengthof(LUmapWIN1254),
+	lengthof(ULmapWIN1254)},
 	{PG_WIN1255, LUmapWIN1255, ULmapWIN1255,
-		sizeof(LUmapWIN1255) / sizeof(pg_local_to_utf),
-	sizeof(ULmapWIN1255) / sizeof(pg_utf_to_local)},
+		lengthof(LUmapWIN1255),
+	lengthof(ULmapWIN1255)},
 	{PG_WIN1256, LUmapWIN1256, ULmapWIN1256,
-		sizeof(LUmapWIN1256) / sizeof(pg_local_to_utf),
-	sizeof(ULmapWIN1256) / sizeof(pg_utf_to_local)},
+		lengthof(LUmapWIN1256),
+	lengthof(ULmapWIN1256)},
 	{PG_WIN1257, LUmapWIN1257, ULmapWIN1257,
-		sizeof(LUmapWIN1257) / sizeof(pg_local_to_utf),
-	sizeof(ULmapWIN1257) / sizeof(pg_utf_to_local)},
+		lengthof(LUmapWIN1257),
+	lengthof(ULmapWIN1257)},
 	{PG_WIN1258, LUmapWIN1258, ULmapWIN1258,
-		sizeof(LUmapWIN1258) / sizeof(pg_local_to_utf),
-	sizeof(ULmapWIN1258) / sizeof(pg_utf_to_local)},
+		lengthof(LUmapWIN1258),
+	lengthof(ULmapWIN1258)},
 };
 
 Datum
@@ -112,18 +112,23 @@ win_to_utf8(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(-1, PG_UTF8);
 
-	for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
+	for (i = 0; i < lengthof(maps); i++)
 	{
 		if (encoding == maps[i].encoding)
 		{
-			LocalToUtf(src, dest, maps[i].map1, NULL, maps[i].size1, 0, encoding, len);
+			LocalToUtf(src, len, dest,
+					   maps[i].map1, maps[i].size1,
+					   NULL, 0,
+					   NULL,
+					   encoding);
 			PG_RETURN_VOID();
 		}
 	}
 
 	ereport(ERROR,
 			(errcode(ERRCODE_INTERNAL_ERROR),
-	  errmsg("unexpected encoding ID %d for WIN character sets", encoding)));
+			 errmsg("unexpected encoding ID %d for WIN character sets",
+					encoding)));
 
 	PG_RETURN_VOID();
 }
@@ -139,18 +144,23 @@ utf8_to_win(PG_FUNCTION_ARGS)
 
 	CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, -1);
 
-	for (i = 0; i < sizeof(maps) / sizeof(pg_conv_map); i++)
+	for (i = 0; i < lengthof(maps); i++)
 	{
 		if (encoding == maps[i].encoding)
 		{
-			UtfToLocal(src, dest, maps[i].map2, NULL, maps[i].size2, 0, encoding, len);
+			UtfToLocal(src, len, dest,
+					   maps[i].map2, maps[i].size2,
+					   NULL, 0,
+					   NULL,
+					   encoding);
 			PG_RETURN_VOID();
 		}
 	}
 
 	ereport(ERROR,
 			(errcode(ERRCODE_INTERNAL_ERROR),
-	  errmsg("unexpected encoding ID %d for WIN character sets", encoding)));
+			 errmsg("unexpected encoding ID %d for WIN character sets",
+					encoding)));
 
 	PG_RETURN_VOID();
 }
diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h
index f7222fc1779eb124d88569886235123360ae6c65..f8b0edc678e2124e8bb48eac3b240ea280669bf6 100644
--- a/src/include/mb/pg_wchar.h
+++ b/src/include/mb/pg_wchar.h
@@ -366,9 +366,16 @@ typedef struct
 extern const pg_wchar_tbl pg_wchar_table[];
 
 /*
+ * Data structures for conversions between UTF-8 and other encodings
+ * (UtfToLocal() and LocalToUtf()).  In these data structures, characters of
+ * either encoding are represented by uint32 words; hence we can only support
+ * characters up to 4 bytes long.  For example, the byte sequence 0xC2 0x89
+ * would be represented by 0x0000C289, and 0xE8 0xA2 0xB4 by 0x00E8A2B4.
+ *
+ * Maps are arrays of these structs, which must be in order by the lookup key
+ * (so that bsearch() can be used).
+ *
  * UTF-8 to local code conversion map
- * Note that we limit the max length of UTF-8 to 4 bytes,
- * which is UCS-4 00010000-001FFFFF range.
  */
 typedef struct
 {
@@ -386,7 +393,7 @@ typedef struct
 } pg_local_to_utf;
 
 /*
- * UTF-8 to local code conversion map(combined characters)
+ * UTF-8 to local code conversion map (for combined characters)
  */
 typedef struct
 {
@@ -396,7 +403,7 @@ typedef struct
 } pg_utf_to_local_combined;
 
 /*
- * local code to UTF-8 conversion map(combined characters)
+ * local code to UTF-8 conversion map (for combined characters)
  */
 typedef struct
 {
@@ -405,6 +412,13 @@ typedef struct
 	uint32		utf2;			/* UTF-8 code 2 */
 } pg_local_to_utf_combined;
 
+/*
+ * callback function for algorithmic encoding conversions (in either direction)
+ *
+ * if function returns zero, it does not know how to convert the code
+ */
+typedef uint32 (*utf_local_conversion_func) (uint32 code);
+
 /*
  * Support macro for encoding conversion functions to validate their
  * arguments.  (This could be made more compact if we included fmgr.h
@@ -494,13 +508,18 @@ extern char *pg_server_to_any(const char *s, int len, int encoding);
 extern unsigned short BIG5toCNS(unsigned short big5, unsigned char *lc);
 extern unsigned short CNStoBIG5(unsigned short cns, unsigned char lc);
 
-extern void LocalToUtf(const unsigned char *iso, unsigned char *utf,
-		   const pg_local_to_utf *map, const pg_local_to_utf_combined *cmap,
-		   int size1, int size2, int encoding, int len);
-
-extern void UtfToLocal(const unsigned char *utf, unsigned char *iso,
-		   const pg_utf_to_local *map, const pg_utf_to_local_combined *cmap,
-		   int size1, int size2, int encoding, int len);
+extern void UtfToLocal(const unsigned char *utf, int len,
+		   unsigned char *iso,
+		   const pg_utf_to_local *map, int mapsize,
+		   const pg_utf_to_local_combined *cmap, int cmapsize,
+		   utf_local_conversion_func conv_func,
+		   int encoding);
+extern void LocalToUtf(const unsigned char *iso, int len,
+		   unsigned char *utf,
+		   const pg_local_to_utf *map, int mapsize,
+		   const pg_local_to_utf_combined *cmap, int cmapsize,
+		   utf_local_conversion_func conv_func,
+		   int encoding);
 
 extern bool pg_verifymbstr(const char *mbstr, int len, bool noError);
 extern bool pg_verify_mbstr(int encoding, const char *mbstr, int len,