commit 817d377437f2e23da0189df7e3417a5956e3053a
Author: JuergenPurtz <juergen@purtz.de>
Date:   Fri Dec 22 17:21:48 2017 +0100

    sort SQLCODE within class/section for generated output

diff --git a/doc/src/sgml/generate-errcodes-table.pl b/doc/src/sgml/generate-errcodes-table.pl
index 01fc616..21779a5 100644
--- a/doc/src/sgml/generate-errcodes-table.pl
+++ b/doc/src/sgml/generate-errcodes-table.pl
@@ -6,6 +6,10 @@
 use warnings;
 use strict;
 
+# A hash to store those lines, which belong to the same class/section, 
+# with the intention to sort them before printing
+my %linesInClass;
+
 print
   "<!-- autogenerated from src/backend/utils/errcodes.txt, do not edit -->\n";
 
@@ -23,6 +27,9 @@ while (<$errcodes>)
 	if (/^Section:/)
 	{
 
+		# print previous section
+		generateLines();
+
 		# Remove the Section: string
 		s/^Section: //;
 
@@ -49,11 +56,24 @@ while (<$errcodes>)
 	# Skip lines without PL/pgSQL condition names
 	next unless defined($condition_name);
 
-	print "\n";
-	print "<row>\n";
-	print "<entry><literal>$sqlstate</literal></entry>\n";
-	print "<entry><symbol>$condition_name</symbol></entry>\n";
-	print "</row>\n";
+	# store sqlcode and text
+	$linesInClass{$1} = $4;
+
 }
 
+# last section
+generateLines();
+
 close $errcodes;
+
+# Sort lines according to SQLCODE, generate output, and re-initialize the hash
+sub generateLines {
+	foreach my $sqlstate ( sort keys %linesInClass ) {
+		print "\n";
+		print "<row>\n";
+		print "<entry><literal>$sqlstate</literal></entry>\n";
+		print "<entry><symbol>$linesInClass{$sqlstate}</symbol></entry>\n";
+		print "</row>\n";
+	}
+	undef %linesInClass;
+}