In libpq, PQexecParams has nParams as type int. So on any reasonable platform, that's at least 4 bytes. My question then is: when I see documented limits of 65535 params in various drivers and libraries, that is NOT a restriction of libpq nor of the protocol, but rather an arbitrary limit of the driver/library, correct?
No.
From:
src/interfaces/libpq/fe-exec.c
if (nParams < 0 || nParams > 65535) { printfPQExpBuffer(&conn->errorMessage, libpq_gettext("number of parameters must be between 0 and 65535\n")); return 0; }
Or, from the specification for the Bind Message in the documentation: