Я использую libpq для вставки массовых данных из программы на языке C.
Объемные данные содержат тип данных, представляющий собой двойной массив, который в PostgreSQL имеет тип float8 [].
Моя платформаWindows 10, PostgreSQL 11.
Тестируемая таблица имеет следующую структуру:
create table TestTable(
a int4,
b float8,
c float8[]
)
Код на C выглядит следующим образом:
void OutputRes(int i)
{
int Status;
char sql[SQLLEN]= "COPY TestTable FROM STDIN with(delimiter ',');";
PGconn *conn = NULL;
PGresult *res;
char buffer[] = "1,7.4,'{1.5}'\n";
conn = PQconnectdb(CONNSTR);
if (PQstatus(conn) != CONNECTION_OK) {
printf("Connection failed: %s", PQerrorMessage(conn));
}
res = PQexec(conn, "COPY TestTable FROM STDIN with(delimiter ',');");
if (PQresultStatus(res) != PGRES_COPY_IN) {
printf("Not in COPY_IN mode\n");
}
PQclear(res);
Status = PQputCopyData(conn, buffer, strlen(buffer));
Status = PQputCopyData(conn, buffer, strlen(buffer));
Status = PQputCopyEnd(conn, NULL);
res = PQexec(conn, "COMMIT;");
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
printf("BEGIN command failed: %s", PQerrorMessage(conn));
}
PQclear(res);
PQfinish(conn);
}
Пока переменная "buffer"содержит данные для вставки.
Вставка завершается успешно, если она имеет следующую структуру:
buffer[]="1,7.4,{1.5}\n"
Но если я попытаюсь вставить несколько записей в массив, вставка не будетработа и никаких сообщений об ошибках.
buffer[]="1,7.4,{1.5,2.3}\n"
Кроме того, я попробовал следующее, оба не удалось.
buffer[]="1,7.4,\"{1.5,2.3}\"\n"
buffer[]="1,7.4,'{1.5,2.3}'\n"
Может кто-нибудь помочь мне в этом?