On Mon, Jun 11, 2018 at 02:25:44PM +0900, Michael Paquier wrote:
> On Wed, Jun 06, 2018 at 12:27:58PM -0400, Alvaro Herrera wrote:
>> Do you have an answer to this question?  Does anybody else?
>> 
>> (My guts tell me it'd be better to change these routines to take
>> unsigned values, without creating extra variants.  But guts frequently
>> misspeak.)
> 
> My guts are telling me as well to not have more variants.  On top of
> that it seems to me that we'd want to rename any new routines to include
> "uint" in their name instead of "int", and for compatibility with past
> code pq_sendint should not be touched.

And also pq_sendint64 needs to be kept around for compatibility.  I have
quickly looked at how much code would be involved here and there are
quite close to 240 code paths which involve the new routines.  Please
see attached for reference, I have not put much thoughts into it to be
honest, so that's really at an early stage.
--
Michael
diff --git a/contrib/hstore/hstore_io.c b/contrib/hstore/hstore_io.c
index 745497c76f..7c8da5bf22 100644
--- a/contrib/hstore/hstore_io.c
+++ b/contrib/hstore/hstore_io.c
@@ -1234,23 +1234,23 @@ hstore_send(PG_FUNCTION_ARGS)
 
 	pq_begintypsend(&buf);
 
-	pq_sendint32(&buf, count);
+	pq_senduint32(&buf, count);
 
 	for (i = 0; i < count; i++)
 	{
 		int32		keylen = HSTORE_KEYLEN(entries, i);
 
-		pq_sendint32(&buf, keylen);
+		pq_senduint32(&buf, keylen);
 		pq_sendtext(&buf, HSTORE_KEY(entries, base, i), keylen);
 		if (HSTORE_VALISNULL(entries, i))
 		{
-			pq_sendint32(&buf, -1);
+			pq_senduint32(&buf, -1);
 		}
 		else
 		{
 			int32		vallen = HSTORE_VALLEN(entries, i);
 
-			pq_sendint32(&buf, vallen);
+			pq_senduint32(&buf, vallen);
 			pq_sendtext(&buf, HSTORE_VAL(entries, base, i), vallen);
 		}
 	}
diff --git a/src/backend/access/common/printsimple.c b/src/backend/access/common/printsimple.c
index 3c4d227712..c5aade3e44 100644
--- a/src/backend/access/common/printsimple.c
+++ b/src/backend/access/common/printsimple.c
@@ -34,19 +34,19 @@ printsimple_startup(DestReceiver *self, int operation, TupleDesc tupdesc)
 	int			i;
 
 	pq_beginmessage(&buf, 'T'); /* RowDescription */
-	pq_sendint16(&buf, tupdesc->natts);
+	pq_senduint16(&buf, tupdesc->natts);
 
 	for (i = 0; i < tupdesc->natts; ++i)
 	{
 		Form_pg_attribute attr = TupleDescAttr(tupdesc, i);
 
 		pq_sendstring(&buf, NameStr(attr->attname));
-		pq_sendint32(&buf, 0);	/* table oid */
-		pq_sendint16(&buf, 0);	/* attnum */
-		pq_sendint32(&buf, (int) attr->atttypid);
-		pq_sendint16(&buf, attr->attlen);
-		pq_sendint32(&buf, attr->atttypmod);
-		pq_sendint16(&buf, 0);	/* format code */
+		pq_senduint32(&buf, 0);	/* table oid */
+		pq_senduint16(&buf, 0);	/* attnum */
+		pq_senduint32(&buf, (uint32) attr->atttypid);
+		pq_senduint16(&buf, attr->attlen);
+		pq_senduint32(&buf, attr->atttypmod);
+		pq_senduint16(&buf, 0);	/* format code */
 	}
 
 	pq_endmessage(&buf);
@@ -67,7 +67,7 @@ printsimple(TupleTableSlot *slot, DestReceiver *self)
 
 	/* Prepare and send message */
 	pq_beginmessage(&buf, 'D');
-	pq_sendint16(&buf, tupdesc->natts);
+	pq_senduint16(&buf, tupdesc->natts);
 
 	for (i = 0; i < tupdesc->natts; ++i)
 	{
@@ -76,7 +76,7 @@ printsimple(TupleTableSlot *slot, DestReceiver *self)
 
 		if (slot->tts_isnull[i])
 		{
-			pq_sendint32(&buf, -1);
+			pq_senduint32(&buf, -1);
 			continue;
 		}
 
diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c
index a1d4415704..8b85e34baf 100644
--- a/src/backend/access/common/printtup.c
+++ b/src/backend/access/common/printtup.c
@@ -203,7 +203,7 @@ SendRowDescriptionMessage(StringInfo buf, TupleDesc typeinfo,
 	/* tuple descriptor message type */
 	pq_beginmessage_reuse(buf, 'T');
 	/* # of attrs in tuples */
-	pq_sendint16(buf, natts);
+	pq_senduint16(buf, natts);
 
 	if (proto >= 3)
 		SendRowDescriptionCols_3(buf, typeinfo, targetlist, formats);
@@ -280,12 +280,12 @@ SendRowDescriptionCols_3(StringInfo buf, TupleDesc typeinfo, List *targetlist, i
 			format = 0;
 
 		pq_writestring(buf, NameStr(att->attname));
-		pq_writeint32(buf, resorigtbl);
-		pq_writeint16(buf, resorigcol);
-		pq_writeint32(buf, atttypid);
-		pq_writeint16(buf, att->attlen);
-		pq_writeint32(buf, atttypmod);
-		pq_writeint16(buf, format);
+		pq_writeuint32(buf, resorigtbl);
+		pq_writeuint16(buf, resorigcol);
+		pq_writeuint32(buf, atttypid);
+		pq_writeuint16(buf, att->attlen);
+		pq_writeuint32(buf, atttypmod);
+		pq_writeuint16(buf, format);
 	}
 }
 
@@ -309,9 +309,9 @@ SendRowDescriptionCols_2(StringInfo buf, TupleDesc typeinfo, List *targetlist, i
 
 		pq_sendstring(buf, NameStr(att->attname));
 		/* column ID only info appears in protocol 3.0 and up */
-		pq_sendint32(buf, atttypid);
-		pq_sendint16(buf, att->attlen);
-		pq_sendint32(buf, atttypmod);
+		pq_senduint32(buf, atttypid);
+		pq_senduint16(buf, att->attlen);
+		pq_senduint32(buf, atttypmod);
 		/* format info only appears in protocol 3.0 and up */
 	}
 }
@@ -395,7 +395,7 @@ printtup(TupleTableSlot *slot, DestReceiver *self)
 	 */
 	pq_beginmessage_reuse(buf, 'D');
 
-	pq_sendint16(buf, natts);
+	pq_senduint16(buf, natts);
 
 	/*
 	 * send the attributes of this tuple
@@ -407,7 +407,7 @@ printtup(TupleTableSlot *slot, DestReceiver *self)
 
 		if (slot->tts_isnull[i])
 		{
-			pq_sendint32(buf, -1);
+			pq_senduint32(buf, -1);
 			continue;
 		}
 
@@ -436,7 +436,7 @@ printtup(TupleTableSlot *slot, DestReceiver *self)
 			bytea	   *outputbytes;
 
 			outputbytes = SendFunctionCall(&thisState->finfo, attr);
-			pq_sendint32(buf, VARSIZE(outputbytes) - VARHDRSZ);
+			pq_senduint32(buf, VARSIZE(outputbytes) - VARHDRSZ);
 			pq_sendbytes(buf, VARDATA(outputbytes),
 						 VARSIZE(outputbytes) - VARHDRSZ);
 		}
@@ -494,13 +494,13 @@ printtup_20(TupleTableSlot *slot, DestReceiver *self)
 		k >>= 1;
 		if (k == 0)				/* end of byte? */
 		{
-			pq_sendint8(buf, j);
+			pq_senduint8(buf, j);
 			j = 0;
 			k = 1 << 7;
 		}
 	}
 	if (k != (1 << 7))			/* flush last partial byte */
-		pq_sendint8(buf, j);
+		pq_senduint8(buf, j);
 
 	/*
 	 * send the attributes of this tuple
@@ -679,13 +679,13 @@ printtup_internal_20(TupleTableSlot *slot, DestReceiver *self)
 		k >>= 1;
 		if (k == 0)				/* end of byte? */
 		{
-			pq_sendint8(buf, j);
+			pq_senduint8(buf, j);
 			j = 0;
 			k = 1 << 7;
 		}
 	}
 	if (k != (1 << 7))			/* flush last partial byte */
