Può fare un esempio di inserimento di dati binari in database PostgreSQL dalla macchina remota utilizzando libpq. La mia seconda domanda è: c'è qualche altra API più efficiente di libpq con C++. GrazieInserire Binary Large Object (BLOB) in PostgreSQL utilizzando libpq dalla macchina remota
5
A
risposta
10
Ci sono 2 tipi di blob in PostgreSQL — BYTEA
e Large Objects
. Ti consiglio di non utilizzare oggetti di grandi dimensioni poiché non puoi unirli alle tabelle.
Per bytea usereste qualcosa di simile in 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
Utilizzando libpqxx è il modo per farlo C++, mentre libpq è l'API C.
Ecco un esempio completo di come farlo utilizzando pqxx: How to insert binary data into a PostgreSQL BYTEA column using the C++ libpqxx API?
In breve, il relativo C linee ++ utilizzando libpqxx simile a questa:
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();
Problemi correlati
- 1. Impossibile connettersi dalla macchina remota
- 2. Celery - Come inviare attività dalla macchina remota?
- 3. Come copiare una directory dalla macchina locale alla macchina remota
- 4. Aprire l'applicazione macchina remota
- 5. Cabal non può installare postgresql-libpq-0.9.0.2
- 6. Postgresql, JDBC e flussi BLOB
- 7. Inserire BLOB utilizzando java per DB2 e Oracle
- 8. cmake "make install" su macchina remota?
- 9. Installa RPostgreSQL su Debian con PostgreSQL 9.4 libpq-fe.h Errore
- 10. Il codice libpq Postgresql semplice è troppo lento?
- 11. Java Class.forName() dalla directory remota
- 12. Come leggere l'immagine caricata in un blob?
- 13. Binary Search Query utilizzando SQL
- 14. python read binary dalla posizione specifica
- 15. Dove ottengo la sorgente libpq?
- 16. Python Formatting Large Text
- 17. Comando PowerShell per copiare file sulla macchina remota
- 18. Utility binary diff e patch per un'immagine di macchina virtuale
- 19. inserire valori univoci per postgresql
- 20. È un processo in esecuzione su una macchina remota?
- 21. comando in esecuzione su macchina remota con tramp?
- 22. Inserire trigger per aggiornare un'altra tabella utilizzando PostgreSQL
- 23. Installare errore pacchetto libpq-dev
- 24. Errore psycopg2: DatabaseError: errore senza messaggio dalla libpq
- 25. Come eseguire uno script PowerShell disponibile nella macchina remota?
- 26. Copia un file non exe su una macchina remota
- 27. Inserire i file `tsv` in postgresql db
- 28. Inserire valori con quotazione singola in PostgreSQL
- 29. utilizzando schemi in postgresql
- 30. postgresql inserire più righe - fail
Worth c'è di nota sono l'invecchiamento problemi con libpqxx, e no, non è il post ufficiale "postgresql C++ api" come afferma sul sito. – user3791372