2014-02-02 4 views
0

Я перехожу из MySQL в PostgreSQL. С Postgres я могу установить соединение, которое идеально. После этого каждый запрос выводит указатель NULL. Что может быть неправильным?Как настроить правильные результаты PostgreSQL в Linux?

Я использую LinuxMint 16, с Postgres 9.1 и libpq в затмении C++ 4,7

m_connection = PQconnectStart (dbname=restaurant user=mensfort password=zhongguo hostaddr=127.0.0.1 port=5432) 
connected = PQstatus(m_connection); /* => result is CONNECTION_STARTED */ 

PGresult *res = PQexec(m_connection, "BEGIN"); /* -> Always a NULL pointer. */ 
ExecStatusType status = PQresultStatus(res); 

Я уверен, что база данных доступна и существует пользователь с соответствующим паролем.

По словам друга, я изменил аутентификацию: Внесите изменения в pg_hba.conf (методы аутентификации).

host all   all  127.0.0.1/32  trust   # md5 -> trust 

Что еще я могу настроить, чтобы заставить Postgres работать на локальном ПК?

+1

Итак, что находится в 'status'? –

+0

Ваш друг был в замешательстве; Если у вас рабочее соединение, вам не нужно возиться с 'pg_hba.conf', потому что если вы успешно подключились, вы уже прошли этот момент. –

ответ

0

Я настоятельно рекомендую читать документацию - начать с the libpq example program here.

Вы заметите, что оно проверяет PQresultStatus(res) != PGRES_COMMAND_OK, и если оно ложно, звоните PQerrorMessage(conn), чтобы получить информацию об ошибке.

Вы никогда не должны заботиться о том, что такое res. Это непрозрачное значение для вашей программы. В этом случае PostgreSQL возвращает NULL, чтобы указать на ошибку, но вы должны использовать PQresultStatus(res), чтобы проверить это, а не проверять его напрямую. Чтобы получить ошибку, вы запрашиваете объект соединения.

+0

Я остановился с Postgres и начал с MariaDB, который на 100% совместим с MySQL. –

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