-		pq_sendint8(buf, j);
+		pq_senduint8(buf, j);
 
 	/*
 	 * send the attributes of this tuple
@@ -702,7 +702,7 @@ printtup_internal_20(TupleTableSlot *slot, DestReceiver *self)
 		Assert(thisState->format == 1);
 
 		outputbytes = SendFunctionCall(&thisState->finfo, attr);
-		pq_sendint32(buf, VARSIZE(outputbytes) - VARHDRSZ);
+		pq_senduint32(buf, VARSIZE(outputbytes) - VARHDRSZ);
 		pq_sendbytes(buf, VARDATA(outputbytes),
 					 VARSIZE(outputbytes) - VARHDRSZ);
 	}
diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c
index 1d631b7275..f5168a8e50 100644
--- a/src/backend/access/transam/parallel.c
+++ b/src/backend/access/transam/parallel.c
@@ -1281,8 +1281,8 @@ ParallelWorkerMain(Datum main_arg)
 	 * in this case.
 	 */
 	pq_beginmessage(&msgbuf, 'K');
-	pq_sendint32(&msgbuf, (int32) MyProcPid);
-	pq_sendint32(&msgbuf, (int32) MyCancelKey);
+	pq_senduint32(&msgbuf, (uint32) MyProcPid);
+	pq_senduint32(&msgbuf, (uint32) MyCancelKey);
 	pq_endmessage(&msgbuf);
 
 	/*
diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c
index ee7c6d41b4..3747faf89c 100644
--- a/src/backend/commands/async.c
+++ b/src/backend/commands/async.c
@@ -2100,7 +2100,7 @@ NotifyMyFrontEnd(const char *channel, const char *payload, int32 srcPid)
 		StringInfoData buf;
 
 		pq_beginmessage(&buf, 'A');
-		pq_sendint32(&buf, srcPid);
+		pq_senduint32(&buf, srcPid);
 		pq_sendstring(&buf, channel);
 		if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 3)
 			pq_sendstring(&buf, payload);
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 3a66cb5025..abbc0f4bfa 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -357,9 +357,9 @@ SendCopyBegin(CopyState cstate)
 
 		pq_beginmessage(&buf, 'H');
 		pq_sendbyte(&buf, format);	/* overall format */
-		pq_sendint16(&buf, natts);
+		pq_senduint16(&buf, natts);
 		for (i = 0; i < natts; i++)
-			pq_sendint16(&buf, format); /* per-column formats */
+			pq_senduint16(&buf, format); /* per-column formats */
 		pq_endmessage(&buf);
 		cstate->copy_dest = COPY_NEW_FE;
 	}
@@ -390,9 +390,9 @@ ReceiveCopyBegin(CopyState cstate)
 
 		pq_beginmessage(&buf, 'G');
 		pq_sendbyte(&buf, format);	/* overall format */
-		pq_sendint16(&buf, natts);
+		pq_senduint16(&buf, natts);
 		for (i = 0; i < natts; i++)
-			pq_sendint16(&buf, format); /* per-column formats */
+			pq_senduint16(&buf, format); /* per-column formats */
 		pq_endmessage(&buf);
 		cstate->copy_dest = COPY_NEW_FE;
 		cstate->fe_msgbuf = makeStringInfo();
diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c
index 63f37902e6..1727c4d692 100644
--- a/src/backend/libpq/auth.c
+++ b/src/backend/libpq/auth.c
@@ -621,7 +621,7 @@ sendAuthRequest(Port *port, AuthRequest areq, const char *extradata, int extrale
 	CHECK_FOR_INTERRUPTS();
 
 	pq_beginmessage(&buf, 'R');
-	pq_sendint32(&buf, (int32) areq);
+	pq_senduint32(&buf, (uint32) areq);
 	if (extralen > 0)
 		pq_sendbytes(&buf, extradata, extralen);
 
diff --git a/src/backend/libpq/pqformat.c b/src/backend/libpq/pqformat.c
index 1c7e99019d..dc15f3798a 100644
--- a/src/backend/libpq/pqformat.c
+++ b/src/backend/libpq/pqformat.c
@@ -149,13 +149,13 @@ pq_sendcountedtext(StringInfo buf, const char *str, int slen,
 	if (p != str)				/* actual conversion has been done? */
 	{
 		slen = strlen(p);
-		pq_sendint32(buf, slen + extra);
+		pq_senduint32(buf, slen + extra);
 		appendBinaryStringInfoNT(buf, p, slen);
 		pfree(p);
 	}
 	else
 	{
-		pq_sendint32(buf, slen + extra);
+		pq_senduint32(buf, slen + extra);
 		appendBinaryStringInfoNT(buf, str, slen);
 	}
 }
@@ -260,7 +260,7 @@ pq_sendfloat4(StringInfo buf, float4 f)
 	}			swap;
 
 	swap.f = f;
-	pq_sendint32(buf, swap.i);
+	pq_senduint32(buf, swap.i);
 }
 
 /* --------------------------------
@@ -284,7 +284,7 @@ pq_sendfloat8(StringInfo buf, float8 f)
 	}			swap;
 
 	swap.f = f;
-	pq_sendint64(buf, swap.i);
+	pq_senduint64(buf, swap.i);
 }
 
 /* --------------------------------
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index a4b53b33cd..46c5cf8890 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -2249,8 +2249,8 @@ SendNegotiateProtocolVersion(List *unrecognized_protocol_options)
 	ListCell   *lc;
 
 	pq_beginmessage(&buf, 'v'); /* NegotiateProtocolVersion */
-	pq_sendint32(&buf, PG_PROTOCOL_LATEST);
-	pq_sendint32(&buf, list_length(unrecognized_protocol_options));
+	pq_senduint32(&buf, PG_PROTOCOL_LATEST);
+	pq_senduint32(&buf, list_length(unrecognized_protocol_options));
 	foreach(lc, unrecognized_protocol_options)
 		pq_sendstring(&buf, lfirst(lc));
 	pq_endmessage(&buf);
diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c
index 5688cbe2e9..44fabc862e 100644
--- a/src/backend/replication/basebackup.c
+++ b/src/backend/replication/basebackup.c
@@ -307,7 +307,7 @@ perform_base_backup(basebackup_options *opt)
 			/* Send CopyOutResponse message */
 			pq_beginmessage(&buf, 'H');
 			pq_sendbyte(&buf, 0);	/* overall format */
-			pq_sendint16(&buf, 0);	/* natts */
+			pq_senduint16(&buf, 0);	/* natts */
 			pq_endmessage(&buf);
 
 			if (ti->path == NULL)
@@ -771,7 +771,7 @@ send_int8_string(StringInfoData *buf, int64 intval)
 	char		is[32];
 
 	sprintf(is, INT64_FORMAT, intval);
-	pq_sendint32(buf, strlen(is));
+	pq_senduint32(buf, strlen(is));
 	pq_sendbytes(buf, is, strlen(is));
 }
 
@@ -783,34 +783,34 @@ SendBackupHeader(List *tablespaces)
 
 	/* Construct and send the directory information */
 	pq_beginmessage(&buf, 'T'); /* RowDescription */
-	pq_sendint16(&buf, 3);		/* 3 fields */
+	pq_senduint16(&buf, 3);		/* 3 fields */
 
 	/* First field - spcoid */
 	pq_sendstring(&buf, "spcoid");
-	pq_sendint32(&buf, 0);		/* table oid */
-	pq_sendint16(&buf, 0);		/* attnum */
-	pq_sendint32(&buf, OIDOID); /* type oid */
-	pq_sendint16(&buf, 4);		/* typlen */
-	pq_sendint32(&buf, 0);		/* typmod */
-	pq_sendint16(&buf, 0);		/* format code */
+	pq_senduint32(&buf, 0);		/* table oid */
+	pq_senduint16(&buf, 0);		/* attnum */
+	pq_senduint32(&buf, OIDOID); /* type oid */
+	pq_senduint16(&buf, 4);		/* typlen */
+	pq_senduint32(&buf, 0);		/* typmod */
+	pq_senduint16(&buf, 0);		/* format code */
 
 	/* Second field - spcpath */
 	pq_sendstring(&buf, "spclocation");
