Postgres COPY FROM от форматирования данных перед вставкой

Я создаю клиент базы данных 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

Решение

Моя реализация перенесла базовую обработку данных на клиент базы данных. Это казалось хорошим решением, так как источник данных не зависел от базы данных и проходил чтение данных только один раз — мне нужно было только усечение и NULL вставки.

Таким образом, окончательное решение состояло из класса RowReader с методами bool HasNext() а также NextRow(CRow&) чтение следующей строки в табличном представлении и резюме RowSender с реализациями для каждой базы данных.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]