0
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');

私が間違ったことをしましたか?

4

1 に答える 1

1

\copypsqlコマンドであり、SQL コマンドではありません。psqlコマンドはpsqlシェル内でのみ機能します。COPYデータベースと直接やり取りしているため、 SQL コマンドを使用する必要があります。ただし、COPY通常はクライアントのファイル システムではなく、サーバーのファイル システムで動作します。

ファイル名を指定した COPY は、PostgreSQL サーバーにファイルから直接読み書きするように指示します。ファイルはサーバーからアクセス可能である必要があり、名前はサーバーの観点から指定する必要があります。STDIN または STDOUT を指定すると、クライアントとサーバー間の接続を介してデータが送信されます。

おそらく、STDIN オプションを使用してPQputCopyData、データを PostgreSQL サーバーに送信する必要があります。

于 2013-05-17T20:42:14.073 に答える