-	pq_sendint32(&buf, 0);
-	pq_sendint16(&buf, 0);
-	pq_sendint32(&buf, TEXTOID);
-	pq_sendint16(&buf, -1);
-	pq_sendint32(&buf, 0);
-	pq_sendint16(&buf, 0);
+	pq_senduint32(&buf, 0);
+	pq_senduint16(&buf, 0);
+	pq_senduint32(&buf, TEXTOID);
+	pq_senduint16(&buf, -1);
+	pq_senduint32(&buf, 0);
+	pq_senduint16(&buf, 0);
 
 	/* Third field - size */
 	pq_sendstring(&buf, "size");
-	pq_sendint32(&buf, 0);
-	pq_sendint16(&buf, 0);
-	pq_sendint32(&buf, INT8OID);
-	pq_sendint16(&buf, 8);
-	pq_sendint32(&buf, 0);
-	pq_sendint16(&buf, 0);
+	pq_senduint32(&buf, 0);
+	pq_senduint16(&buf, 0);
+	pq_senduint32(&buf, INT8OID);
+	pq_senduint16(&buf, 8);
+	pq_senduint32(&buf, 0);
+	pq_senduint16(&buf, 0);
 	pq_endmessage(&buf);
 
 	foreach(lc, tablespaces)
@@ -819,28 +819,28 @@ SendBackupHeader(List *tablespaces)
 
 		/* Send one datarow message */
 		pq_beginmessage(&buf, 'D');
-		pq_sendint16(&buf, 3);	/* number of columns */
+		pq_senduint16(&buf, 3);	/* number of columns */
 		if (ti->path == NULL)
 		{
-			pq_sendint32(&buf, -1); /* Length = -1 ==> NULL */
-			pq_sendint32(&buf, -1);
+			pq_senduint32(&buf, -1); /* Length = -1 ==> NULL */
+			pq_senduint32(&buf, -1);
 		}
 		else
 		{
 			Size		len;
 
 			len = strlen(ti->oid);
-			pq_sendint32(&buf, len);
+			pq_senduint32(&buf, len);
 			pq_sendbytes(&buf, ti->oid, len);
 
 			len = strlen(ti->path);
-			pq_sendint32(&buf, len);
+			pq_senduint32(&buf, len);
 			pq_sendbytes(&buf, ti->path, len);
 		}
 		if (ti->size >= 0)
 			send_int8_string(&buf, ti->size / 1024);
 		else
-			pq_sendint32(&buf, -1); /* NULL */
+			pq_senduint32(&buf, -1); /* NULL */
 
 		pq_endmessage(&buf);
 	}
@@ -861,42 +861,42 @@ SendXlogRecPtrResult(XLogRecPtr ptr, TimeLineID tli)
 	Size		len;
 
 	pq_beginmessage(&buf, 'T'); /* RowDescription */
-	pq_sendint16(&buf, 2);		/* 2 fields */
+	pq_senduint16(&buf, 2);		/* 2 fields */
 
 	/* Field headers */
 	pq_sendstring(&buf, "recptr");
-	pq_sendint32(&buf, 0);		/* table oid */
-	pq_sendint16(&buf, 0);		/* attnum */
-	pq_sendint32(&buf, TEXTOID);	/* type oid */
-	pq_sendint16(&buf, -1);
-	pq_sendint32(&buf, 0);
-	pq_sendint16(&buf, 0);
+	pq_senduint32(&buf, 0);		/* table oid */
+	pq_senduint16(&buf, 0);		/* attnum */
+	pq_senduint32(&buf, TEXTOID);	/* type oid */
+	pq_senduint16(&buf, -1);
+	pq_senduint32(&buf, 0);
+	pq_senduint16(&buf, 0);
 
 	pq_sendstring(&buf, "tli");
-	pq_sendint32(&buf, 0);		/* table oid */
-	pq_sendint16(&buf, 0);		/* attnum */
+	pq_senduint32(&buf, 0);		/* table oid */
+	pq_senduint16(&buf, 0);		/* attnum */
 
 	/*
 	 * int8 may seem like a surprising data type for this, but in theory int4
 	 * would not be wide enough for this, as TimeLineID is unsigned.
 	 */
-	pq_sendint32(&buf, INT8OID);	/* type oid */
-	pq_sendint16(&buf, -1);
-	pq_sendint32(&buf, 0);
-	pq_sendint16(&buf, 0);
+	pq_senduint32(&buf, INT8OID);	/* type oid */
+	pq_senduint16(&buf, -1);
+	pq_senduint32(&buf, 0);
+	pq_senduint16(&buf, 0);
 	pq_endmessage(&buf);
 
 	/* Data row */
 	pq_beginmessage(&buf, 'D');
-	pq_sendint16(&buf, 2);		/* number of columns */
+	pq_senduint16(&buf, 2);		/* number of columns */
 
 	len = snprintf(str, sizeof(str),
 				   "%X/%X", (uint32) (ptr >> 32), (uint32) ptr);
-	pq_sendint32(&buf, len);
+	pq_senduint32(&buf, len);
 	pq_sendbytes(&buf, str, len);
 
 	len = snprintf(str, sizeof(str), "%u", tli);
-	pq_sendint32(&buf, len);
+	pq_senduint32(&buf, len);
 	pq_sendbytes(&buf, str, len);
 
 	pq_endmessage(&buf);
diff --git a/src/backend/replication/logical/proto.c b/src/backend/replication/logical/proto.c
index 19451714da..9cf3d46f86 100644
--- a/src/backend/replication/logical/proto.c
+++ b/src/backend/replication/logical/proto.c
@@ -48,9 +48,9 @@ logicalrep_write_begin(StringInfo out, ReorderBufferTXN *txn)
 	pq_sendbyte(out, 'B');		/* BEGIN */
 
 	/* fixed fields */
-	pq_sendint64(out, txn->final_lsn);
-	pq_sendint64(out, txn->commit_time);
-	pq_sendint32(out, txn->xid);
+	pq_senduint64(out, txn->final_lsn);
+	pq_senduint64(out, txn->commit_time);
+	pq_senduint32(out, txn->xid);
 }
 
 /*
@@ -83,9 +83,9 @@ logicalrep_write_commit(StringInfo out, ReorderBufferTXN *txn,
 	pq_sendbyte(out, flags);
 
 	/* send fields */
-	pq_sendint64(out, commit_lsn);
-	pq_sendint64(out, txn->end_lsn);
-	pq_sendint64(out, txn->commit_time);
+	pq_senduint64(out, commit_lsn);
+	pq_senduint64(out, txn->end_lsn);
+	pq_senduint64(out, txn->commit_time);
 }
 
 /*
@@ -116,7 +116,7 @@ logicalrep_write_origin(StringInfo out, const char *origin,
 	pq_sendbyte(out, 'O');		/* ORIGIN */
 
 	/* fixed fields */
-	pq_sendint64(out, origin_lsn);
+	pq_senduint64(out, origin_lsn);
 
 	/* origin string */
 	pq_sendstring(out, origin);
@@ -148,7 +148,7 @@ logicalrep_write_insert(StringInfo out, Relation rel, HeapTuple newtuple)
 		   rel->rd_rel->relreplident == REPLICA_IDENTITY_INDEX);
 
 	/* use Oid as relation identifier */
-	pq_sendint32(out, RelationGetRelid(rel));
+	pq_senduint32(out, RelationGetRelid(rel));
 
 	pq_sendbyte(out, 'N');		/* new tuple follows */
 	logicalrep_write_tuple(out, rel, newtuple);
@@ -192,7 +192,7 @@ logicalrep_write_update(StringInfo out, Relation rel, HeapTuple oldtuple,
 		   rel->rd_rel->relreplident == REPLICA_IDENTITY_INDEX);
 
 	/* use Oid as relation identifier */
