Index: src/bin/psql/describe.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/psql/describe.c,v
retrieving revision 1.179
diff -c -c -r1.179 describe.c
*** src/bin/psql/describe.c	14 Jul 2008 23:13:04 -0000	1.179
--- src/bin/psql/describe.c	15 Jul 2008 03:06:24 -0000
***************
*** 811,817 ****
  	printTableContent cont;
  	int			i;
  	char	   *view_def = NULL;
! 	char	   *headers[5];
  	char	  **modifiers = NULL;
  	char	  **ptr;
  	PQExpBufferData title;
--- 811,818 ----
  	printTableContent cont;
  	int			i;
  	char	   *view_def = NULL;
! 	char	   *headers[6];
! 	char	  **seq_values = NULL;
  	char	  **modifiers = NULL;
  	char	  **ptr;
  	PQExpBufferData title;
***************
*** 869,874 ****
--- 870,904 ----
  	tableinfo.tablespace = (pset.sversion >= 80000) ?
  		atooid(PQgetvalue(res, 0, 6)) : 0;
  	PQclear(res);
+ 	
+ 	/*
+ 	 * This is used to get the values of a sequence and store it in an
+ 	 * array that will be used later.
+ 	 */
+ 	if (tableinfo.relkind == 'S')
+ 	{
+ 		PGresult   *result;
+ 		
+ #define SEQ_NUM_COLS 10
+ 		printfPQExpBuffer(&buf,
+ 				"SELECT sequence_name, last_value, \n"
+ 				"		start_value, increment_by, \n"
+ 				"		max_value, min_value, cache_value, \n"
+ 				"		log_cnt, is_cycled, is_called \n"
+ 				"FROM \"%s\"",
+ 				relationname);
+ 		
+ 		result = PSQLexec(buf.data, false);
+ 		if (!result)
+ 			goto error_return;
+ 		
+ 		seq_values = pg_malloc_zero((SEQ_NUM_COLS+1) * sizeof(*seq_values));
+ 		
+ 		for (i = 0; i < SEQ_NUM_COLS; i++) 
+ 			seq_values[i] = pg_strdup(PQgetvalue(result, 0, i));
+ 		
+ 		PQclear(result);
+ 	}
  
  	/* Get column info (index requires additional checks) */
  	printfPQExpBuffer(&buf, "SELECT a.attname,");
***************
*** 932,938 ****
  	}
  
  	/* Set the number of columns, and their names */
! 	cols = 2;
  	headers[0] = gettext_noop("Column");
  	headers[1] = gettext_noop("Type");
  
--- 962,968 ----
  	}
  
  	/* Set the number of columns, and their names */
! 	cols += 2;
  	headers[0] = gettext_noop("Column");
  	headers[1] = gettext_noop("Type");
  
***************
*** 943,948 ****
--- 973,981 ----
  		modifiers = pg_malloc_zero((numrows + 1) * sizeof(*modifiers));
  	}
  
+ 	if (tableinfo.relkind == 'S')
+ 		headers[cols++] = gettext_noop("Value");
+ 		
  	if (verbose)
  	{
  		headers[cols++] = gettext_noop("Storage");
***************
*** 980,986 ****
  
  		/* Type */
  		printTableAddCell(&cont, PQgetvalue(res, i, 1), false);
! 
  		/* Extra: not null and default */
  		if (show_modifiers)
  		{
--- 1013,1023 ----
  
  		/* Type */
  		printTableAddCell(&cont, PQgetvalue(res, i, 1), false);
! 		
! 		/* A special 'Value' column for sequences */
! 		if (tableinfo.relkind == 'S')
! 			printTableAddCell(&cont, seq_values[i], false);
! 		
  		/* Extra: not null and default */
  		if (show_modifiers)
  		{
***************
*** 1543,1549 ****
  	termPQExpBuffer(&buf);
  	termPQExpBuffer(&title);
  	termPQExpBuffer(&tmpbuf);
! 
  	if (show_modifiers)
  	{
  		for (ptr = modifiers; *ptr; ptr++)
--- 1580,1593 ----
  	termPQExpBuffer(&buf);
  	termPQExpBuffer(&title);
  	termPQExpBuffer(&tmpbuf);
! 	
! 	if (tableinfo.relkind == 'S')
! 	{
! 		for (ptr = seq_values; *ptr; ptr++)
! 			free(*ptr);
! 		free(seq_values);
! 	}
!     
  	if (show_modifiers)
  	{
  		for (ptr = modifiers; *ptr; ptr++)
