diff --git a/doc/src/sgml/spi.sgml b/doc/src/sgml/spi.sgml
index e25c2a259cc0250f2b7cd3aca77f43559acce994..403baea4e38bc960b45f0fb8381295c4d4a1ae65 100644
--- a/doc/src/sgml/spi.sgml
+++ b/doc/src/sgml/spi.sgml
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/spi.sgml,v 1.23 2002/09/02 06:11:42 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/spi.sgml,v 1.24 2002/12/30 22:10:53 tgl Exp $
 -->
 
 <Chapter id="spi">
@@ -348,7 +348,7 @@ SPI_exec(<REPLACEABLE CLASS="PARAMETER">query</REPLACEABLE>, <REPLACEABLE CLASS=
 <VARIABLELIST>
 <VARLISTENTRY>
 <TERM>
-char *<REPLACEABLE CLASS="PARAMETER">query</REPLACEABLE>
+const char * <REPLACEABLE CLASS="PARAMETER">query</REPLACEABLE>
 </TERM>
 <LISTITEM>
 <PARA>
@@ -597,7 +597,7 @@ SPI_prepare(<REPLACEABLE CLASS="PARAMETER">query</REPLACEABLE>, <REPLACEABLE CLA
 <VARIABLELIST>
 <VARLISTENTRY>
 <TERM>
-<REPLACEABLE CLASS="PARAMETER">query</REPLACEABLE>
+const char * <REPLACEABLE CLASS="PARAMETER">query</REPLACEABLE>
 </TERM>
 <LISTITEM>
 <PARA>
@@ -607,7 +607,7 @@ Query string
 </VARLISTENTRY>
 <VARLISTENTRY>
 <TERM>
-<REPLACEABLE CLASS="PARAMETER">nargs</REPLACEABLE>
+int <REPLACEABLE CLASS="PARAMETER">nargs</REPLACEABLE>
 </TERM>
 <LISTITEM>
 <PARA>
@@ -617,7 +617,7 @@ Number of input parameters ($1 ... $nargs - as in SQL-functions)
 </VARLISTENTRY>
 <VARLISTENTRY>
 <TERM>
-<REPLACEABLE CLASS="PARAMETER">argtypes</REPLACEABLE>
+Oid * <REPLACEABLE CLASS="PARAMETER">argtypes</REPLACEABLE>
 </TERM>
 <LISTITEM>
 <PARA>
@@ -780,7 +780,7 @@ Actual parameter values
 </VARLISTENTRY>
 <VARLISTENTRY>
 <TERM>
-char *<REPLACEABLE CLASS="PARAMETER">nulls</REPLACEABLE>
+const char *<REPLACEABLE CLASS="PARAMETER">nulls</REPLACEABLE>
 </TERM>
 <LISTITEM>
 <PARA>
@@ -948,7 +948,7 @@ SPI_cursor_open(<REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE>,
 <VARIABLELIST>
 <VARLISTENTRY>
 <TERM>
-char *<REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE>
+const char *<REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE>
 </TERM>
 <LISTITEM>
 <PARA>
@@ -978,7 +978,7 @@ Actual parameter values
 </VARLISTENTRY>
 <VARLISTENTRY>
 <TERM>
-char *<REPLACEABLE CLASS="PARAMETER">nulls</REPLACEABLE>
+const char *<REPLACEABLE CLASS="PARAMETER">nulls</REPLACEABLE>
 </TERM>
 <LISTITEM>
 <PARA>
@@ -1089,7 +1089,7 @@ SPI_cursor_find(<REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE>)
 <VARIABLELIST>
 <VARLISTENTRY>
 <TERM>
-char *<REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE>
+const char *<REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE>
 </TERM>
 <LISTITEM>
 <PARA>
@@ -1699,7 +1699,7 @@ Input tuple description
 </VARLISTENTRY>
 <VARLISTENTRY>
 <TERM>
-char * <REPLACEABLE CLASS="PARAMETER">fname</REPLACEABLE>
+const char * <REPLACEABLE CLASS="PARAMETER">fname</REPLACEABLE>
 </TERM>
 <LISTITEM>
 <PARA>
@@ -3068,7 +3068,7 @@ New values for the attributes specified
 </VARLISTENTRY>
 <VARLISTENTRY>
 <TERM>
-char * <REPLACEABLE CLASS="PARAMETER">Nulls</REPLACEABLE>
+const char * <REPLACEABLE CLASS="PARAMETER">Nulls</REPLACEABLE>
 </TERM>
 <LISTITEM>
 <PARA>
diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c
index dba491e3d030b3c566fdd2f559a188639f7f18f7..abca504f2ae46c56667981a3b97b9e290bd01407 100644
--- a/src/backend/executor/spi.c
+++ b/src/backend/executor/spi.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.82 2002/12/17 15:51:59 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.83 2002/12/30 22:10:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -32,11 +32,11 @@ static _SPI_connection *_SPI_current = NULL;
 static int	_SPI_connected = -1;
 static int	_SPI_curid = -1;
 
-static int	_SPI_execute(char *src, int tcount, _SPI_plan *plan);
+static int	_SPI_execute(const char *src, int tcount, _SPI_plan *plan);
 static int	_SPI_pquery(QueryDesc *queryDesc, bool runit, int tcount);
 
 static int _SPI_execute_plan(_SPI_plan *plan,
-				  Datum *Values, char *Nulls, int tcount);
+				  Datum *Values, const char *Nulls, int tcount);
 
 static void _SPI_cursor_operation(Portal portal, bool forward, int count,
 					  CommandDest dest);
@@ -187,7 +187,7 @@ SPI_pop(void)
 }
 
 int
-SPI_exec(char *src, int tcount)
+SPI_exec(const char *src, int tcount)
 {
 	int			res;
 
@@ -205,7 +205,7 @@ SPI_exec(char *src, int tcount)
 }
 
 int
-SPI_execp(void *plan, Datum *Values, char *Nulls, int tcount)
+SPI_execp(void *plan, Datum *Values, const char *Nulls, int tcount)
 {
 	int			res;
 
@@ -226,7 +226,7 @@ SPI_execp(void *plan, Datum *Values, char *Nulls, int tcount)
 }
 
 void *
-SPI_prepare(char *src, int nargs, Oid *argtypes)
+SPI_prepare(const char *src, int nargs, Oid *argtypes)
 {
 	_SPI_plan  *plan;
 
@@ -382,7 +382,7 @@ SPI_copytupleintoslot(HeapTuple tuple, TupleDesc tupdesc)
 
 HeapTuple
 SPI_modifytuple(Relation rel, HeapTuple tuple, int natts, int *attnum,
-				Datum *Values, char *Nulls)
+				Datum *Values, const char *Nulls)
 {
 	MemoryContext oldcxt = NULL;
 	HeapTuple	mtuple;
@@ -455,7 +455,7 @@ SPI_modifytuple(Relation rel, HeapTuple tuple, int natts, int *attnum,
 }
 
 int
-SPI_fnumber(TupleDesc tupdesc, char *fname)
+SPI_fnumber(TupleDesc tupdesc, const char *fname)
 {
 	int			res;
 	Form_pg_attribute sysatt;
@@ -693,7 +693,7 @@ SPI_freetuptable(SPITupleTable *tuptable)
  *	Open a prepared SPI plan as a portal
  */
 Portal
-SPI_cursor_open(char *name, void *plan, Datum *Values, char *Nulls)
+SPI_cursor_open(const char *name, void *plan, Datum *Values, const char *Nulls)
 {
 	static int	unnamed_portal_count = 0;
 
@@ -827,7 +827,7 @@ SPI_cursor_open(char *name, void *plan, Datum *Values, char *Nulls)
  *	Find the portal of an existing open cursor
  */
 Portal
-SPI_cursor_find(char *name)
+SPI_cursor_find(const char *name)
 {
 	return GetPortalByName(name);
 }
@@ -944,7 +944,7 @@ spi_printtup(HeapTuple tuple, TupleDesc tupdesc, DestReceiver *self)
  * If plan != NULL, just prepare plan tree, else execute immediately.
  */
 static int
-_SPI_execute(char *src, int tcount, _SPI_plan *plan)
+_SPI_execute(const char *src, int tcount, _SPI_plan *plan)
 {
 	StringInfoData stri;
 	List	   *raw_parsetree_list;
@@ -1110,7 +1110,8 @@ _SPI_execute(char *src, int tcount, _SPI_plan *plan)
 }
 
 static int
-_SPI_execute_plan(_SPI_plan *plan, Datum *Values, char *Nulls, int tcount)
+_SPI_execute_plan(_SPI_plan *plan, Datum *Values, const char *Nulls,
+				  int tcount)
 {
 	List	   *query_list_list = plan->qtlist;
 	List	   *plan_list = plan->ptlist;
diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c
index eaead7dffc95fe0e54d2ad41985b1efe6830381b..520a55d64ae504cd45b975f1ed7df77ff0677b28 100644
--- a/src/backend/utils/mmgr/portalmem.c
+++ b/src/backend/utils/mmgr/portalmem.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.50 2002/12/05 15:50:35 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.51 2002/12/30 22:10:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -134,7 +134,7 @@ EnablePortalManager(void)
  *		Returns a portal given a portal name, or NULL if name not found.
  */
 Portal
-GetPortalByName(char *name)
+GetPortalByName(const char *name)
 {
 	Portal		portal;
 
@@ -173,7 +173,7 @@ PortalSetQuery(Portal portal,
  *		"WARNING" if portal name is in use (existing portal is returned!)
  */
 Portal
-CreatePortal(char *name)
+CreatePortal(const char *name)
 {
 	Portal		portal;
 
diff --git a/src/include/executor/spi.h b/src/include/executor/spi.h
index 263661492da8de1341193283f95fb89b49544feb..85a987b14b23bccfdd53820849af37ad0fd6647a 100644
--- a/src/include/executor/spi.h
+++ b/src/include/executor/spi.h
@@ -2,7 +2,7 @@
  *
  * spi.h
  *
- * $Id: spi.h,v 1.34 2002/12/13 19:45:56 tgl Exp $
+ * $Id: spi.h,v 1.35 2002/12/30 22:10:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -80,9 +80,10 @@ extern int	SPI_connect(void);
 extern int	SPI_finish(void);
 extern void SPI_push(void);
 extern void SPI_pop(void);
-extern int	SPI_exec(char *src, int tcount);
-extern int	SPI_execp(void *plan, Datum *values, char *Nulls, int tcount);
-extern void *SPI_prepare(char *src, int nargs, Oid *argtypes);
+extern int	SPI_exec(const char *src, int tcount);
+extern int	SPI_execp(void *plan, Datum *values, const char *Nulls,
+					  int tcount);
+extern void *SPI_prepare(const char *src, int nargs, Oid *argtypes);
 extern void *SPI_saveplan(void *plan);
 extern int	SPI_freeplan(void *plan);
 
@@ -91,8 +92,8 @@ extern TupleDesc SPI_copytupledesc(TupleDesc tupdesc);
 extern TupleTableSlot *SPI_copytupleintoslot(HeapTuple tuple,
 					  TupleDesc tupdesc);
 extern HeapTuple SPI_modifytuple(Relation rel, HeapTuple tuple, int natts,
-				int *attnum, Datum *Values, char *Nulls);
-extern int	SPI_fnumber(TupleDesc tupdesc, char *fname);
+				int *attnum, Datum *Values, const char *Nulls);
+extern int	SPI_fnumber(TupleDesc tupdesc, const char *fname);
 extern char *SPI_fname(TupleDesc tupdesc, int fnumber);
 extern char *SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber);
 extern Datum SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool *isnull);
@@ -105,9 +106,9 @@ extern void SPI_pfree(void *pointer);
 extern void SPI_freetuple(HeapTuple pointer);
 extern void SPI_freetuptable(SPITupleTable *tuptable);
 
-extern Portal SPI_cursor_open(char *name, void *plan,
-				Datum *Values, char *Nulls);
-extern Portal SPI_cursor_find(char *name);
+extern Portal SPI_cursor_open(const char *name, void *plan,
+				Datum *Values, const char *Nulls);
+extern Portal SPI_cursor_find(const char *name);
 extern void SPI_cursor_fetch(Portal portal, bool forward, int count);
 extern void SPI_cursor_move(Portal portal, bool forward, int count);
 extern void SPI_cursor_close(Portal portal);
diff --git a/src/include/utils/portal.h b/src/include/utils/portal.h
index 40258acc32a34113804457127bb9b0f2339ff9af..41fa2f735c2b15b19504ecb3621658a5f2c50487 100644
--- a/src/include/utils/portal.h
+++ b/src/include/utils/portal.h
@@ -9,7 +9,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: portal.h,v 1.36 2002/12/05 15:50:39 tgl Exp $
+ * $Id: portal.h,v 1.37 2002/12/30 22:10:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,9 +53,9 @@ typedef struct PortalData
 
 extern void EnablePortalManager(void);
 extern void AtEOXact_portals(void);
-extern Portal CreatePortal(char *name);
+extern Portal CreatePortal(const char *name);
 extern void PortalDrop(Portal portal);
-extern Portal GetPortalByName(char *name);
+extern Portal GetPortalByName(const char *name);
 extern void PortalSetQuery(Portal portal, QueryDesc *queryDesc,
 						   void (*cleanup) (Portal portal));
 
diff --git a/src/interfaces/libpgtcl/pgtclCmds.c b/src/interfaces/libpgtcl/pgtclCmds.c
index ff57d2c365367fb13786bb38e401a2d96d5cba2a..97deada373457f950bada6e9876db33acf9fb5d4 100644
--- a/src/interfaces/libpgtcl/pgtclCmds.c
+++ b/src/interfaces/libpgtcl/pgtclCmds.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.70 2002/11/26 21:38:49 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.71 2002/12/30 22:10:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -23,7 +23,7 @@
 /*
  * Local function forward declarations
  */
-static int execute_put_values(Tcl_Interp *interp, char *array_varname,
+static int execute_put_values(Tcl_Interp *interp, CONST84 char *array_varname,
 				   PGresult *result, int tupno);
 
 
@@ -241,7 +241,7 @@ tcl_value(char *value)
  **********************************/
 
 int
-Pg_conndefaults(ClientData cData, Tcl_Interp *interp, int argc, char **argv)
+Pg_conndefaults(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PQconninfoOption *options = PQconndefaults();
 	PQconninfoOption *option;
@@ -287,13 +287,13 @@ Pg_conndefaults(ClientData cData, Tcl_Interp *interp, int argc, char **argv)
  **********************************/
 
 int
-Pg_connect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_connect(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
-	char	   *pghost = NULL;
-	char	   *pgtty = NULL;
-	char	   *pgport = NULL;
-	char	   *pgoptions = NULL;
-	char	   *dbName;
+	const char	   *pghost = NULL;
+	const char	   *pgtty = NULL;
+	const char	   *pgport = NULL;
+	const char	   *pgoptions = NULL;
+	const char	   *dbName;
 	int			i;
 	PGconn	   *conn;
 
@@ -397,7 +397,7 @@ Pg_connect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
  **********************************/
 
 int
-Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGconn	   *conn;
 	Tcl_Channel conn_chan;
@@ -436,7 +436,7 @@ Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
  **********************************/
 
 int
-Pg_exec(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_exec(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	Pg_ConnectionId *connid;
 	PGconn	   *conn;
@@ -538,13 +538,13 @@ Pg_exec(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
 
  **********************************/
 int
-Pg_result(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_result(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGresult   *result;
-	char	   *opt;
+	const char *opt;
 	int			i;
 	int			tupno;
-	char	   *arrVar;
+	CONST84 char *arrVar;
 	char		nameBuffer[256];
 	const char *appendstr;
 
@@ -804,7 +804,7 @@ Pg_result_errReturn:
  **********************************/
 
 int
-Pg_execute(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_execute(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	Pg_ConnectionId *connid;
 	PGconn	   *conn;
@@ -813,8 +813,8 @@ Pg_execute(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
 	int			tupno;
 	int			ntup;
 	int			loop_rc;
-	char	   *oid_varname = NULL;
-	char	   *array_varname = NULL;
+	CONST84 char *oid_varname = NULL;
+	CONST84 char *array_varname = NULL;
 	char		buf[64];
 
 	char	   *usage = "Wrong # of arguments\n"
@@ -1025,7 +1025,7 @@ Pg_execute(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
  column names, or into an array indexed by the column names.
  **********************************/
 static int
-execute_put_values(Tcl_Interp *interp, char *array_varname,
+execute_put_values(Tcl_Interp *interp, CONST84 char *array_varname,
 				   PGresult *result, int tupno)
 {
 	int			i;
@@ -1071,7 +1071,7 @@ execute_put_values(Tcl_Interp *interp, char *array_varname,
 **********************/
 
 int
-Pg_lo_open(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_lo_open(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGconn	   *conn;
 	int			lobjId;
@@ -1141,7 +1141,7 @@ Pg_lo_open(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
 
 **********************/
 int
-Pg_lo_close(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_lo_close(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGconn	   *conn;
 	int			fd;
@@ -1230,7 +1230,7 @@ Pg_lo_read(ClientData cData, Tcl_Interp *interp, int objc,
 
 #else
 int
-Pg_lo_read(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_lo_read(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGconn	   *conn;
 	int			fd;
@@ -1328,7 +1328,7 @@ Pg_lo_write(ClientData cData, Tcl_Interp *interp, int objc,
 
 #else
 int
-Pg_lo_write(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_lo_write(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGconn	   *conn;
 	char	   *buf;
@@ -1376,11 +1376,11 @@ whence can be either
 "SEEK_CUR", "SEEK_END", or "SEEK_SET"
 ***********************************/
 int
-Pg_lo_lseek(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_lo_lseek(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGconn	   *conn;
 	int			fd;
-	char	   *whenceStr;
+	const char *whenceStr;
 	int			offset,
 				whence;
 
@@ -1429,7 +1429,7 @@ for now, we don't support any additional storage managers.
 
 ***********************************/
 int
-Pg_lo_creat(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_lo_creat(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGconn	   *conn;
 	char	   *modeStr;
@@ -1447,7 +1447,7 @@ Pg_lo_creat(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
 	if (conn == (PGconn *) NULL)
 		return TCL_ERROR;
 
-	modeStr = argv[2];
+	modeStr = strdup(argv[2]);
 
 	modeWord = strtok(modeStr, "|");
 	if (strcmp(modeWord, "INV_READ") == 0)
@@ -1459,6 +1459,7 @@ Pg_lo_creat(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
 		Tcl_AppendResult(interp,
 						 "invalid mode argument to Pg_lo_creat\nmode argument must be some OR'd combination of INV_READ, and INV_WRITE",
 						 0);
+		free(modeStr);
 		return TCL_ERROR;
 	}
 
@@ -1473,10 +1474,12 @@ Pg_lo_creat(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
 			Tcl_AppendResult(interp,
 							 "invalid mode argument to Pg_lo_creat\nmode argument must be some OR'd combination of INV_READ, INV_WRITE",
 							 0);
+			free(modeStr);
 			return TCL_ERROR;
 		}
 	}
 	sprintf(interp->result, "%d", lo_creat(conn, mode));
+	free(modeStr);
 	return TCL_OK;
 }
 
@@ -1489,7 +1492,7 @@ Pg_lo_tell
 
 ***********************************/
 int
-Pg_lo_tell(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_lo_tell(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGconn	   *conn;
 	int			fd;
@@ -1522,7 +1525,7 @@ Pg_lo_unlink
 
 ***********************************/
 int
-Pg_lo_unlink(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_lo_unlink(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGconn	   *conn;
 	int			lobjId;
@@ -1564,10 +1567,10 @@ Pg_lo_import
 ***********************************/
 
 int
-Pg_lo_import(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_lo_import(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGconn	   *conn;
-	char	   *filename;
+	const char *filename;
 	Oid			lobjId;
 
 	if (argc != 3)
@@ -1607,10 +1610,10 @@ Pg_lo_export
 ***********************************/
 
 int
-Pg_lo_export(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_lo_export(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	PGconn	   *conn;
-	char	   *filename;
+	const char *filename;
 	Oid			lobjId;
 	int			retval;
 
@@ -1659,7 +1662,7 @@ Pg_lo_export(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
  **********************************/
 
 int
-Pg_select(ClientData cData, Tcl_Interp *interp, int argc, char **argv)
+Pg_select(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	Pg_ConnectionId *connid;
 	PGconn	   *conn;
@@ -1816,9 +1819,9 @@ Pg_listen
    vwait or update can be used to enter the Tcl event loop.
 ***********************************/
 int
-Pg_listen(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_listen(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
-	char	   *origrelname;
+	const char *origrelname;
 	char	   *caserelname;
 	char	   *callback = NULL;
 	Pg_TclNotifies *notifies;
@@ -1860,7 +1863,7 @@ Pg_listen(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
 	else
 	{
 		/* Downcase it */
-		char	   *rels = origrelname;
+		const char *rels = origrelname;
 		char	   *reld = caserelname;
 
 		while (*rels)
@@ -1997,7 +2000,7 @@ Pg_on_connection_loss
    vwait or update can be used to enter the Tcl event loop.
 ***********************************/
 int
-Pg_on_connection_loss(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
+Pg_on_connection_loss(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[])
 {
 	char	   *callback = NULL;
 	Pg_TclNotifies *notifies;
diff --git a/src/interfaces/libpgtcl/pgtclCmds.h b/src/interfaces/libpgtcl/pgtclCmds.h
index 5cc802a6964829baa87b2a24b411475bbde80f25..1e50cdcd94ff76d92e5229dadb0a2644d2a66d17 100644
--- a/src/interfaces/libpgtcl/pgtclCmds.h
+++ b/src/interfaces/libpgtcl/pgtclCmds.h
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pgtclCmds.h,v 1.28 2002/09/04 20:31:46 momjian Exp $
+ * $Id: pgtclCmds.h,v 1.29 2002/12/30 22:10:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -15,8 +15,14 @@
 #define PGTCLCMDS_H
 
 #include <tcl.h>
+
 #include "libpq-fe.h"
 
+/* Hack to deal with Tcl 8.4 const-ification without losing compatibility */
+#ifndef CONST84
+#define CONST84
+#endif
+
 #define RES_HARD_MAX 128
 #define RES_START 16
 
@@ -86,54 +92,52 @@ typedef struct Pg_ConnectionId_s
 /* **************************/
 /* registered Tcl functions */
 /* **************************/
-extern int Pg_conndefaults(
-		   ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_connect(
-		   ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_disconnect(
-		   ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_exec(
-		ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_execute(
-		   ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_select(
-		  ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_result(
-		  ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_lo_open(
-		   ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_lo_close(
-			ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
+extern int Pg_conndefaults(ClientData cData, Tcl_Interp *interp,
+						   int argc, CONST84 char *argv[]);
+extern int Pg_connect(ClientData cData, Tcl_Interp *interp,
+					  int argc, CONST84 char *argv[]);
+extern int Pg_disconnect(ClientData cData, Tcl_Interp *interp,
+						 int argc, CONST84 char *argv[]);
+extern int Pg_exec(ClientData cData, Tcl_Interp *interp,
+				   int argc, CONST84 char *argv[]);
+extern int Pg_execute(ClientData cData, Tcl_Interp *interp,
+					  int argc, CONST84 char *argv[]);
+extern int Pg_select(ClientData cData, Tcl_Interp *interp,
+					 int argc, CONST84 char *argv[]);
+extern int Pg_result(ClientData cData, Tcl_Interp *interp,
+					 int argc, CONST84 char *argv[]);
+extern int Pg_lo_open(ClientData cData, Tcl_Interp *interp,
+					  int argc, CONST84 char *argv[]);
+extern int Pg_lo_close(ClientData cData, Tcl_Interp *interp,
+					   int argc, CONST84 char *argv[]);
 
 #ifdef PGTCL_USE_TCLOBJ
-extern int Pg_lo_read(
-		   ClientData cData, Tcl_Interp *interp, int objc,
+extern int Pg_lo_read(ClientData cData, Tcl_Interp *interp, int objc,
 		   Tcl_Obj *CONST objv[]);
-extern int Pg_lo_write(
-			ClientData cData, Tcl_Interp *interp, int objc,
+extern int Pg_lo_write(ClientData cData, Tcl_Interp *interp, int objc,
 			Tcl_Obj *CONST objv[]);
 
 #else
-extern int Pg_lo_read(
-		   ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_lo_write(
-			ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
+extern int Pg_lo_read(ClientData cData, Tcl_Interp *interp,
+					  int argc, CONST84 char *argv[]);
+extern int Pg_lo_write(ClientData cData, Tcl_Interp *interp,
+					   int argc, CONST84 char *argv[]);
 #endif
-extern int Pg_lo_lseek(
-			ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_lo_creat(
-			ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_lo_tell(
-		   ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_lo_unlink(
-		   ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_lo_import(
-		   ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_lo_export(
-		   ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_listen(
-		  ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
-extern int Pg_on_connection_loss(
-		   ClientData cData, Tcl_Interp *interp, int argc, char *argv[]);
+extern int Pg_lo_lseek(ClientData cData, Tcl_Interp *interp,
+					   int argc, CONST84 char *argv[]);
+extern int Pg_lo_creat(ClientData cData, Tcl_Interp *interp,
+					   int argc, CONST84 char *argv[]);
+extern int Pg_lo_tell(ClientData cData, Tcl_Interp *interp,
+					  int argc, CONST84 char *argv[]);
+extern int Pg_lo_unlink(ClientData cData, Tcl_Interp *interp,
+						int argc, CONST84 char *argv[]);
+extern int Pg_lo_import(ClientData cData, Tcl_Interp *interp,
+						int argc, CONST84 char *argv[]);
+extern int Pg_lo_export(ClientData cData, Tcl_Interp *interp,
+						int argc, CONST84 char *argv[]);
+extern int Pg_listen(ClientData cData, Tcl_Interp *interp,
+					 int argc, CONST84 char *argv[]);
+extern int Pg_on_connection_loss(ClientData cData, Tcl_Interp *interp,
+								 int argc, CONST84 char *argv[]);
 
 #endif   /* PGTCLCMDS_H */
diff --git a/src/interfaces/libpgtcl/pgtclId.c b/src/interfaces/libpgtcl/pgtclId.c
index cc79339c6bee8d2e7133ec8d30d6d09ed7c6d856..ecf1e362e80e0e7660da17ff988f83b53f4a6a88 100644
--- a/src/interfaces/libpgtcl/pgtclId.c
+++ b/src/interfaces/libpgtcl/pgtclId.c
@@ -13,7 +13,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclId.c,v 1.37 2002/10/17 14:53:32 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclId.c,v 1.38 2002/12/30 22:10:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -218,7 +218,8 @@ PgSetConnectionId(Tcl_Interp *interp, PGconn *conn)
  * Get back the connection from the Id
  */
 PGconn *
-PgGetConnectionId(Tcl_Interp *interp, char *id, Pg_ConnectionId ** connid_p)
+PgGetConnectionId(Tcl_Interp *interp, CONST84 char *id,
+				  Pg_ConnectionId ** connid_p)
 {
 	Tcl_Channel conn_chan;
 	Pg_ConnectionId *connid;
@@ -326,7 +327,7 @@ PgDelConnectionId(DRIVER_DEL_PROTO)
  * is probably just not clearing result handles like they should.
  */
 int
-PgSetResultId(Tcl_Interp *interp, char *connid_c, PGresult *res)
+PgSetResultId(Tcl_Interp *interp, CONST84 char *connid_c, PGresult *res)
 {
 	Tcl_Channel conn_chan;
 	Pg_ConnectionId *connid;
@@ -384,7 +385,7 @@ PgSetResultId(Tcl_Interp *interp, char *connid_c, PGresult *res)
 }
 
 static int
-getresid(Tcl_Interp *interp, char *id, Pg_ConnectionId ** connid_p)
+getresid(Tcl_Interp *interp, CONST84 char *id, Pg_ConnectionId ** connid_p)
 {
 	Tcl_Channel conn_chan;
 	char	   *mark;
@@ -426,7 +427,7 @@ getresid(Tcl_Interp *interp, char *id, Pg_ConnectionId ** connid_p)
  * Get back the result pointer from the Id
  */
 PGresult *
-PgGetResultId(Tcl_Interp *interp, char *id)
+PgGetResultId(Tcl_Interp *interp, CONST84 char *id)
 {
 	Pg_ConnectionId *connid;
 	int			resid;
@@ -444,7 +445,7 @@ PgGetResultId(Tcl_Interp *interp, char *id)
  * Remove a result Id from the hash tables
  */
 void
-PgDelResultId(Tcl_Interp *interp, char *id)
+PgDelResultId(Tcl_Interp *interp, CONST84 char *id)
 {
 	Pg_ConnectionId *connid;
 	int			resid;
@@ -460,7 +461,7 @@ PgDelResultId(Tcl_Interp *interp, char *id)
  * Get the connection Id from the result Id
  */
 int
-PgGetConnByResultId(Tcl_Interp *interp, char *resid_c)
+PgGetConnByResultId(Tcl_Interp *interp, CONST84 char *resid_c)
 {
 	char	   *mark;
 	Tcl_Channel conn_chan;
@@ -472,7 +473,8 @@ PgGetConnByResultId(Tcl_Interp *interp, char *resid_c)
 	*mark = '.';
 	if (conn_chan && Tcl_GetChannelType(conn_chan) == &Pg_ConnType)
 	{
-		Tcl_SetResult(interp, Tcl_GetChannelName(conn_chan), TCL_VOLATILE);
+		Tcl_SetResult(interp, (char *) Tcl_GetChannelName(conn_chan),
+					  TCL_VOLATILE);
 		return TCL_OK;
 	}
 
diff --git a/src/interfaces/libpgtcl/pgtclId.h b/src/interfaces/libpgtcl/pgtclId.h
index 4f5558561bfb17c6b73adfaa33c5292156aa34fb..102324f01d5c6f74794fdda27b6dfef51d941237 100644
--- a/src/interfaces/libpgtcl/pgtclId.h
+++ b/src/interfaces/libpgtcl/pgtclId.h
@@ -10,7 +10,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pgtclId.h,v 1.21 2002/09/02 21:51:47 tgl Exp $
+ * $Id: pgtclId.h,v 1.22 2002/12/30 22:10:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -27,22 +27,23 @@ extern void PgSetConnectionId(Tcl_Interp *interp, PGconn *conn);
 	int bufSize, int *errorCodePtr
 #else
 /* Tcl 7.6 and beyond use this signature */
-#define DRIVER_OUTPUT_PROTO ClientData cData, char *buf, int bufSize, \
+#define DRIVER_OUTPUT_PROTO ClientData cData, CONST84 char *buf, int bufSize, \
 	int *errorCodePtr
 #define DRIVER_INPUT_PROTO ClientData cData, char *buf, int bufSize, \
 	int *errorCodePtr
 #define DRIVER_DEL_PROTO ClientData cData, Tcl_Interp *interp
 #endif
 
-extern PGconn *PgGetConnectionId(Tcl_Interp *interp, char *id,
+extern PGconn *PgGetConnectionId(Tcl_Interp *interp, CONST84 char *id,
 				  Pg_ConnectionId **);
 extern int	PgDelConnectionId(DRIVER_DEL_PROTO);
 extern int	PgOutputProc(DRIVER_OUTPUT_PROTO);
 extern int	PgInputProc(DRIVER_INPUT_PROTO);
-extern int	PgSetResultId(Tcl_Interp *interp, char *connid, PGresult *res);
-extern PGresult *PgGetResultId(Tcl_Interp *interp, char *id);
-extern void PgDelResultId(Tcl_Interp *interp, char *id);
-extern int	PgGetConnByResultId(Tcl_Interp *interp, char *resid);
+extern int	PgSetResultId(Tcl_Interp *interp, CONST84 char *connid,
+						  PGresult *res);
+extern PGresult *PgGetResultId(Tcl_Interp *interp, CONST84 char *id);
+extern void PgDelResultId(Tcl_Interp *interp, CONST84 char *id);
+extern int	PgGetConnByResultId(Tcl_Interp *interp, CONST84 char *resid);
 extern void PgStartNotifyEventSource(Pg_ConnectionId * connid);
 extern void PgStopNotifyEventSource(Pg_ConnectionId * connid, bool allevents);
 extern void PgNotifyTransferEvents(Pg_ConnectionId * connid);
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index bebb82ebdf0b731d927c332623b6ec31de572f1f..ac8d6046c3157bdb4b7297569d362bbfeb9b0a47 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -31,7 +31,7 @@
  *	  ENHANCEMENTS, OR MODIFICATIONS.
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.67 2002/11/22 16:25:32 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.68 2002/12/30 22:10:54 tgl Exp $
  *
  **********************************************************************/
 
@@ -43,6 +43,11 @@
 #include <fcntl.h>
 #include <setjmp.h>
 
+/* Hack to deal with Tcl 8.4 const-ification without losing compatibility */
+#ifndef CONST84
+#define CONST84
+#endif
+
 #include "access/heapam.h"
 #include "catalog/pg_language.h"
 #include "catalog/pg_proc.h"
@@ -152,27 +157,28 @@ static HeapTuple pltcl_trigger_handler(PG_FUNCTION_ARGS);
 static pltcl_proc_desc *compile_pltcl_function(Oid fn_oid, bool is_trigger);
 
 static int pltcl_elog(ClientData cdata, Tcl_Interp *interp,
-		   int argc, char *argv[]);
+		   int argc, CONST84 char *argv[]);
 static int pltcl_quote(ClientData cdata, Tcl_Interp *interp,
-			int argc, char *argv[]);
+			int argc, CONST84 char *argv[]);
 static int pltcl_argisnull(ClientData cdata, Tcl_Interp *interp,
-				int argc, char *argv[]);
+				int argc, CONST84 char *argv[]);
 static int pltcl_returnnull(ClientData cdata, Tcl_Interp *interp,
-				 int argc, char *argv[]);
+				 int argc, CONST84 char *argv[]);
 
 static int pltcl_SPI_exec(ClientData cdata, Tcl_Interp *interp,
-			   int argc, char *argv[]);
+			   int argc, CONST84 char *argv[]);
 static int pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp,
-				  int argc, char *argv[]);
+				  int argc, CONST84 char *argv[]);
 static int pltcl_SPI_execp(ClientData cdata, Tcl_Interp *interp,
-				int argc, char *argv[]);
+				int argc, CONST84 char *argv[]);
+static int pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp,
+				  int argc, CONST84 char *argv[]);
 
-static void pltcl_set_tuple_values(Tcl_Interp *interp, char *arrayname,
+static void pltcl_set_tuple_values(Tcl_Interp *interp, CONST84 char *arrayname,
 					   int tupno, HeapTuple tuple, TupleDesc tupdesc);
 static void pltcl_build_tuple_argument(HeapTuple tuple, TupleDesc tupdesc,
 						   Tcl_DString *retval);
-static int pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp,
-				  int argc, char *argv[]);
+
 
 /*
  * This routine is a crock, and so is everyplace that calls it.  The problem
@@ -191,6 +197,7 @@ perm_fmgr_info(Oid functionId, FmgrInfo *finfo)
 	fmgr_info_cxt(functionId, finfo, TopMemoryContext);
 }
 
+
 /**********************************************************************
  * pltcl_init_all()		- Initialize all
  **********************************************************************/
@@ -625,7 +632,7 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS)
 	char	   *modnulls;
 
 	int			ret_numvals;
-	char	  **ret_values;
+	CONST84 char **ret_values;
 
 	sigjmp_buf	save_restart;
 
@@ -1246,7 +1253,7 @@ compile_pltcl_function(Oid fn_oid, bool is_trigger)
  **********************************************************************/
 static int
 pltcl_elog(ClientData cdata, Tcl_Interp *interp,
-		   int argc, char *argv[])
+		   int argc, CONST84 char *argv[])
 {
 	int			level;
 	sigjmp_buf	save_restart;
@@ -1316,10 +1323,10 @@ pltcl_elog(ClientData cdata, Tcl_Interp *interp,
  **********************************************************************/
 static int
 pltcl_quote(ClientData cdata, Tcl_Interp *interp,
-			int argc, char *argv[])
+			int argc, CONST84 char *argv[])
 {
 	char	   *tmp;
-	char	   *cp1;
+	const char *cp1;
 	char	   *cp2;
 
 	/************************************************************
@@ -1369,7 +1376,7 @@ pltcl_quote(ClientData cdata, Tcl_Interp *interp,
  **********************************************************************/
 static int
 pltcl_argisnull(ClientData cdata, Tcl_Interp *interp,
-				int argc, char *argv[])
+				int argc, CONST84 char *argv[])
 {
 	int			argno;
 	FunctionCallInfo fcinfo = pltcl_current_fcinfo;
@@ -1426,7 +1433,7 @@ pltcl_argisnull(ClientData cdata, Tcl_Interp *interp,
  **********************************************************************/
 static int
 pltcl_returnnull(ClientData cdata, Tcl_Interp *interp,
-				 int argc, char *argv[])
+				 int argc, CONST84 char *argv[])
 {
 	FunctionCallInfo fcinfo = pltcl_current_fcinfo;
 
@@ -1465,12 +1472,12 @@ pltcl_returnnull(ClientData cdata, Tcl_Interp *interp,
  **********************************************************************/
 static int
 pltcl_SPI_exec(ClientData cdata, Tcl_Interp *interp,
-			   int argc, char *argv[])
+			   int argc, CONST84 char *argv[])
 {
 	int			spi_rc;
 	char		buf[64];
 	int			count = 0;
-	char	   *volatile arrayname = NULL;
+	CONST84 char *volatile arrayname = NULL;
 	volatile int query_idx;
 	int			i;
 	int			loop_rc;
@@ -1709,10 +1716,10 @@ pltcl_SPI_exec(ClientData cdata, Tcl_Interp *interp,
  **********************************************************************/
 static int
 pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp,
-				  int argc, char *argv[])
+				  int argc, CONST84 char *argv[])
 {
 	int			nargs;
-	char	  **args;
+	CONST84 char **args;
 	pltcl_query_desc *qdesc;
 	void	   *plan;
 	int			i;
@@ -1778,7 +1785,7 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp,
 	for (i = 0; i < nargs; i++)
 	{
 		/* XXX should extend this to allow qualified type names */
-		typeTup = typenameType(makeTypeName(args[i]));
+		typeTup = typenameType(makeTypeName((char *) args[i]));
 		qdesc->argtypes[i] = HeapTupleGetOid(typeTup);
 		perm_fmgr_info(((Form_pg_type) GETSTRUCT(typeTup))->typinput,
 					   &(qdesc->arginfuncs[i]));
@@ -1880,9 +1887,12 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp,
 		query_hash = pltcl_safe_query_hash;
 
 	memcpy(&Warn_restart, &save_restart, sizeof(Warn_restart));
+
 	hashent = Tcl_CreateHashEntry(query_hash, qdesc->qname, &hashnew);
 	Tcl_SetHashValue(hashent, (ClientData) qdesc);
 
+	ckfree((char *) args);
+
 	Tcl_SetResult(interp, qdesc->qname, TCL_VOLATILE);
 	return TCL_OK;
 }
@@ -1893,7 +1903,7 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp,
  **********************************************************************/
 static int
 pltcl_SPI_execp(ClientData cdata, Tcl_Interp *interp,
-				int argc, char *argv[])
+				int argc, CONST84 char *argv[])
 {
 	int			spi_rc;
 	char		buf[64];
@@ -1903,11 +1913,11 @@ pltcl_SPI_execp(ClientData cdata, Tcl_Interp *interp,
 	Tcl_HashEntry *hashent;
 	pltcl_query_desc *qdesc;
 	Datum	   *volatile argvalues = NULL;
-	char	   *volatile nulls = NULL;
-	char	   *volatile arrayname = NULL;
+	const char *volatile nulls = NULL;
+	CONST84 char *volatile arrayname = NULL;
 	int			count = 0;
 	int			callnargs;
-	static char **callargs = NULL;
+	static CONST84 char **callargs = NULL;
 	int			loop_rc;
 	int			ntuples;
 	HeapTuple  *volatile tuples = NULL;
@@ -2279,7 +2289,7 @@ pltcl_SPI_execp(ClientData cdata, Tcl_Interp *interp,
  **********************************************************************/
 static int
 pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp,
-				  int argc, char *argv[])
+				  int argc, CONST84 char *argv[])
 {
 	char		buf[64];
 
@@ -2294,7 +2304,7 @@ pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp,
  *				  of a given tuple
  **********************************************************************/
 static void
-pltcl_set_tuple_values(Tcl_Interp *interp, char *arrayname,
+pltcl_set_tuple_values(Tcl_Interp *interp, CONST84 char *arrayname,
 					   int tupno, HeapTuple tuple, TupleDesc tupdesc)
 {
 	int			i;
@@ -2303,14 +2313,14 @@ pltcl_set_tuple_values(Tcl_Interp *interp, char *arrayname,
 	Datum		attr;
 	bool		isnull;
 
-	char	   *attname;
+	CONST84 char *attname;
 	HeapTuple	typeTup;
 	Oid			typoutput;
 	Oid			typelem;
 
-	char	  **arrptr;
-	char	  **nameptr;
-	char	   *nullname = NULL;
+	CONST84 char **arrptr;
+	CONST84 char **nameptr;
+	CONST84 char  *nullname = NULL;
 
 	/************************************************************
 	 * Prepare pointers for Tcl_SetVar2() below and in array