Frontend/Backend Protocol
Hi,
I am trying to write an interface for accessing the postmaster and
subsequently a postgres database server in a language that our group has
written, which is called APRIL. However, I am having a few problems
making the connection.
I appear to be able to make a successfuly connection to the postmaster
by making a normal socket connection to port 5432 and sending a startup
packet, which consists of:
00 00 01 20 as the length (296 bytes)
00 02 00 00 as the major and minor protocol numbers (2.0)
"dbname\0" as a 64 byte string representing the database name
"postgres\0" as a 32 byte string representing the user name
"\0" as a 64 byte string representing the options
"\0" as a 64 byte string representing unused bytes
"\0" as a 64 byte string representing the tty
And I get back:
"R" 00 00 00 00 which indicates a successful connection
However, when my process has read this, the postmaster displays the
following error:
FATAL 1: Socket command type unknown
and the connection is closed.
Does anyone have any idea of what I am doing wrong? I assumed that the
postmaster would fork a new postgres process to handle my connection and
I should be expecting some data on the socket to tell me that the
postgres process is ready for an SQL query. The postmaster is being
executed with the -i option.
Thanks in advance,
Jonathan
+-------------------------------------------------------------------+
| "Never settle with words what you can accomplish with a |
| flamethrower." -- Bruce Feirstein |
+-------------------------------------------------------------------+
Jonathan Dale <jdale@fla.fujitsu.com> writes:
And I get back:
"R" 00 00 00 00 which indicates a successful connection
Looks good so far (I suppose you are using 'trust' authentication mode).
However, when my process has read this, the postmaster displays the
following error:
FATAL 1: Socket command type unknown
and the connection is closed.
No, the postmaster didn't send that; the backend did. Looks like you
sent one byte too many, probably a null byte, and the backend received
it as the first input data byte. Since it's not a valid protocol
command character, the backend gives up and dies.
I assumed that the
postmaster would fork a new postgres process to handle my connection
... it did ...
and I should be expecting some data on the socket to tell me that the
postgres process is ready for an SQL query.
You should have gotten a ReadyForQuery message if you are talking to
a 6.4 or later backend, and if you used the right protocol version
number in the connect request. I speculate that you have an old server,
or you asked for protocol version 1, or you miscounted bytes and missed
the appearance of the ReadyForQuery ('Z') message.
regards, tom lane
Import Notes
Reply to msg id not found: YourmessageofThu22Jul1999000139-07003796C1D3.35DA43C8@fla.fujitsu.com | Resolved by subject fallback