Я читал протокол Postgresql провода и возникают проблемы реализации раздел, связанный с простыми запросами, где spec говорит:Проблема понимания определение протокола
Query (F)
Byte1('Q')
Identifies the message as a simple query.
Int32
Length of message contents in bytes, including self.
String
The query string itself.
я придумал следующее C++:
(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >) $0 = size=31 {
[0] = 'Q'
[1] = '\0'
[2] = '\0'
[3] = '\0'
[4] = '\x1f'
[5] = 's'
[6] = 'e'
[7] = 'l'
[8] = 'e'
[9] = 'c'
[10] = 't'
[11] = ' '
[12] = '*'
[13] = ' '
[14] = 'f'
[15] = 'r'
[16] = 'o'
[17] = 'm'
[18] = ' '
[19] = 'd'
[20] = 'e'
[21] = 'p'
[22] = 'a'
[23] = 'r'
[24] = 't'
[25] = 'm'
[26] = 'e'
[27] = 'n'
[28] = 't'
[29] = 's'
[30] = '\0'
}
Но я всегда получаю сообщение об ошибке с сервера:
EJSERRORC08P01Minvalid message formatFpqformat.cL652Rpq_getmsgendETSFATALC08P01Minvalid frontend message type 0Fpostgres.cL484RSocketBackend
На этом этапе я устал бросать разные версии этого вектора на сервер, чтобы всегда получать одинаковый результат, поэтому я предполагаю, что моя интерпретация спецификации неверна. Можете ли вы показать мне код, как это будет сделано? Не алго генерировать сообщение, просто действительное сообщение.
Я ничего о протоколе PostGreSQL провода не знаю, но: 1) вы установите длину 27, даже если все сообщение имеет длину 28 байт; 2) возможно, он должен что-то сделать с байтом порядка Int32? – gudok
@ gudok Скопированный неправильный вектор. – ruipacheco
@gudok - клиент и сервер находятся на одной машине, поэтому это не должно быть проблемой, нет? – ruipacheco