我正在创建PostgreSQL数据库客户端,它应该替代SQL Server客户端。两个客户端都是用C ++编写的。其中一个受支持的操作是来自包含std::string ReadChunk()
方法的给定类实例的批量复制。
现在我使用libpq函数:
PQexec(connection, "COPY tablename FROM STDIN");
while(reader.HasNext()) {
PQputCopyData(connection, reader.ReadChunk().c_str());
}
PQputCopyEnd(connection);
但事实证明,如果它们代表可以为空的列,我也应该能够截断太长的varchars并在两个连续的NULL
之间插入\t
。有没有办法在数据库端执行此转换,编写C触发器或类似的东西?或者我应该在客户端实现参数解析,比如SQL Server bcp_bind
?
答案 0 :(得分:0)
我的实现推动了数据库客户端的基本数据处理。它似乎是一个很好的解决方案,因为数据源是独立于数据库的,它只遍历读取数据一次 - 我只需要截断和NULL
插入。
因此,最终解决方案包括类RowReader
,方法bool HasNext()
和NextRow(CRow&)
读取表格表示的下一行,并使用每个数据库的实现抽象RowSender
。