mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	Fix version numbering foulups exposed by 10.1.
configure computed PG_VERSION_NUM incorrectly. (Coulda sworn I tested that logic back when, but it had an obvious thinko.) pg_upgrade had not been taught about the new dispensation with just one part in the major version number. Both things accidentally failed to fail with 10.0, but with 10.1 we got the wrong results. Per buildfarm.
This commit is contained in:
		
							parent
							
								
									92d830f4bf
								
							
						
					
					
						commit
						d0c80c17f1
					
				
							
								
								
									
										2
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @ -16807,7 +16807,7 @@ _ACEOF | |||||||
| # awk -F is a regex on some platforms, and not on others, so make "." a tab | # awk -F is a regex on some platforms, and not on others, so make "." a tab | ||||||
| PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/[A-Za-z].*$//' | | PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/[A-Za-z].*$//' | | ||||||
| tr '.' '	' | | tr '.' '	' | | ||||||
| $AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`" | $AWK '{printf "%d%04d", $1, $2}'`" | ||||||
| 
 | 
 | ||||||
| cat >>confdefs.h <<_ACEOF | cat >>confdefs.h <<_ACEOF | ||||||
| #define PG_VERSION_NUM $PG_VERSION_NUM | #define PG_VERSION_NUM $PG_VERSION_NUM | ||||||
|  | |||||||
| @ -2181,7 +2181,7 @@ AC_DEFINE_UNQUOTED(PG_VERSION_STR, | |||||||
| # awk -F is a regex on some platforms, and not on others, so make "." a tab | # awk -F is a regex on some platforms, and not on others, so make "." a tab | ||||||
| [PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/[A-Za-z].*$//' | | [PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/[A-Za-z].*$//' | | ||||||
| tr '.' '	' | | tr '.' '	' | | ||||||
| $AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`"] | $AWK '{printf "%d%04d", $1, $2}'`"] | ||||||
| AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number]) | AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number]) | ||||||
| AC_SUBST(PG_VERSION_NUM) | AC_SUBST(PG_VERSION_NUM) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -26,7 +26,7 @@ static int	win32_check_directory_write_permissions(void); | |||||||
| /*
 | /*
 | ||||||
|  * get_bin_version |  * get_bin_version | ||||||
|  * |  * | ||||||
|  *	Fetch versions of binaries for cluster. |  *	Fetch major version of binaries for cluster. | ||||||
|  */ |  */ | ||||||
| static void | static void | ||||||
| get_bin_version(ClusterInfo *cluster) | get_bin_version(ClusterInfo *cluster) | ||||||
| @ -34,8 +34,8 @@ get_bin_version(ClusterInfo *cluster) | |||||||
| 	char		cmd[MAXPGPATH], | 	char		cmd[MAXPGPATH], | ||||||
| 				cmd_output[MAX_STRING]; | 				cmd_output[MAX_STRING]; | ||||||
| 	FILE	   *output; | 	FILE	   *output; | ||||||
| 	int			pre_dot = 0, | 	int			v1 = 0, | ||||||
| 				post_dot = 0; | 				v2 = 0; | ||||||
| 
 | 
 | ||||||
| 	snprintf(cmd, sizeof(cmd), "\"%s/pg_ctl\" --version", cluster->bindir); | 	snprintf(cmd, sizeof(cmd), "\"%s/pg_ctl\" --version", cluster->bindir); | ||||||
| 
 | 
 | ||||||
| @ -46,14 +46,19 @@ get_bin_version(ClusterInfo *cluster) | |||||||
| 
 | 
 | ||||||
| 	pclose(output); | 	pclose(output); | ||||||
| 
 | 
 | ||||||
| 	/* Remove trailing newline */ | 	if (sscanf(cmd_output, "%*s %*s %d.%d", &v1, &v2) < 1) | ||||||
| 	if (strchr(cmd_output, '\n') != NULL) |  | ||||||
| 		*strchr(cmd_output, '\n') = '\0'; |  | ||||||
| 
 |  | ||||||
| 	if (sscanf(cmd_output, "%*s %*s %d.%d", &pre_dot, &post_dot) < 1) |  | ||||||
| 		pg_fatal("could not get pg_ctl version output from %s\n", cmd); | 		pg_fatal("could not get pg_ctl version output from %s\n", cmd); | ||||||
| 
 | 
 | ||||||
| 	cluster->bin_version = (pre_dot * 100 + post_dot) * 100; | 	if (v1 < 10) | ||||||
|  | 	{ | ||||||
|  | 		/* old style, e.g. 9.6.1 */ | ||||||
|  | 		cluster->bin_version = v1 * 10000 + v2 * 100; | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		/* new style, e.g. 10.1 */ | ||||||
|  | 		cluster->bin_version = v1 * 10000; | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -156,8 +156,8 @@ get_major_server_version(ClusterInfo *cluster) | |||||||
| { | { | ||||||
| 	FILE	   *version_fd; | 	FILE	   *version_fd; | ||||||
| 	char		ver_filename[MAXPGPATH]; | 	char		ver_filename[MAXPGPATH]; | ||||||
| 	int			integer_version = 0; | 	int			v1 = 0, | ||||||
| 	int			fractional_version = 0; | 				v2 = 0; | ||||||
| 
 | 
 | ||||||
| 	snprintf(ver_filename, sizeof(ver_filename), "%s/PG_VERSION", | 	snprintf(ver_filename, sizeof(ver_filename), "%s/PG_VERSION", | ||||||
| 			 cluster->pgdata); | 			 cluster->pgdata); | ||||||
| @ -165,13 +165,21 @@ get_major_server_version(ClusterInfo *cluster) | |||||||
| 		pg_fatal("could not open version file: %s\n", ver_filename); | 		pg_fatal("could not open version file: %s\n", ver_filename); | ||||||
| 
 | 
 | ||||||
| 	if (fscanf(version_fd, "%63s", cluster->major_version_str) == 0 || | 	if (fscanf(version_fd, "%63s", cluster->major_version_str) == 0 || | ||||||
| 		sscanf(cluster->major_version_str, "%d.%d", &integer_version, | 		sscanf(cluster->major_version_str, "%d.%d", &v1, &v2) < 1) | ||||||
| 			   &fractional_version) < 1) |  | ||||||
| 		pg_fatal("could not parse PG_VERSION file from %s\n", cluster->pgdata); | 		pg_fatal("could not parse PG_VERSION file from %s\n", cluster->pgdata); | ||||||
| 
 | 
 | ||||||
| 	fclose(version_fd); | 	fclose(version_fd); | ||||||
| 
 | 
 | ||||||
| 	return (100 * integer_version + fractional_version) * 100; | 	if (v1 < 10) | ||||||
|  | 	{ | ||||||
|  | 		/* old style, e.g. 9.6.1 */ | ||||||
|  | 		return v1 * 10000 + v2 * 100; | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		/* new style, e.g. 10.1 */ | ||||||
|  | 		return v1 * 10000; | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user