*** a/doc/src/sgml/spi.sgml
--- b/doc/src/sgml/spi.sgml
***************
*** 3186,3191 **** Oid SPI_gettypeid(TupleDesc <parameter>rowdesc</parameter>, int <parameter>colnu
--- 3186,3257 ----
  
  <!-- *********************************************** -->
  
+ <refentry id="spi-spi-gettypmod">
+  <refmeta>
+   <refentrytitle>SPI_gettypmod</refentrytitle>
+   <manvolnum>3</manvolnum>
+  </refmeta>
+ 
+  <refnamediv>
+   <refname>SPI_gettypmod</refname>
+   <refpurpose>return the type-specific data of the specified column</refpurpose>
+  </refnamediv>
+ 
+  <indexterm><primary>SPI_gettypmod</primary></indexterm>
+ 
+  <refsynopsisdiv>
+ <synopsis>
+ int32 SPI_gettypmod(TupleDesc <parameter>rowdesc</parameter>, int <parameter>colnumber</parameter>)
+ </synopsis>
+  </refsynopsisdiv>
+ 
+  <refsect1>
+   <title>Description</title>
+ 
+   <para>
+    <function>SPI_gettypmod</function> returns the
+    type-specific data of the data type of the specified column.
+   </para>
+  </refsect1>
+ 
+  <refsect1>
+   <title>Arguments</title>
+ 
+   <variablelist>
+    <varlistentry>
+     <term><literal>TupleDesc <parameter>rowdesc</parameter></literal></term>
+     <listitem>
+      <para>
+       input row description
+      </para>
+     </listitem>
+    </varlistentry>
+ 
+    <varlistentry>
+     <term><literal>int <parameter>colnumber</parameter></literal></term>
+     <listitem>
+      <para>
+       column number (count starts at 1)
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </refsect1>
+ 
+  <refsect1>
+   <title>Return Value</title>
+ 
+   <para>
+    The type-specific data of the data type of the specified column
+    or -1 for types that do not need type-specific data or error.  On error,
+    <varname>SPI_result</varname> is set to
+    <symbol>SPI_ERROR_NOATTRIBUTE</symbol>.
+   </para>
+  </refsect1>
+ </refentry>
+ 
+ <!-- *********************************************** -->
+ 
  <refentry id="spi-spi-getrelname">
   <refmeta>
    <refentrytitle>SPI_getrelname</refentrytitle>
*** a/src/backend/executor/spi.c
--- b/src/backend/executor/spi.c
***************
*** 958,963 **** SPI_gettypeid(TupleDesc tupdesc, int fnumber)
--- 958,981 ----
  		return (SystemAttributeDefinition(fnumber, true))->atttypid;
  }
  
+ int32
+ SPI_gettypmod(TupleDesc tupdesc, int fnumber)
+ {
+ 	SPI_result = 0;
+ 
+ 	if (fnumber > tupdesc->natts || fnumber == 0 ||
+ 		fnumber <= FirstLowInvalidHeapAttributeNumber)
+ 	{
+ 		SPI_result = SPI_ERROR_NOATTRIBUTE;
+ 		return -1;
+ 	}
+  
+ 	if (fnumber > 0)
+ 		return tupdesc->attrs[fnumber - 1]->atttypmod;
+ 	else
+ 		return (SystemAttributeDefinition(fnumber, true))->atttypmod;
+ }
+ 
  char *
  SPI_getrelname(Relation rel)
  {
*** a/src/include/executor/spi.h
--- b/src/include/executor/spi.h
***************
*** 116,121 **** extern char *SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber);
--- 116,122 ----
  extern Datum SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool *isnull);
  extern char *SPI_gettype(TupleDesc tupdesc, int fnumber);
  extern Oid	SPI_gettypeid(TupleDesc tupdesc, int fnumber);
+ extern int32	SPI_gettypmod(TupleDesc tupdesc, int fnumber);
  extern char *SPI_getrelname(Relation rel);
  extern char *SPI_getnspname(Relation rel);
  extern void *SPI_palloc(Size size);
