could not connect to server: Connection refused
Is the server running on host "192.168.198.133" and accepting
TCP/IP connections on port 5432?
这是由于没有设置PostgreSQL允许被远程访问
:
解决办法
第一步:修改postgresql.conf
postgresql.conf
的位置在数据库目录
中
这个
数据库目录
就是在初始化时设定的pgsql/bin/initdb -D 数据库目录
我的数据库目录在
/home/brown/pgsrc_11.0/db_test
而postgresql.conf
就在/home/brown/pgsrc_11.0/db_test/postgresql.conf
在文件中添加一行(文件中已经有listen_addresses = localhost
,但是被注释了)
listen_addresses = '*'
修改后:
第二步:修改pg_hba.conf
pg_hba.conf
也在数据库目录下
添加一行:
host all all 0.0.0.0/0 md5
修改后:
第三步:重启pgsql
来到pgsql
的安装目录下的bin
目录
我的目录是psql/bin
输入命令:
- 关闭服务
./pg_ctl stop -D 数据库目录
- 打开服务
./pg_ctl start -D 数据库目录
我的目录结构
.
├── pgsql # 我的pgsql安装目录
│ ├── bin # 在bin下使用 ./pg_ctl
│ ├── include
│ ├── lib
│ └── share
├── pgsrc_11.0
│ ├── config
│ ├── contrib
│ ├── db_test # 我的数据库目录
│ ├── doc
│ └── src
我的当前目录
[brown@bogon bin]$ pwd
/home/brown/pgsql/bin
关闭服务
./pg_ctl stop -D ../../pgsrc_11.0/db_test
开启服务
./pg_ctl start -D ../../pgsrc_11.0/db_test
第四步:测试连接
注意设置dbname, user, password, hostaddr
#include <iostream>
#include <pqxx/pqxx>
using namespace std;
using namespace pqxx;
int main(int argc, char* argv[]) {
try {
// 这里的dbname, user, password, hostaddr 都是根据你的情况设定的
connection C("dbname = testdb user = postgres password = cohondob \
hostaddr = 127.0.0.1 port = 5432");
if (C.is_open()) {
cout << "Opened database successfully: " << C.dbname() << endl;
} else {
cout << "Can't open database" << endl;
return 1;
}
C.disconnect ();
} catch (const std::exception &e) {
cerr << e.what() << std::endl;
return 1;
}
}
dbname
:在启动数据库服务后,执行./psql 数据库名
,这个数据库名
就是dbname
user
:pgsql的数据库用户password
:对应用户的密码hostaddr
:pgsql数据库的主机地址
都设置好后,使用以下命令编译:
g++ test.cpp -lpqxx -lpq
./a.out
a.out
的执行结果是:
Opened database successfully: 你的数据库名