-	pq_sendint32(out, RelationGetRelid(rel));
+	pq_senduint32(out, RelationGetRelid(rel));
 
 	if (oldtuple != NULL)
 	{
@@ -261,7 +261,7 @@ logicalrep_write_delete(StringInfo out, Relation rel, HeapTuple oldtuple)
 	pq_sendbyte(out, 'D');		/* action DELETE */
 
 	/* use Oid as relation identifier */
-	pq_sendint32(out, RelationGetRelid(rel));
+	pq_senduint32(out, RelationGetRelid(rel));
 
 	if (rel->rd_rel->relreplident == REPLICA_IDENTITY_FULL)
 		pq_sendbyte(out, 'O');	/* old tuple follows */
@@ -309,17 +309,17 @@ logicalrep_write_truncate(StringInfo out,
 
 	pq_sendbyte(out, 'T');		/* action TRUNCATE */
 
-	pq_sendint32(out, nrelids);
+	pq_senduint32(out, nrelids);
 
 	/* encode and send truncate flags */
 	if (cascade)
 		flags |= TRUNCATE_CASCADE;
 	if (restart_seqs)
 		flags |= TRUNCATE_RESTART_SEQS;
-	pq_sendint8(out, flags);
+	pq_senduint8(out, flags);
 
 	for (i = 0; i < nrelids; i++)
-		pq_sendint32(out, relids[i]);
+		pq_senduint32(out, relids[i]);
 }
 
 /*
@@ -358,7 +358,7 @@ logicalrep_write_rel(StringInfo out, Relation rel)
 	pq_sendbyte(out, 'R');		/* sending RELATION */
 
 	/* use Oid as relation identifier */
-	pq_sendint32(out, RelationGetRelid(rel));
+	pq_senduint32(out, RelationGetRelid(rel));
 
 	/* send qualified relation name */
 	logicalrep_write_namespace(out, RelationGetNamespace(rel));
@@ -415,7 +415,7 @@ logicalrep_write_typ(StringInfo out, Oid typoid)
 	typtup = (Form_pg_type) GETSTRUCT(tup);
 
 	/* use Oid as relation identifier */
-	pq_sendint32(out, typoid);
+	pq_senduint32(out, typoid);
 
 	/* send qualified type name */
 	logicalrep_write_namespace(out, typtup->typnamespace);
@@ -457,7 +457,7 @@ logicalrep_write_tuple(StringInfo out, Relation rel, HeapTuple tuple)
 			continue;
 		nliveatts++;
 	}
-	pq_sendint16(out, nliveatts);
+	pq_senduint16(out, nliveatts);
 
 	/* try to allocate enough memory from the get-go */
 	enlargeStringInfo(out, tuple->t_len +
@@ -577,7 +577,7 @@ logicalrep_write_attrs(StringInfo out, Relation rel)
 			continue;
 		nliveatts++;
 	}
-	pq_sendint16(out, nliveatts);
+	pq_senduint16(out, nliveatts);
 
 	/* fetch bitmap of REPLICATION IDENTITY attributes */
 	replidentfull = (rel->rd_rel->relreplident == REPLICA_IDENTITY_FULL);
@@ -606,10 +606,10 @@ logicalrep_write_attrs(StringInfo out, Relation rel)
 		pq_sendstring(out, NameStr(att->attname));
 
 		/* attribute type id */
-		pq_sendint32(out, (int) att->atttypid);
+		pq_senduint32(out, (int) att->atttypid);
 
 		/* attribute mode */
-		pq_sendint32(out, att->atttypmod);
+		pq_senduint32(out, att->atttypmod);
 	}
 
 	bms_free(idattrs);
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index 0d2b795e39..d05e267607 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -1394,10 +1394,10 @@ send_feedback(XLogRecPtr recvpos, bool force, bool requestReply)
 		resetStringInfo(reply_message);
 
 	pq_sendbyte(reply_message, 'r');
-	pq_sendint64(reply_message, recvpos);	/* write */
-	pq_sendint64(reply_message, flushpos);	/* flush */
-	pq_sendint64(reply_message, writepos);	/* apply */
-	pq_sendint64(reply_message, now);	/* sendTime */
+	pq_senduint64(reply_message, recvpos);	/* write */
+	pq_senduint64(reply_message, flushpos);	/* flush */
+	pq_senduint64(reply_message, writepos);	/* apply */
+	pq_senduint64(reply_message, now);	/* sendTime */
 	pq_sendbyte(reply_message, requestReply);	/* replyRequested */
 
 	elog(DEBUG2, "sending feedback (force %d) to recv %X/%X, write %X/%X, flush %X/%X",
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index 987bb84683..1dec647871 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -1164,10 +1164,10 @@ XLogWalRcvSendReply(bool force, bool requestReply)
 
 	resetStringInfo(&reply_message);
 	pq_sendbyte(&reply_message, 'r');
-	pq_sendint64(&reply_message, writePtr);
-	pq_sendint64(&reply_message, flushPtr);
-	pq_sendint64(&reply_message, applyPtr);
-	pq_sendint64(&reply_message, GetCurrentTimestamp());
+	pq_senduint64(&reply_message, writePtr);
+	pq_senduint64(&reply_message, flushPtr);
+	pq_senduint64(&reply_message, applyPtr);
+	pq_senduint64(&reply_message, GetCurrentTimestamp());
 	pq_sendbyte(&reply_message, requestReply ? 1 : 0);
 
 	/* Send it */
@@ -1285,11 +1285,11 @@ XLogWalRcvSendHSFeedback(bool immed)
 	/* Construct the message and send it. */
 	resetStringInfo(&reply_message);
 	pq_sendbyte(&reply_message, 'h');
-	pq_sendint64(&reply_message, GetCurrentTimestamp());
-	pq_sendint32(&reply_message, xmin);
-	pq_sendint32(&reply_message, xmin_epoch);
-	pq_sendint32(&reply_message, catalog_xmin);
-	pq_sendint32(&reply_message, catalog_xmin_epoch);
+	pq_senduint64(&reply_message, GetCurrentTimestamp());
+	pq_senduint32(&reply_message, xmin);
+	pq_senduint32(&reply_message, xmin_epoch);
+	pq_senduint32(&reply_message, catalog_xmin);
+	pq_senduint32(&reply_message, catalog_xmin_epoch);
 	walrcv_send(wrconn, reply_message.data, reply_message.len);
 	if (TransactionIdIsValid(xmin) || TransactionIdIsValid(catalog_xmin))
 		master_has_standby_xmin = true;
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index e47ddca6bc..0e4669dab2 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -445,32 +445,32 @@ SendTimeLineHistory(TimeLineHistoryCmd *cmd)
 
 	/* Send a RowDescription message */
 	pq_beginmessage(&buf, 'T');
-	pq_sendint16(&buf, 2);		/* 2 fields */
+	pq_senduint16(&buf, 2);		/* 2 fields */
 
 	/* first field */
 	pq_sendstring(&buf, "filename");	/* col name */
-	pq_sendint32(&buf, 0);		/* table oid */
-	pq_sendint16(&buf, 0);		/* attnum */
-	pq_sendint32(&buf, TEXTOID);	/* type oid */
-	pq_sendint16(&buf, -1);		/* typlen */
-	pq_sendint32(&buf, 0);		/* typmod */
-	pq_sendint16(&buf, 0);		/* format code */
+	pq_senduint32(&buf, 0);		/* table oid */
+	pq_senduint16(&buf, 0);		/* attnum */
+	pq_senduint32(&buf, TEXTOID);	/* type oid */
+	pq_senduint16(&buf, -1);		/* typlen */
+	pq_senduint32(&buf, 0);		/* typmod */
+	pq_senduint16(&buf, 0);		/* format code */
 
 	/* second field */
 	pq_sendstring(&buf, "content"); /* col name */
-	pq_sendint32(&buf, 0);		/* table oid */
-	pq_sendint16(&buf, 0);		/* attnum */
-	pq_sendint32(&buf, BYTEAOID);	/* type oid */
-	pq_sendint16(&buf, -1);		/* typlen */
-	pq_sendint32(&buf, 0);		/* typmod */
-	pq_sendint16(&buf, 0);		/* format code */
+	pq_senduint32(&buf, 0);		/* table oid */
+	pq_senduint16(&buf, 0);		/* attnum */
+	pq_senduint32(&buf, BYTEAOID);	/* type oid */
+	pq_senduint16(&buf, -1);		/* typlen */
+	pq_senduint32(&buf, 0);		/* typmod */
+	pq_senduint16(&buf, 0);		/* format code */
 	pq_endmessage(&buf);
 
 	/* Send a DataRow message */
 	pq_beginmessage(&buf, 'D');
-	pq_sendint16(&buf, 2);		/* # of columns */
+	pq_senduint16(&buf, 2);		/* # of columns */
 	len = strlen(histfname);
-	pq_sendint32(&buf, len);	/* col1 len */
+	pq_senduint32(&buf, len);	/* col1 len */
 	pq_sendbytes(&buf, histfname, len);
 
 	fd = OpenTransientFile(path, O_RDONLY | PG_BINARY);
@@ -490,7 +490,7 @@ SendTimeLineHistory(TimeLineHistoryCmd *cmd)
 				(errcode_for_file_access(),
 				 errmsg("could not seek to beginning of file \"%s\": %m", path)));
 
