func RowDescription(cols, types []string) Message {
	msg := []byte{'T'  , 0, 0, 0, 0  , 0, 0}
	binary.BigEndian.PutUint16(msg[5:], uint16(len(cols)))
	for i, c := range cols {
		msg = append(msg, []byte(c)...)
		msg = append(msg, 0)  
		msg = append(msg, 0, 0, 0, 0)  
		msg = append(msg, 0, 0)        
		typeOid := TypesOid[types[i]]
		if typeOid == 0 {
			typeOid = TypesOid["TEXT"]
		}
		oid := []byte{0, 0, 0, 0}
		binary.BigEndian.PutUint32(oid, uint32(typeOid))
		msg = append(msg, oid...)
		msg = append(msg, 0, 0)        
		msg = append(msg, 0, 0, 0, 0)  
		msg = append(msg, 0, 0)        
	}
	binary.BigEndian.PutUint32(msg[1:5], uint32(len(msg)-1))
	return msg
}
RowDescription is a message indicating that DataRow messages are about to
be transmitted and delivers their schema (column names/types)
package protocol
import (
	"encoding/binary"
	"fmt"
)
var TypesOid = map[string]int{
	"BOOL":       16,
	"BYTEA":      17,
	"CHAR":       18,
	"INT8":       20,
	"INT2":       21,
	"INT4":       23,
	"TEXT":       25,
	"JSON":       114,
	"XML":        142,
	"FLOAT4":     700,
	"FLOAT8":     701,
	"VARCHAR":    1043,
	"DATE":       1082,
	"TIME":       1083,
	"TIMESTAMP":  1114,
	"TIMESTAMPZ": 1184,
	"INTERVAL":   1186,
	"NUMERIC":    1700,
	"JSONB":      3802,
	"ANY":        2276,
}
var ReadyForQuery = []byte{'Z', 0, 0, 0, 5, 'I'}