libpq を使用してリモート マシンから PostgreSQL データベースにバイナリ データを挿入する例を教えてください。私の 2 番目の質問は、C++ で libpq よりも効率的な API は他にありますか? ありがとう
5916 次
2 に答える
12
PostgreSQLには と の 2 種類のBLOBBYTEA
がありますLarge Objects
。テーブルに結合できないため、大きなオブジェクトを使用しないことをお勧めします。
BYTEA の場合、libpq で次のようなものを使用します。
PGresult* put_data_to_tablename(
PGconn* conn,
int32_t id,
int data_size,
const char* const data
) {
PGresult* result;
const uint32_t id_big_endian = htonl((uint32_t)id);
const char* const paramValues[] = { &id_big_endian, data };
const int nParams = sizeof(paramValues) / sizeof(paramValues[0]);
const int paramLenghts[] = { sizeof(id_big_endian), data_size };
const int paramFormats[] = { 1, 1 }; /* binary */
const int resultFormat = 0; /* text */
result = PQexecParams(
conn,
"insert into tablename (id, data) values ($1::integer, $2::bytea)",
nParams,
NULL, /* Types of parameters, unused as casts will define types */
paramValues,
paramLenghts,
paramFormats,
resultFormat
);
return result;
}
于 2012-01-24T23:50:06.577 に答える