-	pq_sendint32(&buf, histfilelen);	/* col2 len */
+	pq_senduint32(&buf, histfilelen);	/* col2 len */
 
 	bytesleft = histfilelen;
 	while (bytesleft > 0)
@@ -647,7 +647,7 @@ StartReplication(StartReplicationCmd *cmd)
 		/* Send a CopyBothResponse message, and start streaming */
 		pq_beginmessage(&buf, 'W');
 		pq_sendbyte(&buf, 0);
-		pq_sendint16(&buf, 0);
+		pq_senduint16(&buf, 0);
 		pq_endmessage(&buf);
 		pq_flush();
 
@@ -1066,7 +1066,7 @@ StartLogicalReplication(StartReplicationCmd *cmd)
 	/* Send a CopyBothResponse message, and start streaming */
 	pq_beginmessage(&buf, 'W');
 	pq_sendbyte(&buf, 0);
-	pq_sendint16(&buf, 0);
+	pq_senduint16(&buf, 0);
 	pq_endmessage(&buf);
 	pq_flush();
 
@@ -1132,14 +1132,14 @@ WalSndPrepareWrite(LogicalDecodingContext *ctx, XLogRecPtr lsn, TransactionId xi
 	resetStringInfo(ctx->out);
 
 	pq_sendbyte(ctx->out, 'w');
-	pq_sendint64(ctx->out, lsn);	/* dataStart */
-	pq_sendint64(ctx->out, lsn);	/* walEnd */
+	pq_senduint64(ctx->out, lsn);	/* dataStart */
+	pq_senduint64(ctx->out, lsn);	/* walEnd */
 
 	/*
 	 * Fill out the sendtime later, just as it's done in XLogSendPhysical, but
 	 * reserve space here.
 	 */
-	pq_sendint64(ctx->out, 0);	/* sendtime */
+	pq_senduint64(ctx->out, 0);	/* sendtime */
 }
 
 /*
@@ -1165,7 +1165,7 @@ WalSndWriteData(LogicalDecodingContext *ctx, XLogRecPtr lsn, TransactionId xid,
 	 */
 	resetStringInfo(&tmpbuf);
 	now = GetCurrentTimestamp();
-	pq_sendint64(&tmpbuf, now);
+	pq_senduint64(&tmpbuf, now);
 	memcpy(&ctx->out->data[1 + sizeof(int64) + sizeof(int64)],
 		   tmpbuf.data, sizeof(int64));
 
@@ -2701,9 +2701,9 @@ XLogSendPhysical(void)
 	resetStringInfo(&output_message);
 	pq_sendbyte(&output_message, 'w');
 
-	pq_sendint64(&output_message, startptr);	/* dataStart */
-	pq_sendint64(&output_message, SendRqstPtr); /* walEnd */
-	pq_sendint64(&output_message, 0);	/* sendtime, filled in last */
+	pq_senduint64(&output_message, startptr);	/* dataStart */
+	pq_senduint64(&output_message, SendRqstPtr); /* walEnd */
+	pq_senduint64(&output_message, 0);	/* sendtime, filled in last */
 
 	/*
 	 * Read the log directly into the output buffer to avoid extra memcpy
@@ -2718,7 +2718,7 @@ XLogSendPhysical(void)
 	 * Fill the send timestamp last, so that it is taken as late as possible.
 	 */
 	resetStringInfo(&tmpbuf);
-	pq_sendint64(&tmpbuf, GetCurrentTimestamp());
+	pq_senduint64(&tmpbuf, GetCurrentTimestamp());
 	memcpy(&output_message.data[1 + sizeof(int64) + sizeof(int64)],
 		   tmpbuf.data, sizeof(int64));
 
@@ -3339,8 +3339,8 @@ WalSndKeepalive(bool requestReply)
 	/* construct the message... */
 	resetStringInfo(&output_message);
 	pq_sendbyte(&output_message, 'k');
-	pq_sendint64(&output_message, sentPtr);
-	pq_sendint64(&output_message, GetCurrentTimestamp());
+	pq_senduint64(&output_message, sentPtr);
+	pq_senduint64(&output_message, GetCurrentTimestamp());
 	pq_sendbyte(&output_message, requestReply ? 1 : 0);
 
 	/* ... and send it wrapped in CopyData */
diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c
index d16ba5ec92..0be7749063 100644
--- a/src/backend/tcop/fastpath.c
+++ b/src/backend/tcop/fastpath.c
@@ -143,7 +143,7 @@ SendFunctionResult(Datum retval, bool isnull, Oid rettype, int16 format)
 	if (isnull)
 	{
 		if (newstyle)
-			pq_sendint32(&buf, -1);
+			pq_senduint32(&buf, -1);
 	}
 	else
 	{
@@ -169,7 +169,7 @@ SendFunctionResult(Datum retval, bool isnull, Oid rettype, int16 format)
 
 			getTypeBinaryOutputInfo(rettype, &typsend, &typisvarlena);
 			outputbytes = OidSendFunctionCall(typsend, retval);
-			pq_sendint32(&buf, VARSIZE(outputbytes) - VARHDRSZ);
+			pq_senduint32(&buf, VARSIZE(outputbytes) - VARHDRSZ);
 			pq_sendbytes(&buf, VARDATA(outputbytes),
 						 VARSIZE(outputbytes) - VARHDRSZ);
 			pfree(outputbytes);
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index f4133953be..ff20f5b156 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -2382,13 +2382,13 @@ exec_describe_statement_message(const char *stmt_name)
 	 */
 	pq_beginmessage_reuse(&row_description_buf, 't');	/* parameter description
 														 * message type */
-	pq_sendint16(&row_description_buf, psrc->num_params);
+	pq_senduint16(&row_description_buf, psrc->num_params);
 
 	for (i = 0; i < psrc->num_params; i++)
 	{
 		Oid			ptype = psrc->param_types[i];
 
-		pq_sendint32(&row_description_buf, (int) ptype);
+		pq_senduint32(&row_description_buf, (uint32) ptype);
 	}
 	pq_endmessage_reuse(&row_description_buf);
 
@@ -3826,8 +3826,8 @@ PostgresMain(int argc, char *argv[],
 		StringInfoData buf;
 
 		pq_beginmessage(&buf, 'K');
-		pq_sendint32(&buf, (int32) MyProcPid);
-		pq_sendint32(&buf, (int32) MyCancelKey);
+		pq_senduint32(&buf, (uint32) MyProcPid);
+		pq_senduint32(&buf, (uint32) MyCancelKey);
 		pq_endmessage(&buf);
 		/* Need not flush since ReadyForQuery will do it. */
 	}
diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
index 0cbdbe5587..8209203bcd 100644
--- a/src/backend/utils/adt/arrayfuncs.c
+++ b/src/backend/utils/adt/arrayfuncs.c
@@ -1590,13 +1590,13 @@ array_send(PG_FUNCTION_ARGS)
 	pq_begintypsend(&buf);
 
 	/* Send the array header information */
-	pq_sendint32(&buf, ndim);
-	pq_sendint32(&buf, AARR_HASNULL(v) ? 1 : 0);
-	pq_sendint32(&buf, element_type);
+	pq_senduint32(&buf, ndim);
+	pq_senduint32(&buf, AARR_HASNULL(v) ? 1 : 0);
+	pq_senduint32(&buf, element_type);
 	for (i = 0; i < ndim; i++)
 	{
-		pq_sendint32(&buf, dim[i]);
-		pq_sendint32(&buf, lb[i]);
+		pq_senduint32(&buf, dim[i]);
+		pq_senduint32(&buf, lb[i]);
 	}
 
 	/* Send the array elements using the element's own sendproc */
@@ -1614,14 +1614,14 @@ array_send(PG_FUNCTION_ARGS)
 		if (isnull)
 		{
 			/* -1 length means a NULL */
-			pq_sendint32(&buf, -1);
+			pq_senduint32(&buf, -1);
 		}
 		else
 		{
 			bytea	   *outputbytes;
 
 			outputbytes = SendFunctionCall(&my_extra->proc, itemvalue);
-			pq_sendint32(&buf, VARSIZE(outputbytes) - VARHDRSZ);
+			pq_senduint32(&buf, VARSIZE(outputbytes) - VARHDRSZ);
 			pq_sendbytes(&buf, VARDATA(outputbytes),
 						 VARSIZE(outputbytes) - VARHDRSZ);
 			pfree(outputbytes);
diff --git a/src/backend/utils/adt/cash.c b/src/backend/utils/adt/cash.c
index c787dd3419..2e4d8022bb 100644
--- a/src/backend/utils/adt/cash.c
+++ b/src/backend/utils/adt/cash.c
@@ -527,7 +527,7 @@ cash_send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint64(&buf, arg1);
+	pq_senduint64(&buf, arg1);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index 87146a2161..94d878f8c4 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -237,7 +237,7 @@ date_send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, date);
+	pq_senduint32(&buf, date);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
@@ -1341,7 +1341,7 @@ time_send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint64(&buf, time);
+	pq_senduint64(&buf, time);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
@@ -2113,8 +2113,8 @@ timetz_send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint64(&buf, time->time);
-	pq_sendint32(&buf, time->zone);
+	pq_senduint64(&buf, time->time);
+	pq_senduint32(&buf, time->zone);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c
index f57380a4df..a9d59612f8 100644
--- a/src/backend/utils/adt/geo_ops.c
+++ b/src/backend/utils/adt/geo_ops.c
@@ -1432,7 +1432,7 @@ path_send(PG_FUNCTION_ARGS)
 
 	pq_begintypsend(&buf);
 	pq_sendbyte(&buf, path->closed ? 1 : 0);
-	pq_sendint32(&buf, path->npts);
+	pq_senduint32(&buf, path->npts);
 	for (i = 0; i < path->npts; i++)
 	{
 		pq_sendfloat8(&buf, path->p[i].x);
@@ -3513,7 +3513,7 @@ poly_send(PG_FUNCTION_ARGS)
 	int32		i;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, poly->npts);
+	pq_senduint32(&buf, poly->npts);
 	for (i = 0; i < poly->npts; i++)
 	{
 		pq_sendfloat8(&buf, poly->p[i].x);
diff --git a/src/backend/utils/adt/int.c b/src/backend/utils/adt/int.c
index 02783d8d6f..5c901e961e 100644
--- a/src/backend/utils/adt/int.c
+++ b/src/backend/utils/adt/int.c
@@ -97,7 +97,7 @@ int2send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint16(&buf, arg1);
+	pq_senduint16(&buf, arg1);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
@@ -302,7 +302,7 @@ int4send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, arg1);
+	pq_senduint32(&buf, arg1);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c
index 96686ccb2c..0ce9994cf3 100644
--- a/src/backend/utils/adt/int8.c
+++ b/src/backend/utils/adt/int8.c
@@ -175,7 +175,7 @@ int8send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint64(&buf, arg1);
+	pq_senduint64(&buf, arg1);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
diff --git a/src/backend/utils/adt/jsonb.c b/src/backend/utils/adt/jsonb.c
index 6940b11c29..9e4a25a73c 100644
--- a/src/backend/utils/adt/jsonb.c
+++ b/src/backend/utils/adt/jsonb.c
@@ -155,7 +155,7 @@ jsonb_send(PG_FUNCTION_ARGS)
 	(void) JsonbToCString(jtext, &jb->root, VARSIZE(jb));
 
 	pq_begintypsend(&buf);
-	pq_sendint8(&buf, version);
+	pq_senduint8(&buf, version);
 	pq_sendtext(&buf, jtext->data, jtext->len);
 	pfree(jtext->data);
 	pfree(jtext);
diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c
index fae97135db..c45122a59a 100644
--- a/src/backend/utils/adt/nabstime.c
+++ b/src/backend/utils/adt/nabstime.c
@@ -315,7 +315,7 @@ abstimesend(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, time);
+	pq_senduint32(&buf, time);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
@@ -674,7 +674,7 @@ reltimesend(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, time);
+	pq_senduint32(&buf, time);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
@@ -794,9 +794,9 @@ tintervalsend(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, tinterval->status);
-	pq_sendint32(&buf, tinterval->data[0]);
-	pq_sendint32(&buf, tinterval->data[1]);
+	pq_senduint32(&buf, tinterval->status);
+	pq_senduint32(&buf, tinterval->data[0]);
+	pq_senduint32(&buf, tinterval->data[1]);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 074294cbcc..6a12ba8cb7 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -877,12 +877,12 @@ numeric_send(PG_FUNCTION_ARGS)
 
 	pq_begintypsend(&buf);
 
-	pq_sendint16(&buf, x.ndigits);
-	pq_sendint16(&buf, x.weight);
-	pq_sendint16(&buf, x.sign);
-	pq_sendint16(&buf, x.dscale);
+	pq_senduint16(&buf, x.ndigits);
+	pq_senduint16(&buf, x.weight);
+	pq_senduint16(&buf, x.sign);
+	pq_senduint16(&buf, x.dscale);
 	for (i = 0; i < x.ndigits; i++)
-		pq_sendint16(&buf, x.digits[i]);
+		pq_senduint16(&buf, x.digits[i]);
 
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
@@ -3781,19 +3781,19 @@ numeric_avg_serialize(PG_FUNCTION_ARGS)
 	pq_begintypsend(&buf);
 
 	/* N */
-	pq_sendint64(&buf, state->N);
+	pq_senduint64(&buf, state->N);
 
 	/* sumX */
 	pq_sendbytes(&buf, VARDATA_ANY(sumX), VARSIZE_ANY_EXHDR(sumX));
 
 	/* maxScale */
-	pq_sendint32(&buf, state->maxScale);
+	pq_senduint32(&buf, state->maxScale);
 
 	/* maxScaleCount */
-	pq_sendint64(&buf, state->maxScaleCount);
+	pq_senduint64(&buf, state->maxScaleCount);
 
 	/* NaNcount */
-	pq_sendint64(&buf, state->NaNcount);
+	pq_senduint64(&buf, state->NaNcount);
 
 	result = pq_endtypsend(&buf);
 
@@ -3900,7 +3900,7 @@ numeric_serialize(PG_FUNCTION_ARGS)
 	pq_begintypsend(&buf);
 
 	/* N */
-	pq_sendint64(&buf, state->N);
+	pq_senduint64(&buf, state->N);
 
 	/* sumX */
 	pq_sendbytes(&buf, VARDATA_ANY(sumX), VARSIZE_ANY_EXHDR(sumX));
@@ -3909,13 +3909,13 @@ numeric_serialize(PG_FUNCTION_ARGS)
 	pq_sendbytes(&buf, VARDATA_ANY(sumX2), VARSIZE_ANY_EXHDR(sumX2));
 
 	/* maxScale */
-	pq_sendint32(&buf, state->maxScale);
+	pq_senduint32(&buf, state->maxScale);
 
 	/* maxScaleCount */
-	pq_sendint64(&buf, state->maxScaleCount);
+	pq_senduint64(&buf, state->maxScaleCount);
 
 	/* NaNcount */
-	pq_sendint64(&buf, state->NaNcount);
+	pq_senduint64(&buf, state->NaNcount);
 
 	result = pq_endtypsend(&buf);
 
@@ -4307,7 +4307,7 @@ numeric_poly_serialize(PG_FUNCTION_ARGS)
 	pq_begintypsend(&buf);
 
 	/* N */
-	pq_sendint64(&buf, state->N);
+	pq_senduint64(&buf, state->N);
 
 	/* sumX */
 	pq_sendbytes(&buf, VARDATA_ANY(sumX), VARSIZE_ANY_EXHDR(sumX));
@@ -4523,7 +4523,7 @@ int8_avg_serialize(PG_FUNCTION_ARGS)
 	pq_begintypsend(&buf);
 
 	/* N */
-	pq_sendint64(&buf, state->N);
+	pq_senduint64(&buf, state->N);
 
 	/* sumX */
 	pq_sendbytes(&buf, VARDATA_ANY(sumX), VARSIZE_ANY_EXHDR(sumX));
diff --git a/src/backend/utils/adt/oid.c b/src/backend/utils/adt/oid.c
index b0670e0d9f..5a0a206c6a 100644
--- a/src/backend/utils/adt/oid.c
+++ b/src/backend/utils/adt/oid.c
@@ -154,7 +154,7 @@ oidsend(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, arg1);
+	pq_senduint32(&buf, arg1);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
diff --git a/src/backend/utils/adt/pg_lsn.c b/src/backend/utils/adt/pg_lsn.c
index f4eae9d83d..ea6ceb294f 100644
--- a/src/backend/utils/adt/pg_lsn.c
+++ b/src/backend/utils/adt/pg_lsn.c
@@ -93,7 +93,7 @@ pg_lsn_send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint64(&buf, lsn);
+	pq_senduint64(&buf, lsn);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
diff --git a/src/backend/utils/adt/rangetypes.c b/src/backend/utils/adt/rangetypes.c
index 5a5d0a0b8f..acdbaa3ff7 100644
--- a/src/backend/utils/adt/rangetypes.c
+++ b/src/backend/utils/adt/rangetypes.c
@@ -272,7 +272,7 @@ range_send(PG_FUNCTION_ARGS)
 		uint32		bound_len = VARSIZE(bound) - VARHDRSZ;
 		char	   *bound_data = VARDATA(bound);
 
-		pq_sendint32(buf, bound_len);
+		pq_senduint32(buf, bound_len);
 		pq_sendbytes(buf, bound_data, bound_len);
 	}
 
