Thread: Unable to execute \copy from Client Application
Hello All, My application is a C++ APP. I'm executing \copy command from the CPP and its as follows strPgSqlQuerybuf<<"\\copy hnb_registration FROM '/root/Sujay/hnbfile.txt' USING DELIMITERS ','"; Second \ is to keep the compiler happy. When this command executes on PostGreSql, gives a syntax error as ERROR: syntax error at or near "\" at character 1 STATEMENT: \copy hnb_registration FROM '/root/Sujay/hnbfile.txt' USING DELIMITERS ',' Can some please help! Thanks in advance. Regards, Sujay -- View this message in context: http://postgresql.1045698.n5.nabble.com/Unable-to-execute-copy-from-Client-Application-tp5488816p5488816.html Sent from the PostgreSQL - general mailing list archive at Nabble.com.
On Thu, 2012-02-16 at 00:07 -0800, sujayr06 wrote: > Hello All, > > My application is a C++ APP. > > I'm executing \copy command from the CPP and its as follows > > strPgSqlQuerybuf<<"\\copy hnb_registration FROM > '/root/Sujay/hnbfile.txt' USING DELIMITERS ','"; > > Second \ is to keep the compiler happy. When this command > executes on PostGreSql, > gives a syntax error as > > ERROR: syntax error at or near "\" at character 1 > STATEMENT: \copy hnb_registration FROM '/root/Sujay/hnbfile.txt' > USING DELIMITERS ',' > > Can some please help! > \copy is a psql metacommand, not a SQL command. You cannot use it in your application. You need to use the libpq API. -- Guillaume http://blog.guillaume.lelarge.info http://www.dalibo.com
Hello Guillaume, Please find the usage of \copy and the corresponding API. strPgSqlQuerybuf<<"'\'copy hnb_registration FROM '/root/Sujay/hnbfile.txt' USING DELIMITERS ','"; pPostGresQueryResult = PQexecParams(pPgConnection, strPgSqlQuerybuf.str().c_str(), 0, // one param NULL, // let the backend deduce param type NULL, NULL, // don't need param lengths since text NULL, // default to all text params 0); ePostGresCmdExecStatus = PQresultStatus(pPostGresQueryResult) ; Let me know if the usage has to be corrected. Regards, Sujay -- View this message in context: http://postgresql.1045698.n5.nabble.com/Unable-to-execute-copy-from-Client-Application-tp5488816p5488935.html Sent from the PostgreSQL - general mailing list archive at Nabble.com.
Hello, Please find the usage of \copy and the corresponding API. strPgSqlQuerybuf<<"\\copy hnb_registration FROM '/root/Sujay/hnbfile.txt' USING DELIMITERS ','"; pPostGresQueryResult = PQexecParams(pPgConnection, strPgSqlQuerybuf.str().c_str(), 0, // one param NULL, // let the backend deduce param type NULL, NULL, // don't need param lengths since text NULL, // default to all text params 0); ePostGresCmdExecStatus = PQresultStatus(pPostGresQueryResult) ; Let me know if the usage has to be corrected. Regards, Sujay -- View this message in context: http://postgresql.1045698.n5.nabble.com/Unable-to-execute-copy-from-Client-Application-tp5488816p5488941.html Sent from the PostgreSQL - general mailing list archive at Nabble.com.
On Thu, 2012-02-16 at 01:05 -0800, sujayr06 wrote: > Hello, > > Please find the usage of \copy and the corresponding API. > > strPgSqlQuerybuf<<"\\copy hnb_registration FROM > '/root/Sujay/hnbfile.txt' USING DELIMITERS ','"; > > pPostGresQueryResult = PQexecParams(pPgConnection, > strPgSqlQuerybuf.str().c_str(), > 0, // one param > NULL, // let the > backend deduce param type > NULL, > NULL, // don't need > param lengths since text > NULL, // default to > all text params > 0); > ePostGresCmdExecStatus = > PQresultStatus(pPostGresQueryResult) ; > > Let me know if the usage has to be corrected. Once again, you cannot use the \copy metacommand. Use the COPY API from libpq (http://www.postgresql.org/docs/9.1/interactive/libpq-copy.html). -- Guillaume http://blog.guillaume.lelarge.info http://www.dalibo.com
On 02/16/12 1:05 AM, sujayr06 wrote: > Please find the usage of \copy and the corresponding API. > > strPgSqlQuerybuf<<"\\copy hnb_registration FROM > '/root/Sujay/hnbfile.txt' USING DELIMITERS ','"; The \ commands are all metacommands for the PSQL utility, none of it is SQL that can be sent as a query. you need to use the plain sql 'COPY ... FROM STDIN' command, and use PQputCopyData() to send the data (eg, read your /root/Sujay/hnbfile.txt and send it to that API). ugh, /root ?!? Why is ROOT running *ANY* SQL at all ?? -- john r pierce N 37, W 122 santa cruz ca mid-left coast