Bruce Momjian wrote:

I am thinking we just add another column to the \d display for sequences
showing the current value.

---------------------------------------------------------------------------

As suggested in the previous mails, I tried to use the following to display the seq. value.
select last_value from <seq>.

However, it was not possible to display the seq. value using this.
Hence, I made a small change in the currval() function, so that it retrieves the last_value
even if the the value is not cached.

I hope this patch will be more suitable for this issue. Pl. look at the patch.

Thanks
Dhanaraj

*** ./src/backend/commands/sequence.c.orig	Tue May  2 14:51:03 2006
--- ./src/backend/commands/sequence.c	Tue May  9 13:52:38 2006
***************
*** 605,610 ****
--- 605,612 ----
  	int64		result;
  	SeqTable	elm;
  	Relation	seqrel;
+         Form_pg_sequence seq;
+         Buffer          buf;
  
  	/* open and AccessShareLock sequence */
  	init_sequence(relid, &elm, &seqrel);
***************
*** 616,632 ****
  				 errmsg("permission denied for sequence %s",
  						RelationGetRelationName(seqrel))));
  
! 	if (elm->increment == 0)	/* nextval/read_info were not called */
! 		ereport(ERROR,
! 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
! 				 errmsg("currval of sequence \"%s\" is not yet defined in this session",
! 						RelationGetRelationName(seqrel))));
  
! 	result = elm->last;
  
! 	relation_close(seqrel, NoLock);
  
! 	PG_RETURN_INT64(result);
  }
  
  Datum
--- 618,641 ----
  				 errmsg("permission denied for sequence %s",
  						RelationGetRelationName(seqrel))));
  
!         if ((elm->increment != 0) ||(elm->last != elm->cached)) /* some numbers were cached */
!         {
!                 result = elm->last;
!                 relation_close(seqrel, NoLock);
!                 PG_RETURN_INT64(result);
!         }
  
!         /* lock page' buffer and read tuple if not cached */
!         seq = read_info(elm, seqrel, &buf);
!         result = seq->last_value;
  
! 	UnlockReleaseBuffer(buf);
!         relation_close(seqrel, NoLock);
  
!         seqtab = elm->next;
!         free(elm);
! 
!         PG_RETURN_INT64(result);
  }
  
  Datum
*** ./src/bin/psql/describe.c.orig	Thu Apr 27 04:45:45 2006
--- ./src/bin/psql/describe.c	Tue May  9 16:26:10 2006
***************
*** 1480,1485 ****
--- 1480,1488 ----
  					  _("table"), _("view"), _("index"), _("sequence"),
  					  _("special"), _("Type"), _("Owner"));
  
+ 	if (showSeq && !showTables)
+ 		appendPQExpBuffer(&buf,",\n  currval(CAST(c.relname AS pg_catalog.text)) as \"%s\"",_("value"));
+ 
  	if (showIndexes)
  		appendPQExpBuffer(&buf,
  						  ",\n c2.relname as \"%s\"",
No differences encountered
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to