无法创建查询COPY PostgreSQL PQSQL驱动程序

时间:2015-07-09 05:50:46

标签: qt postgresql csv

好的是,程序执行查询时将表复制到文件.CSV。 Qt告诉我下一个错误。

  

“错误:输入结束时出现语法错误   第1行:执行

以下是导出操作的代码:

QSqlQuery qry;

qry.prepare("copy inventory to './inventory.csv'");
if(qry.exec()){
    qDebug()<<"Succes";
}else{
    qDebug()<<qry.lastError().text();
}

qt的版本是5.4,使用postgresql 9.3和驱动程序PQSQL正常工作就可以像select一样执行另一个查询。

感谢。

2 个答案:

答案 0 :(得分:1)

您提到您正在使用Qt的SQL界面及其PostgreSQL驱动程序。

虽然Qt的PostgreSQL驱动程序是在PostgreSQL的标准客户端库libpq之上构建的,但据我所知,它不支持{{1}的许多功能}}。特别是,似乎无法访问libpq协议的支持,也无法访问COPY异步通知。

你必须:

  • LISTEN直接发送到libpq
  • 或通过Qt使用常规COPY ... FROM STDIN语句;或
  • 将CSV输入传输到服务器,然后使用INSERT从运行PostgreSQL数据库的服务器上的文件中读取输入,PostgreSQL数据库运行的用户可以读取该文件。

(您也可以向Qt提交补丁以添加对COPY ... FROM '/path/on/server'协议的支持,这不应该太难实现,但如果您要求,可能不是最佳选择此。)

答案 1 :(得分:0)

  1. 使用COPY需要超级用户权限。不要与\COPY混淆 的PostgreSQL
  2. COPY TO需要输出文件的绝对路径。如果第一点是 考虑一下,尝试删除输出文件名中的./
  3. 您可以参考相关帖子: post1post2