PQescapeLiteral не определен?

Это самый простой пример libpq, который я мог придумать, чтобы проиллюстрировать мою проблему. Цель здесь — просто распечатать экранированную строку.

#include <iostream>
#include <libpq-fe.h>
#include <string.h>

using namespace std;

int main(){
    PGconn *db;
    char connstring[] = "dbname=TheInternet";
    db = PQconnectdb(connstring);
    char url[] = "http://www.goo'gle.com/";
    cout<<PQescapeLiteral(db, (const char *)url, (size_t) strlen(url))<<"\n";
}

Когда я компилирую с:

g++ PQescapeLiteral_test.cpp -lpq 

или даже с:

g++ PQescapeLiteral.cpp -I/usr/include/pgsql:/usr/include/pgsql/server:/usr/include/pgsql/server/libpq -lpq

Я получаю сообщение об ошибке:

PQescapeLiteral.cpp: In function ‘int main()’:
PQescapeLiteral.cpp:12: error: ‘PQescapeLiteral’ was not declared in this scope

Я нашел PQescapeLiteral в руководстве по pgsql 9.0 в разделе 31.3.4.: Экранирование строк для включения в команды SQL. У меня самая последняя версия libpq и libpq-devel от yum, поэтому я почти уверен, что она должна быть определена.

Если кто-то может указать мне в правильном направлении, я был бы признателен.


person KeatsKelleher    schedule 06.01.2011    source источник


Ответы (1)


У меня он отлично работает с заголовками PostgreSQL 9.0.1. Какую версию заголовков и библиотеки postgresql вы используете? PQescapeLiteral, по-видимому, был добавлен в версии 9.0: http://developer.postgresql.org/pgdocs/postgres/release-9-0.html#AEN104548

Где вы ожидаете, что libpq.so будет? Вы показываете команду компилятора с ключами -I для поиска файлов заголовков в нестандартном месте, но без соответствующего переключателя -L для поиска библиотеки.

person araqnid    schedule 07.01.2011
comment
libpqxx i686 1:3.0.2-4.fc13 fedora libpqxx-devel i686 1:3.0.2-4.fc13 fedora...postgres 8.4.5...возможно, это оно! Попробую установить последнюю :) - person KeatsKelleher; 07.01.2011