Я создаю клиент базы данных PostgreSQL, который должен работать как замена клиента SQL Server. Оба клиента написаны на C++. Одной из поддерживаемых операций является массовая копия из данного экземпляра класса, содержащего метод std::string ReadChunk()
.Postgres COPY FROM форматирование данных перед вставкой
Сейчас я использую 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
?