On Wed, 2020-12-02 at 15:16 -0500, Bruce Momjian wrote:
> Yes, we could, but I thought the format code was not something we set
> at
> this level.  Looking at byteasend() it is true it just sends the
> bytes.

It can be set along with the type. Attached an example.

Andres objected (in a separate conversation) to forcing a binary-format 
value on a client that didn't ask for one. He suggested that we mandate
that the data is ASCII-only (for both filename and content), closing
the gap Michael raised[1]; and then just declare all values to be text
format.

I am fine with either approach; but in any case, I don't see the point
in sending an incorrect RowDescription.

Regards,
        Jeff Davis

[1] https://postgr.es/m/20201008235250.ga1...@paquier.xyz

diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml
index 4899bacda7b..f383223f462 100644
--- a/doc/src/sgml/protocol.sgml
+++ b/doc/src/sgml/protocol.sgml
@@ -1778,7 +1778,7 @@ The commands accepted in replication mode are:
       <variablelist>
       <varlistentry>
       <term>
-       <literal>systemid</literal> (<type>text</type>)
+       <literal>systemid</literal> (<type>text</type>, text format)
       </term>
       <listitem>
       <para>
@@ -1791,7 +1791,7 @@ The commands accepted in replication mode are:
 
       <varlistentry>
       <term>
-       <literal>timeline</literal> (<type>int4</type>)
+       <literal>timeline</literal> (<type>int4</type>, text format)
       </term>
       <listitem>
       <para>
@@ -1803,7 +1803,7 @@ The commands accepted in replication mode are:
 
       <varlistentry>
       <term>
-       <literal>xlogpos</literal> (<type>text</type>)
+       <literal>xlogpos</literal> (<type>text</type>, text format)
       </term>
       <listitem>
       <para>
@@ -1815,7 +1815,7 @@ The commands accepted in replication mode are:
 
       <varlistentry>
       <term>
-       <literal>dbname</literal> (<type>text</type>)
+       <literal>dbname</literal> (<type>text</type>, text format)
       </term>
       <listitem>
       <para>
@@ -1861,27 +1861,26 @@ The commands accepted in replication mode are:
      <para>
       Requests the server to send over the timeline history file for timeline
       <replaceable class="parameter">tli</replaceable>.  Server replies with a
-      result set of a single row, containing two fields.  While the fields
-      are labeled as <type>text</type>, they effectively return raw bytes,
-      with no encoding conversion:
+      result set of a single row, containing two fields:
      </para>
 
      <para>
       <variablelist>
       <varlistentry>
       <term>
-       <literal>filename</literal> (<type>text</type>)
+       <literal>filename</literal> (<type>bytea</type>, binary format)
       </term>
       <listitem>
       <para>
        File name of the timeline history file, e.g., <filename>00000002.history</filename>.
+       No encoding conversion is performed.
       </para>
       </listitem>
       </varlistentry>
 
       <varlistentry>
       <term>
-       <literal>content</literal> (<type>text</type>)
+       <literal>content</literal> (<type>bytea</type>, binary format)
       </term>
       <listitem>
       <para>
@@ -1975,7 +1974,7 @@ The commands accepted in replication mode are:
 
       <variablelist>
        <varlistentry>
-        <term><literal>slot_name</literal> (<type>text</type>)</term>
+        <term><literal>slot_name</literal> (<type>text</type>, text format)</term>
         <listitem>
          <para>
           The name of the newly-created replication slot.
@@ -1984,7 +1983,7 @@ The commands accepted in replication mode are:
        </varlistentry>
 
        <varlistentry>
-        <term><literal>consistent_point</literal> (<type>text</type>)</term>
+        <term><literal>consistent_point</literal> (<type>text</type>, text format)</term>
         <listitem>
          <para>
           The WAL location at which the slot became consistent.  This is the
@@ -1995,7 +1994,7 @@ The commands accepted in replication mode are:
        </varlistentry>
 
        <varlistentry>
-        <term><literal>snapshot_name</literal> (<type>text</type>)</term>
+        <term><literal>snapshot_name</literal> (<type>text</type>, text format)</term>
         <listitem>
          <para>
           The identifier of the snapshot exported by the command.  The
@@ -2007,7 +2006,7 @@ The commands accepted in replication mode are:
        </varlistentry>
 
        <varlistentry>
-        <term><literal>output_plugin</literal> (<type>text</type>)</term>
+        <term><literal>output_plugin</literal> (<type>text</type>, text format)</term>
         <listitem>
          <para>
           The name of the output plugin used by the newly-created replication
@@ -2636,7 +2635,7 @@ The commands accepted in replication mode are:
       The fields in this row are:
       <variablelist>
        <varlistentry>
-        <term><literal>spcoid</literal> (<type>oid</type>)</term>
+        <term><literal>spcoid</literal> (<type>oid</type>, text format)</term>
         <listitem>
          <para>
           The OID of the tablespace, or null if it's the base
@@ -2645,7 +2644,7 @@ The commands accepted in replication mode are:
         </listitem>
        </varlistentry>
        <varlistentry>
-        <term><literal>spclocation</literal> (<type>text</type>)</term>
+        <term><literal>spclocation</literal> (<type>text</type>, text format)</term>
         <listitem>
          <para>
           The full path of the tablespace directory, or null
@@ -2654,7 +2653,7 @@ The commands accepted in replication mode are:
         </listitem>
        </varlistentry>
        <varlistentry>
-        <term><literal>size</literal> (<type>int8</type>)</term>
+        <term><literal>size</literal> (<type>int8</type>, text format)</term>
         <listitem>
          <para>
           The approximate size of the tablespace, in kilobytes (1024 bytes),
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index 2eb19ad2936..089b3692dec 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -487,19 +487,19 @@ SendTimeLineHistory(TimeLineHistoryCmd *cmd)
 	pq_sendstring(&buf, "filename");	/* col name */
 	pq_sendint32(&buf, 0);		/* table oid */
 	pq_sendint16(&buf, 0);		/* attnum */
-	pq_sendint32(&buf, TEXTOID);	/* type oid */
+	pq_sendint32(&buf, BYTEAOID);	/* type oid */
 	pq_sendint16(&buf, -1);		/* typlen */
 	pq_sendint32(&buf, 0);		/* typmod */
-	pq_sendint16(&buf, 0);		/* format code */
+	pq_sendint16(&buf, 1);		/* format code */
 
 	/* second field */
 	pq_sendstring(&buf, "content"); /* col name */
 	pq_sendint32(&buf, 0);		/* table oid */
 	pq_sendint16(&buf, 0);		/* attnum */
-	pq_sendint32(&buf, TEXTOID);	/* type oid */
+	pq_sendint32(&buf, BYTEAOID);	/* type oid */
 	pq_sendint16(&buf, -1);		/* typlen */
 	pq_sendint32(&buf, 0);		/* typmod */
-	pq_sendint16(&buf, 0);		/* format code */
+	pq_sendint16(&buf, 1);		/* format code */
 	pq_endmessage(&buf);
 
 	/* Send a DataRow message */

Reply via email to