Puede dar un ejemplo de cómo insertar datos binarios en la base de datos PostgreSQL desde la máquina remota usando libpq. Mi segunda pregunta es: ¿hay alguna otra API más eficiente que libpq con C++? Gracias Insertar objeto grande binario (BLOB) en PostgreSQL usando libpq desde la máquina remota
5
A
Respuesta
10
Hay 2 tipos de manchas en PostgreSQL — BYTEA
y Large Objects
. Yo recomendaría no usar objetos grandes ya que no puedes unirlos a las tablas.
Para BYTEA que tendría que utilizar algo como esto en 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;
}
1
Usando libpqxx es el C++ manera de hacerlo, mientras que libpq es la API C.
Aquí es un ejemplo completo de cómo hacerlo usando pqxx: How to insert binary data into a PostgreSQL BYTEA column using the C++ libpqxx API?
En resumen, el correspondiente C++ líneas usando libpqxx tener este aspecto:
void * bin_data = ...; // obviously do what you need to get the binary data...
size_t bin_size = ...; // ...and the size of the binary data
pqxx::binarystring bin(bin_data, bin_size);
pqxx::result r = work.prepared("test")(bin).exec();
work.commit();
Cuestiones relacionadas
- 1. Código Postgresql libpq simple demasiado lento?
- 2. Múltiples comandos en la máquina remota usando script de shell
- 3. PostgreSQL: insertar desde otra tabla
- 4. Acceso a TEAMCITY desde una máquina remota
- 5. Libpq de PostgreSQL: Codificación para el transporte binario de ARRAY [] - ¿datos?
- 6. PostgreSQL: BYTEA vs OID + ¿Objeto grande?
- 7. ¿Obtiene el tamaño del objeto grande en la consulta de PostgreSQL?
- 8. No se puede conectar desde la máquina remota
- 9. ¿Puede COPG de PostgreSQL leer CSV desde una ubicación remota?
- 10. ¿Dónde obtengo la fuente libpq?
- 11. insertando blob en sqlite desde el navegador safari usando html5
- 12. Insertar archivo en mysql Blob
- 13. Reiniciar IIS en la máquina remota
- 14. Eclipse - Ejecutar proyecto en una máquina remota
- 15. Postgresql, JDBC y BLOB de transmisión
- 16. ¿Cómo copio un directorio a una máquina remota usando Fabric?
- 17. Guardar archivo binario en blob de httppostedfile
- 18. Cómo INSERTAR binary std :: string en BLOB
- 19. Cómo utilizar el volcado de MySQL desde una máquina remota
- 20. cmake "make install" a la máquina remota?
- 21. aplicación de la máquina remota abierto
- 22. WMI para reiniciar la máquina remota
- 23. No se puede conectar PostgreSQL a la base de datos remota usando pgAdmin
- 24. Almacenamiento de blob grande con Objectify Appengine
- 25. Django Campo binario o modelo BLOB
- 26. ¿Cómo inicializar ConnectionFactory para la cola JMS remota cuando la máquina remota no se está ejecutando?
- 27. Cómo insertar/recuperar un archivo almacenado como un BLOB en MySQL db usando python
- 28. Reiniciar PostgreSQL de forma remota
- 29. Insertar blob en la base de datos Oracle con C#
- 30. Ejecutando archivo exe o bat en la máquina remota de Windows desde * nix
A tener en cuenta que hay temas de envejecimiento con libpqxx, y no, no es la apgi postgresql C++ "oficial" como se indica en el sitio. – user3791372