linux下安装配置连接PostgreSQL

    技术2022-05-12  11

    在GNU/Linux下,使用得最多的两款优秀的开源数据库非MySQL跟PostgreSQL了。我从大学开始接触数据库起就一直使用的是MySQL,一是因为那时太菜,只懂得用Windows,于是PostgreSQL跑不了;二是因为PostgreSQL的使用的确有些复杂。就这样,PostgreSQL在我的头脑中始终是一片空白。今天小试了一下PostgreSQL,配置居然麻烦到都快要把我弄疯了。晚上一两个小时的时间是很宝贵的,所以一定要记下来,不然就浪费了我的努力。首先,安装PostgreSQL。我现在使用的是Fedora 8,在yum源上可以很容易找到PostgreSQL 8.1,用yum安装也极为方便。如果不能通过这类工具安装,需要下载源代码自行编译安装的话,也应该问题不大。安装好了之后,第一件事就是想去看一看有没有什么GUI工具可以方便去操作它。果然,pgAdmin III就是一款非常流行并且优秀的用C++开发的基于wxWidgets的用于PostgreSQL的GUI工具。下载,安装。现在开始连接数据库。哦,数据库还没开。因为我是用yum安装的,所以服务脚本都已经自己配置好了/etc/init.d/postgresql start就好了。咦,运行之后却不行,有错误提示,数据库未初始化。不过好在它把解决的办法也提示出来了,用/sbin/service initdb /var/lib/pgsql/data -E UTF8 --no-locale。这样之后,便可以开启数据库服务了。如果不是通过yum安装,而是直接编译源代码安装到/usr/local中的话,开启服务一般要用/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data,而且最好在后台开启(&)。服务开启成功。如果是MySQL的话,想必现在应该已经可以开始着手工作了。但这是PostgreSQL,所以还不行。我打开pgAdmin III,去连接PostgreSQL,提示出错,认证失败。于是去网上搜索了一大堆资料,终于引出了第一点:PostgreSQL在初始配置的时候,依赖于两个配置文件--postgresql.conf和pg_hba.conf。其中,postgresql.conf文件中有很重要的两行,它决定了PostgreSQL去监听哪一段网络,以及去监听哪一个端口。它们分别是listen_addresses = 'localhost'与port = 5432。这个port = 5432倒好说,不用改,但是listen_addresses = 'localhost'就一定要改:如果想让PostgreSQL监听整个网络的话,就必须把它改成listen_addresses = '*'。然后是pg_hba.conf。这个文件最后有一个列表,它决定了分派了每一个用户的权限,以及认证方式。格式是“Type Database User Address Method”,详细的设置文件中的注释里写得很清楚,要注意的是method最好写md5。改完了这两个文件之后,重启服务。再去连接,还是不行,一样认证失败。这里对我当时的心情以及寻找解决办法的过程就不作描述了,直接说原因。PostgreSQL在安装的时候都会为自己产生一个超级用户,名叫postgres。这个用户的初始密码为空,是不能用于连接数据库的。于是,用passwd命令给postgres一个密码。但是这样还是不行,因为PostgreSQL本身有一个表,叫pg_shadow,表里记录了PostgreSQL的用户和密码。于是,先将pg_hba.conf中,本机的认证方式改为trust,然后不用密码,用psql登录PostgreSQL系统,“SELECT * FROM pg_shadow;”,于是发现这个表里的postgres这个用户根本还没有存储密码;于是,再“ALTER USER postgres PASSWORD '它的密码';”然后再退出,重启服务,连接就可以成功了。


    最新回复(0)