从c ++程序执行时psql \ copy命令错误

时间:2013-05-17 20:01:43

标签: c++ postgresql psql libpq

ERROR:  syntax error at or near "\"
LINE 1: \copy mytable FROM urishFile WITH (FORMAT csv, DELIMITER ','...
        ^

从c ++程序运行命令时出现此错误。

command = "\\copy mytable FROM urishFile WITH (FORMAT csv, DELIMITER ',',  NULL 'NULL');";
executCommand(conn, command);

void executCommand(PGconn *conn, std::string command) {
    PGresult   *res;                                    // holds query result 
    res = PQexec(conn, command.c_str());
    if (PQresultStatus(res) != PGRES_COMMAND_OK) {
        fprintf(stderr, "%s", PQerrorMessage(conn));
        PQclear(res);
        exit_nicely(conn);
    }
    PQclear(res);       
}

从psql提示符运行相同的命令时,它可以正常运行。

mydatabase=> \copy mytable FROM urishFile WITH (FORMAT csv, DELIMITER ',',  NULL 'NULL');

我做错了什么?

1 个答案:

答案 0 :(得分:1)

\copypsql命令,而不是SQL命令。 psql命令仅在psql shell中运行。由于您直接与数据库通信,因此需要使用COPY SQL命令。但是,COPY通常适用于服务器的文件系统而不是客户端的文件:

  

带有文件名的COPY指示PostgreSQL服务器直接读取或写入文件。该文件必须可供服务器访问,并且必须从服务器的角度指定名称。指定STDIN或STDOUT时,数据通过客户端和服务器之间的连接传输。

您可能需要使用STDIN选项和PQputCopyData将数据发送到PostgreSQL服务器。