Ich erstelle PostgreSQL-Datenbank-Client, der als Ersatz für SQL Server-Client funktionieren sollte. Beide Clients sind in C++ geschrieben. Eine der unterstützten Operationen ist die Massenkopie von einer gegebenen Instanz der Klasse, die die Methode std::string ReadChunk()
enthält.Postgres COPY VON Daten Formatierung vor dem Einfügen
Vorerst ich libpq Funktionen:
PQexec(connection, "COPY tablename FROM STDIN");
while(reader.HasNext()) {
PQputCopyData(connection, reader.ReadChunk().c_str());
}
PQputCopyEnd(connection);
aber stellt sich heraus, dass ich auch in der Lage sein sollte, zu lange Varchars abzuschneiden und legen NULL
zwischen zwei aufeinanderfolgenden \t
, wenn sie auf NULL festlegbare Spalte repräsentieren. Gibt es eine Möglichkeit, diese Konvertierung auf der Datenbankseite durchzuführen, C-Trigger oder ähnliches zu schreiben? Oder sollte ich Argumentparsing auf der Clientseite implementieren, etwa SQL Server bcp_bind
?