2016-08-09 8 views
0

私はSQL Serverクライアントの代わりに動作するはずのPostgreSQLデータベースクライアントを作成しています。どちらのクライアントもC++で書かれています。サポートされている操作の1つは、std::string ReadChunk()メソッドを含むクラスの指定されたインスタンスからの一括コピーです。今のPostgres挿入前のデータフォーマットCOPY FROM

私はlibpqの機能を使用します。

PQexec(connection, "COPY tablename FROM STDIN"); 
while(reader.HasNext()) { 
    PQputCopyData(connection, reader.ReadChunk().c_str()); 
} 
PQputCopyEnd(connection); 

しかし、私は、あまりにも長いのvarcharを切り捨てると、彼らはNULL可能列を代表している場合\t連続した2間NULLを挿入することができなければならないことが判明しました。データベース側でこの変換を実行する方法はありますか?Cトリガーなどを作成する方法はありますか?または、クライアント側で引数解析を実装する必要がありますか?SQL Server bcp_bindのようなものですか?

答えて

0

私の実装は、データベースクライアント上で基本的なデータ処理をプッシュしました。データソースはデータベースに依存せず、データを一度しか読み取ることができなかったため、良い解決策に見えました。私は、切り捨てと、NULL挿入が必要でした。

最終的な解決策は、すべてのデータベースの実装でテーブル表現と抽象RowSenderに次の行を読み取る方法bool HasNext()NextRow(CRow&)持つクラスRowReaderから成っていました。

関連する問題