Index: node_modules/pg-protocol/src/testing/buffer-list.ts
===================================================================
--- node_modules/pg-protocol/src/testing/buffer-list.ts	(revision 62b296460f935ff5cc47a75f6567f97df5a244a7)
+++ node_modules/pg-protocol/src/testing/buffer-list.ts	(revision 62b296460f935ff5cc47a75f6567f97df5a244a7)
@@ -0,0 +1,67 @@
+export default class BufferList {
+  constructor(public buffers: Buffer[] = []) {}
+
+  public add(buffer: Buffer, front?: boolean) {
+    this.buffers[front ? 'unshift' : 'push'](buffer)
+    return this
+  }
+
+  public addInt16(val: number, front?: boolean) {
+    return this.add(Buffer.from([val >>> 8, val >>> 0]), front)
+  }
+
+  public getByteLength() {
+    return this.buffers.reduce(function (previous, current) {
+      return previous + current.length
+    }, 0)
+  }
+
+  public addInt32(val: number, first?: boolean) {
+    return this.add(
+      Buffer.from([(val >>> 24) & 0xff, (val >>> 16) & 0xff, (val >>> 8) & 0xff, (val >>> 0) & 0xff]),
+      first
+    )
+  }
+
+  public addCString(val: string, front?: boolean) {
+    const len = Buffer.byteLength(val)
+    const buffer = Buffer.alloc(len + 1)
+    buffer.write(val)
+    buffer[len] = 0
+    return this.add(buffer, front)
+  }
+
+  public addString(val: string, front?: boolean) {
+    const len = Buffer.byteLength(val)
+    const buffer = Buffer.alloc(len)
+    buffer.write(val)
+    return this.add(buffer, front)
+  }
+
+  public addChar(char: string, first?: boolean) {
+    return this.add(Buffer.from(char, 'utf8'), first)
+  }
+
+  public addByte(byte: number) {
+    return this.add(Buffer.from([byte]))
+  }
+
+  public join(appendLength?: boolean, char?: string): Buffer {
+    let length = this.getByteLength()
+    if (appendLength) {
+      this.addInt32(length + 4, true)
+      return this.join(false, char)
+    }
+    if (char) {
+      this.addChar(char, true)
+      length++
+    }
+    const result = Buffer.alloc(length)
+    let index = 0
+    this.buffers.forEach(function (buffer) {
+      buffer.copy(result, index, 0)
+      index += buffer.length
+    })
+    return result
+  }
+}
Index: node_modules/pg-protocol/src/testing/test-buffers.ts
===================================================================
--- node_modules/pg-protocol/src/testing/test-buffers.ts	(revision 62b296460f935ff5cc47a75f6567f97df5a244a7)
+++ node_modules/pg-protocol/src/testing/test-buffers.ts	(revision 62b296460f935ff5cc47a75f6567f97df5a244a7)
@@ -0,0 +1,166 @@
+// https://www.postgresql.org/docs/current/protocol-message-formats.html
+import BufferList from './buffer-list'
+
+const buffers = {
+  readyForQuery: function () {
+    return new BufferList().add(Buffer.from('I')).join(true, 'Z')
+  },
+
+  authenticationOk: function () {
+    return new BufferList().addInt32(0).join(true, 'R')
+  },
+
+  authenticationCleartextPassword: function () {
+    return new BufferList().addInt32(3).join(true, 'R')
+  },
+
+  authenticationMD5Password: function () {
+    return new BufferList()
+      .addInt32(5)
+      .add(Buffer.from([1, 2, 3, 4]))
+      .join(true, 'R')
+  },
+
+  authenticationSASL: function () {
+    return new BufferList().addInt32(10).addCString('SCRAM-SHA-256').addCString('').join(true, 'R')
+  },
+
+  authenticationSASLContinue: function () {
+    return new BufferList().addInt32(11).addString('data').join(true, 'R')
+  },
+
+  authenticationSASLFinal: function () {
+    return new BufferList().addInt32(12).addString('data').join(true, 'R')
+  },
+
+  parameterStatus: function (name: string, value: string) {
+    return new BufferList().addCString(name).addCString(value).join(true, 'S')
+  },
+
+  backendKeyData: function (processID: number, secretKey: number) {
+    return new BufferList().addInt32(processID).addInt32(secretKey).join(true, 'K')
+  },
+
+  commandComplete: function (string: string) {
+    return new BufferList().addCString(string).join(true, 'C')
+  },
+
+  rowDescription: function (fields: any[]) {
+    fields = fields || []
+    const buf = new BufferList()
+    buf.addInt16(fields.length)
+    fields.forEach(function (field) {
+      buf
+        .addCString(field.name)
+        .addInt32(field.tableID || 0)
+        .addInt16(field.attributeNumber || 0)
+        .addInt32(field.dataTypeID || 0)
+        .addInt16(field.dataTypeSize || 0)
+        .addInt32(field.typeModifier || 0)
+        .addInt16(field.formatCode || 0)
+    })
+    return buf.join(true, 'T')
+  },
+
+  parameterDescription: function (dataTypeIDs: number[]) {
+    dataTypeIDs = dataTypeIDs || []
+    const buf = new BufferList()
+    buf.addInt16(dataTypeIDs.length)
+    dataTypeIDs.forEach(function (dataTypeID) {
+      buf.addInt32(dataTypeID)
+    })
+    return buf.join(true, 't')
+  },
+
+  dataRow: function (columns: any[]) {
+    columns = columns || []
+    const buf = new BufferList()
+    buf.addInt16(columns.length)
+    columns.forEach(function (col) {
+      if (col == null) {
+        buf.addInt32(-1)
+      } else {
+        const strBuf = Buffer.from(col, 'utf8')
+        buf.addInt32(strBuf.length)
+        buf.add(strBuf)
+      }
+    })
+    return buf.join(true, 'D')
+  },
+
+  error: function (fields: any) {
+    return buffers.errorOrNotice(fields).join(true, 'E')
+  },
+
+  notice: function (fields: any) {
+    return buffers.errorOrNotice(fields).join(true, 'N')
+  },
+
+  errorOrNotice: function (fields: any) {
+    fields = fields || []
+    const buf = new BufferList()
+    fields.forEach(function (field: any) {
+      buf.addChar(field.type)
+      buf.addCString(field.value)
+    })
+    return buf.add(Buffer.from([0])) // terminator
+  },
+
+  parseComplete: function () {
+    return new BufferList().join(true, '1')
+  },
+
+  bindComplete: function () {
+    return new BufferList().join(true, '2')
+  },
+
+  notification: function (id: number, channel: string, payload: string) {
+    return new BufferList().addInt32(id).addCString(channel).addCString(payload).join(true, 'A')
+  },
+
+  emptyQuery: function () {
+    return new BufferList().join(true, 'I')
+  },
+
+  portalSuspended: function () {
+    return new BufferList().join(true, 's')
+  },
+
+  closeComplete: function () {
+    return new BufferList().join(true, '3')
+  },
+
+  copyIn: function (cols: number) {
+    const list = new BufferList()
+      // text mode
+      .addByte(0)
+      // column count
+      .addInt16(cols)
+    for (let i = 0; i < cols; i++) {
+      list.addInt16(i)
+    }
+    return list.join(true, 'G')
+  },
+
+  copyOut: function (cols: number) {
+    const list = new BufferList()
+      // text mode
+      .addByte(0)
+      // column count
+      .addInt16(cols)
+    for (let i = 0; i < cols; i++) {
+      list.addInt16(i)
+    }
+    return list.join(true, 'H')
+  },
+
+  copyData: function (bytes: Buffer) {
+    return new BufferList().add(bytes).join(true, 'd')
+  },
+
+  copyDone: function () {
+    return new BufferList().join(true, 'c')
+  },
+}
+
+export default buffers
