---
title: "linux安装配置postgresql"
date: 2012-11-09 00:00:00
tags: [linux, postgresql, rails]
---

这周在公司中的一个任务是，安装postgresql 数据库，并要成功连接rails 程序，执行rake 命令。走了很多弯路吧。主要有：

- 在postgresql 中创建一个与database.yml中用户名一致的用户。
- 创建一致的用户，并赋予superuser身份。
- 在postgres中创建一个用户与当前linux用户名一致。不设置/设置密码
- 修改/etc/postgresql/9.1/main/pg\_hba.conf,修改里面的验证方法。

主要出现的错误有：no password supplied.等错误。

最后，在各种操作后终于成功执行了 rake 命令，昨天晚上我自己在自己的电脑上又试了一下，现在将我们应该做的正确操作描述如下。

首先是在linux/ubuntu上安装postgres.

```
    sudo apt-get install postgresql-9.1

    sudo apt-get install postgresql-server-dev-9.1  
```

postgresql 数据库在安装的时候会默认创建postgres用户，它的身份可以简单理解成为mysql 中的root用户。并且我们现在可以这样登录postgresql

```
    sudo -u postgres psql (注意这里是小写的u，和后面的有区别)
```

接下俩我们需要在postgresql 中创建一个与当前你使用的linux用户名一致，并赋予superuser.（当然这个操作需要在连接到数据库的基础上）

```sql
# Create SuperUser
create user junv with superuser (当前我的linux用户名为junv)  
```

完成数据库操作后，使用 \q退出数据库命令行

然后，我们需要修改/etc/postgresql/9.1/main/pg\_hba.conf（这里的9.1，是因为我安装的数据库版本是9.1）

```
    sudo gedit  /etc/postgresql/9.1/main/pg_hba.conf
```

将里面相似的内容修改为类似如下所示：

```
    \# Database administrative login by Unix domain socket  
    local all postgres trust

    \# TYPE DATABASE USER ADDRESS METHOD  
    \# “local” is for Unix domain socket connections only  
    local all all trust  
    \# IPv4 local connections:  
    host all all 127.0.0.1/32 trust  
    \# IPv6 local connections:  
    host all all ::1/128 trust
```

最后这个method,改成trust,表示信任所有来地本地(localhost)的连接。这样我们就可以连上数据库了

和mysql 我们修改了配置文件之后还需要做的是 重启 数据库，让配置生效。

```
    sudo service postgresql restart
```

到现在为止。我们对数据库进行的操作就差不多了。现在你应该已经可以成功脸上数据库了。

但是经过我的实验，我发现，我可以把database.yml中设置的用户名改成任意值，即使是一个在postgresql中根本不存在的用户名，也依然可以成功。所以我猜测，postgresql可能是用的我当前linux 系统的这个用户名吧。具体有待验证。

由于我们配置文件中，配置为对本地的所有连接都是信任的，这应该也是原因之一吧。

这一周在公司的生活很充实，由于使用ubuntu,代理，结对编程的缘故，基本上都没什么时间关注QQ，和浏览新闻了。。。。。。。。

开始适应在thoughtworks的生活。
