Postgres COPY来自插入前的数据格式

时间:2016-08-09 12:47:59

标签: c++ sql-server postgresql libpq

我正在创建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

1 个答案:

答案 0 :(得分:0)

我的实现推动了数据库客户端的基本数据处理。它似乎是一个很好的解决方案,因为数据源是独立于数据库的,它只遍历读取数据一次 - 我只需要截断和NULL插入。

因此,最终解决方案包括类RowReader,方法bool HasNext()NextRow(CRow&)读取表格表示的下一行,并使用每个数据库的实现抽象RowSender