postgresql小试

作为一个只用过mysql,外加在公司用oracle的苦逼程序员,今天趁着感冒差不多好的当口,学学之前就碰到过,但是始终没自己动手试过的postgresql。

首先说明一下,我是在vagrant做的虚拟机中搭建的postgresql。postgresql的具体安装方法是

安装好之后你可以通过下面的方式测试

如果列出一些数据库的话,那就代表成功。基本上apt-get install方式安装的不会失败的,除非你有别的程序占据了5432端口(postgresql默认端口)之类的。
为了方便,你需要建立一个数据库自己用。

连接上mydb并建立一个表增加一些数据

SQL语句想必大家都很熟悉。\d表示列出所有表,\q表示退出(MySQL也是\q)。
接下来,尝试从宿主机用ruby代码访问postgresql。
首先通过下面的命令确认postgresql绑定的IP。

默认情况下是127.0.0.1,你需要修改配置文件postgresql.conf。我的配置文件是/etc/postgresql/9.1/main/postgresql.conf。配置项是

这里原先不是星号,是localhost,你要改成*,这样就会绑定到0.0.0.0。
这时你再用netstat查看时,发现postgres绑定到了0.0.0.0:5432上,并且从外部telnet guest_ip 5432是可以通的(吐槽一下,某些高级/资深头衔的人不知道怎么确认服务器某个端口是否开启,居然想用ping……)。
接下来如果你尝试从外部连接的话是不一定能成功的,因为还有权限管理配置在另外一个文件中pg_hba.conf,我的是在/etc/postgresql/9.1/main/pg_hba.conf,增加

host_ip就是你的宿主机IP,这里表示允许来自host_ip的请求访问所有数据库。
接下来,就是用ruby来访问了。我使用的是pg。安装方法是

如果遇到异常,多半是没有装postgresql的开发相关的包,可以用下面的方式解决。

我会告诉你我的宿主机也是ubuntu么?还有其实是PQ,而不是PG,我被搞了好长时间么?

安装好pg之后,参照pg主页的代码,在irb中

open的参数,因为是远程服务器,所以需要host,user必须,而postgres这个值是我猜的……
res默认是一个字典的集合,这样方便视图处理。当然你可以通过each_row方法获取单行值,通过fields获取headers。
记得最后conn.close关闭连接。

至此,使用ruby远程访问postgresql基本完成。