@@ -283,7 +283,7 @@ range_send(PG_FUNCTION_ARGS)
 		uint32		bound_len = VARSIZE(bound) - VARHDRSZ;
 		char	   *bound_data = VARDATA(bound);
 
-		pq_sendint32(buf, bound_len);
+		pq_senduint32(buf, bound_len);
 		pq_sendbytes(buf, bound_data, bound_len);
 	}
 
diff --git a/src/backend/utils/adt/rowtypes.c b/src/backend/utils/adt/rowtypes.c
index 5f729342f8..50c15a7cc5 100644
--- a/src/backend/utils/adt/rowtypes.c
+++ b/src/backend/utils/adt/rowtypes.c
@@ -718,7 +718,7 @@ record_send(PG_FUNCTION_ARGS)
 		if (!TupleDescAttr(tupdesc, i)->attisdropped)
 			validcols++;
 	}
-	pq_sendint32(&buf, validcols);
+	pq_senduint32(&buf, validcols);
 
 	for (i = 0; i < ncolumns; i++)
 	{
@@ -732,12 +732,12 @@ record_send(PG_FUNCTION_ARGS)
 		if (att->attisdropped)
 			continue;
 
-		pq_sendint32(&buf, column_type);
+		pq_senduint32(&buf, column_type);
 
 		if (nulls[i])
 		{
 			/* emit -1 data length to signify a NULL */
-			pq_sendint32(&buf, -1);
+			pq_senduint32(&buf, -1);
 			continue;
 		}
 
@@ -756,7 +756,7 @@ record_send(PG_FUNCTION_ARGS)
 
 		attr = values[i];
 		outputbytes = SendFunctionCall(&column_info->proc, attr);
-		pq_sendint32(&buf, VARSIZE(outputbytes) - VARHDRSZ);
+		pq_senduint32(&buf, VARSIZE(outputbytes) - VARHDRSZ);
 		pq_sendbytes(&buf, VARDATA(outputbytes),
 					 VARSIZE(outputbytes) - VARHDRSZ);
 	}
diff --git a/src/backend/utils/adt/tid.c b/src/backend/utils/adt/tid.c
index 41d540b46e..0e91944ce9 100644
--- a/src/backend/utils/adt/tid.c
+++ b/src/backend/utils/adt/tid.c
@@ -149,8 +149,8 @@ tidsend(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, ItemPointerGetBlockNumberNoCheck(itemPtr));
-	pq_sendint16(&buf, ItemPointerGetOffsetNumberNoCheck(itemPtr));
+	pq_senduint32(&buf, ItemPointerGetBlockNumberNoCheck(itemPtr));
+	pq_senduint16(&buf, ItemPointerGetOffsetNumberNoCheck(itemPtr));
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index 1d75caebe1..c224cbb324 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -276,7 +276,7 @@ timestamp_send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint64(&buf, timestamp);
+	pq_senduint64(&buf, timestamp);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
@@ -826,7 +826,7 @@ timestamptz_send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint64(&buf, timestamp);
+	pq_senduint64(&buf, timestamp);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
@@ -1008,9 +1008,9 @@ interval_send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint64(&buf, interval->time);
-	pq_sendint32(&buf, interval->day);
-	pq_sendint32(&buf, interval->month);
+	pq_senduint64(&buf, interval->time);
+	pq_senduint32(&buf, interval->day);
+	pq_senduint32(&buf, interval->month);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
diff --git a/src/backend/utils/adt/tsquery.c b/src/backend/utils/adt/tsquery.c
index 7b9dbfef0c..55f92d4fc4 100644
--- a/src/backend/utils/adt/tsquery.c
+++ b/src/backend/utils/adt/tsquery.c
@@ -1180,22 +1180,22 @@ tsquerysend(PG_FUNCTION_ARGS)
 
 	pq_begintypsend(&buf);
 
-	pq_sendint32(&buf, query->size);
+	pq_senduint32(&buf, query->size);
 	for (i = 0; i < query->size; i++)
 	{
-		pq_sendint8(&buf, item->type);
+		pq_senduint8(&buf, item->type);
 
 		switch (item->type)
 		{
 			case QI_VAL:
-				pq_sendint8(&buf, item->qoperand.weight);
-				pq_sendint8(&buf, item->qoperand.prefix);
+				pq_senduint8(&buf, item->qoperand.weight);
+				pq_senduint8(&buf, item->qoperand.prefix);
 				pq_sendstring(&buf, GETOPERAND(query) + item->qoperand.distance);
 				break;
 			case QI_OPR:
-				pq_sendint8(&buf, item->qoperator.oper);
+				pq_senduint8(&buf, item->qoperator.oper);
 				if (item->qoperator.oper == OP_PHRASE)
-					pq_sendint16(&buf, item->qoperator.distance);
+					pq_senduint16(&buf, item->qoperator.distance);
 				break;
 			default:
 				elog(ERROR, "unrecognized tsquery node type: %d", item->type);
diff --git a/src/backend/utils/adt/tsvector.c b/src/backend/utils/adt/tsvector.c
index 7a27bd12a3..630dade232 100644
--- a/src/backend/utils/adt/tsvector.c
+++ b/src/backend/utils/adt/tsvector.c
@@ -410,7 +410,7 @@ tsvectorsend(PG_FUNCTION_ARGS)
 
 	pq_begintypsend(&buf);
 
-	pq_sendint32(&buf, vec->size);
+	pq_senduint32(&buf, vec->size);
 	for (i = 0; i < vec->size; i++)
 	{
 		uint16		npos;
@@ -423,14 +423,14 @@ tsvectorsend(PG_FUNCTION_ARGS)
 		pq_sendbyte(&buf, '\0');
 
 		npos = POSDATALEN(vec, weptr);
-		pq_sendint16(&buf, npos);
+		pq_senduint16(&buf, npos);
 
 		if (npos > 0)
 		{
 			WordEntryPos *wepptr = POSDATAPTR(vec, weptr);
 
 			for (j = 0; j < npos; j++)
-				pq_sendint16(&buf, wepptr[j]);
+				pq_senduint16(&buf, wepptr[j]);
 		}
 		weptr++;
 	}
diff --git a/src/backend/utils/adt/txid.c b/src/backend/utils/adt/txid.c
index 7974c0bd3d..d5210c6554 100644
--- a/src/backend/utils/adt/txid.c
+++ b/src/backend/utils/adt/txid.c
@@ -640,11 +640,11 @@ txid_snapshot_send(PG_FUNCTION_ARGS)
 	uint32		i;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, snap->nxip);
-	pq_sendint64(&buf, snap->xmin);
-	pq_sendint64(&buf, snap->xmax);
+	pq_senduint32(&buf, snap->nxip);
+	pq_senduint64(&buf, snap->xmin);
+	pq_senduint64(&buf, snap->xmax);
 	for (i = 0; i < snap->nxip; i++)
-		pq_sendint64(&buf, snap->xip[i]);
+		pq_senduint64(&buf, snap->xip[i]);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
diff --git a/src/backend/utils/adt/varbit.c b/src/backend/utils/adt/varbit.c
index 6ba400b699..739c248f72 100644
--- a/src/backend/utils/adt/varbit.c
+++ b/src/backend/utils/adt/varbit.c
@@ -666,7 +666,7 @@ varbit_send(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, VARBITLEN(s));
+	pq_senduint32(&buf, VARBITLEN(s));
 	pq_sendbytes(&buf, (char *) VARBITS(s), VARBITBYTES(s));
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
diff --git a/src/backend/utils/adt/xid.c b/src/backend/utils/adt/xid.c
index 1e811faa9c..9ec288d86e 100644
--- a/src/backend/utils/adt/xid.c
+++ b/src/backend/utils/adt/xid.c
@@ -68,7 +68,7 @@ xidsend(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, arg1);
+	pq_senduint32(&buf, arg1);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
@@ -196,7 +196,7 @@ cidsend(PG_FUNCTION_ARGS)
 	StringInfoData buf;
 
 	pq_begintypsend(&buf);
-	pq_sendint32(&buf, arg1);
+	pq_senduint32(&buf, arg1);
 	PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
 
diff --git a/src/include/libpq/pqformat.h b/src/include/libpq/pqformat.h
index 57bde691e8..cb2570569e 100644
--- a/src/include/libpq/pqformat.h
+++ b/src/include/libpq/pqformat.h
@@ -47,41 +47,41 @@ extern void pq_sendfloat8(StringInfo buf, float8 f);
  * overly picky and demanding a * before a restrict.
  */
 static inline void
-pq_writeint8(StringInfoData *pg_restrict buf, int8 i)
+pq_writeuint8(StringInfoData *pg_restrict buf, uint8 i)
 {
 	int8		ni = i;
 
-	Assert(buf->len + (int) sizeof(int8) <= buf->maxlen);
-	memcpy((char *pg_restrict) (buf->data + buf->len), &ni, sizeof(int8));
-	buf->len += sizeof(int8);
+	Assert(buf->len + (int) sizeof(uint8) <= buf->maxlen);
+	memcpy((char *pg_restrict) (buf->data + buf->len), &ni, sizeof(uint8));
+	buf->len += sizeof(uint8);
 }
 
 /*
- * Append an int16 to a StringInfo buffer, which already has enough space
+ * Append an uint16 to a StringInfo buffer, which already has enough space
  * preallocated.
  */
 static inline void
-pq_writeint16(StringInfoData *pg_restrict buf, int16 i)
+pq_writeuint16(StringInfoData *pg_restrict buf, uint16 i)
 {
-	int16		ni = pg_hton16(i);
+	uint16		ni = pg_hton16(i);
 
-	Assert(buf->len + (int) sizeof(int16) <= buf->maxlen);
-	memcpy((char *pg_restrict) (buf->data + buf->len), &ni, sizeof(int16));
-	buf->len += sizeof(int16);
+	Assert(buf->len + (int) sizeof(uint16) <= buf->maxlen);
+	memcpy((char *pg_restrict) (buf->data + buf->len), &ni, sizeof(uint16));
+	buf->len += sizeof(uint16);
 }
 
 /*
- * Append an int32 to a StringInfo buffer, which already has enough space
+ * Append an uint32 to a StringInfo buffer, which already has enough space
  * preallocated.
  */
 static inline void
-pq_writeint32(StringInfoData *pg_restrict buf, int32 i)
+pq_writeuint32(StringInfoData *pg_restrict buf, uint32 i)
 {
-	int32		ni = pg_hton32(i);
+	uint32		ni = pg_hton32(i);
 
-	Assert(buf->len + (int) sizeof(int32) <= buf->maxlen);
-	memcpy((char *pg_restrict) (buf->data + buf->len), &ni, sizeof(int32));
-	buf->len += sizeof(int32);
+	Assert(buf->len + (int) sizeof(uint32) <= buf->maxlen);
+	memcpy((char *pg_restrict) (buf->data + buf->len), &ni, sizeof(uint32));
+	buf->len += sizeof(uint32);
 }
 
 /*
@@ -89,13 +89,13 @@ pq_writeint32(StringInfoData *pg_restrict buf, int32 i)
  * preallocated.
  */
 static inline void
-pq_writeint64(StringInfoData *pg_restrict buf, int64 i)
+pq_writeuint64(StringInfoData *pg_restrict buf, uint64 i)
 {
-	int64		ni = pg_hton64(i);
+	uint64		ni = pg_hton64(i);
 
-	Assert(buf->len + (int) sizeof(int64) <= buf->maxlen);
-	memcpy((char *pg_restrict) (buf->data + buf->len), &ni, sizeof(int64));
-	buf->len += sizeof(int64);
+	Assert(buf->len + (int) sizeof(uint64) <= buf->maxlen);
+	memcpy((char *pg_restrict) (buf->data + buf->len), &ni, sizeof(uint64));
+	buf->len += sizeof(uint64);
 }
 
 /*
@@ -127,43 +127,51 @@ pq_writestring(StringInfoData *pg_restrict buf, const char *pg_restrict str)
 		pfree(p);
 }
 
-/* append a binary int8 to a StringInfo buffer */
+/* append a binary uint8 to a StringInfo buffer */
 static inline void
-pq_sendint8(StringInfo buf, int8 i)
+pq_senduint8(StringInfo buf, uint8 i)
 {
-	enlargeStringInfo(buf, sizeof(int8));
-	pq_writeint8(buf, i);
+	enlargeStringInfo(buf, sizeof(uint8));
+	pq_writeuint8(buf, i);
 }
 
-/* append a binary int16 to a StringInfo buffer */
+/* append a binary uint16 to a StringInfo buffer */
 static inline void
-pq_sendint16(StringInfo buf, int16 i)
+pq_senduint16(StringInfo buf, uint16 i)
 {
-	enlargeStringInfo(buf, sizeof(int16));
-	pq_writeint16(buf, i);
+	enlargeStringInfo(buf, sizeof(uint16));
+	pq_writeuint16(buf, i);
 }
 
-/* append a binary int32 to a StringInfo buffer */
+/* append a binary uint32 to a StringInfo buffer */
 static inline void
-pq_sendint32(StringInfo buf, int32 i)
+pq_senduint32(StringInfo buf, uint32 i)
 {
-	enlargeStringInfo(buf, sizeof(int32));
-	pq_writeint32(buf, i);
+	enlargeStringInfo(buf, sizeof(uint32));
+	pq_writeuint32(buf, i);
 }
 
-/* append a binary int64 to a StringInfo buffer */
+/* append a binary uint64 to a StringInfo buffer */
+static inline void
+pq_senduint64(StringInfo buf, uint64 i)
+{
+	enlargeStringInfo(buf, sizeof(uint64));
+	pq_writeuint64(buf, i);
+}
+
+/* append a binary int64 to a StringInfo buffer, kept for compatibility */
 static inline void
 pq_sendint64(StringInfo buf, int64 i)
 {
 	enlargeStringInfo(buf, sizeof(int64));
-	pq_writeint64(buf, i);
+	pq_writeuint64(buf, (uint64) i);
 }
 
 /* append a binary byte to a StringInfo buffer */
 static inline void
-pq_sendbyte(StringInfo buf, int8 byt)
+pq_sendbyte(StringInfo buf, uint8 byt)
 {
-	pq_sendint8(buf, byt);
+	pq_senduint8(buf, byt);
 }
 
 /*
@@ -177,13 +185,13 @@ pq_sendint(StringInfo buf, int i, int b)
 	switch (b)
 	{
 		case 1:
-			pq_sendint8(buf, (int8) i);
+			pq_senduint8(buf, (uint8) i);
 			break;
 		case 2:
-			pq_sendint16(buf, (int16) i);
+			pq_senduint16(buf, (uint16) i);
 			break;
 		case 4:
-			pq_sendint32(buf, (int32) i);
+			pq_senduint32(buf, (uint32) i);
 			break;
 		default:
 			elog(ERROR, "unsupported integer size %d", b);

Attachment: signature.asc
Description: PGP signature

Reply via email to