C# version with NPGSQL
Npgsql requires to use FORMAT BINARY and to write jsonb field you have to add number 1 in byte format infront of the bytes of jsonb data..
Simple version, where writer is the NpgsqlBinaryImporter object
byte versionByte = (byte)1;
var userDataBytes = Encoding.UTF8.GetBytes(userData.UserData);
byte[] finalArray = new byte[userDataBytes.Length + 1];
System.Buffer.BlockCopy(new byte[] { versionByte }, 0, finalArray, 0, 1);
System.Buffer.BlockCopy(userDataBytes, 0, finalArray, 1, userDataBytes.Length);
writer.Write(finalArray);
or you can use this extension method
/// <summary>
/// Converts string to JSONB bytes array for COPY command
/// </summary>
/// <param name="json"></param>
/// <param name="encoding">If null UTF8 is used</param>
/// <returns>Byte array with first byte being value "1", which is only supported version by PostgreSQL, the rest of bytes is the original <paramref name="json"/></returns>
public static byte[] ToJsonBBytes(this string json, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
byte versionByte = (byte)1;
var userDataBytes = encoding.GetBytes(json);
byte[] finalArray = new byte[userDataBytes.Length + 1];
System.Buffer.BlockCopy(new byte[] { versionByte }, 0, finalArray, 0, 1);
System.Buffer.BlockCopy(userDataBytes, 0, finalArray, 1, userDataBytes.Length);
return finalArray;
}