2015-07-09 2 views
1

Ну, дело в том, что когда программа выполняет запрос на копирование таблицы в файл .CSV. Qt покажет мне следующую ошибку.Невозможно создать запрос COPY PostgreSQL PQSQL драйвер

"ERROR: syntax error at end of input LINE 1: EXECUTE

Вот код экспортных действий:

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 работает нормально только может выполнить чужой запрос очень хорошо, как выбрать.

Спасибо.

+0

Вы не можете использовать 'COPY' как любой другой запрос. Вам необходимо использовать специфичную для драйвера функцию, которая понимает протокол COPY. –

+0

Друг, как я это делаю? Я имею в виду, что у qpsql-драйвера нет такой функциональности? – MRlinux

+0

Другая идея - это использовать psql execute с qt? – MRlinux

ответ

0
  1. Использование COPY требует прав суперпользователя. Не путайте с \COPY от PostgreSQL
  2. COPY TO требует абсолютного пути к выходному файлу. Если первая точка считаются, попробуйте удалить ./ вашего имя выходного файла
  3. Вы можете обратиться к соответствующим должностям: post1 и post2
1

Вы упомянули, что вы используете интерфейс SQL в Qt и его Драйвер PostgreSQL.

В то время как драйвер PostgreSQL Qt построен поверх стандартной клиентской библиотеки PostgreSQL libpq, насколько я могу судить, он не предлагает поддержку множества функциональных возможностей libpq. В частности, похоже, что нет доступа к поддержке протокола COPY или для LISTEN для асинхронных уведомлений.

Вы должны:

  • libpq непосредственно к COPY ... FROM STDIN
  • или использовать регулярные INSERT заявления через Qt; или
  • Перенесите CSV-вход на сервер, затем используйте COPY ... FROM '/path/on/server', чтобы прочитать ввод из файла на сервере, на котором запущена база данных PostgreSQL, которую читает пользователь в базе данных PostgreSQL.

(Вы также можете отправить патч для Qt, чтобы добавить поддержку протокола COPY, который не должен быть слишком сложно реализовать, но, возможно, не лучший выбор, если вы спрашиваете это.)

+0

Друг Крейг, как я это делаю? Я имею в виду: выполнить libpq на qt? ... – MRlinux

+0

@MRlinux Qt - это просто среда C++. 'libpq' является библиотекой C и может использоваться непосредственно в коде C++. Вы просто используете API 'libpq' напрямую, в руководстве PostgreSQL. –

Смежные вопросы