Using version 7.4.7 of PostgreSQL, SBCL 1.0, postmodern 0.23, the deftable/create-table example breaks due to
WARNING: Postgres warning: CREATE TABLE / PRIMARY KEY will create implicit index "test_data_pkey" for table "test_data"
which causes cl-postgres::send-query to drop into the debugger with
Postgresql protocol error: Unexpected message received: 1 [Condition of type CL-POSTGRES::PROTOCOL-ERROR]
If I read the code and postgres protocol docs correctly, this is due to the way message-case handles NoticeResponse (#\N) messages, specifically that it only reads 1 of #\E, #\N, or the expected message, so when it receives both #\N and the expected message, the caller gets out of sync.
Removing
(#.(char-code #\N) (get-warning socket))
from the case and adding
(when (= #.(char-code #\N) ,char-name) (get-warning socket) (setf ,char-name (read-uint1 ,socket-name)) (setf ,size-name (read-uint4 ,socket-name)))
before the (case ,char-name ...) in message-case fixes the problem for me, not sure if it is completely correct though, possibly should loop in case there are multiple warnings? (Also, shouldn't that (get-warning socket) and the get-error call use ,socket-name instead of socket?)
-- Bart