我的设置:
- Ubuntu 9.10
- PostgreSQL 8.4.2
我在本地 PostgreSQL 下使用 psql shell 中的以下命令创建了一个新用户(jdoe):
CREATE USER jdoe WITH PASSWORD 'password';
我还创建了一个名为 的新数据库mydb
。我的目标是让用户jdoe
完全访问数据库mydb
。我通过 GUI pgAdmin III 做了一些事情,\l
在 psql shell 中运行后,我得到了以下输出:
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
--------------+----------+----------+-------------+-------------+---------------
mydb | jdoe | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | =CTc/mydb
: hmart=CTc/mydb
postgres | postgres | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 |
显示我的用户列表(\du
),我得到:
List of roles
Role name | Attributes | Member of
-----------+-------------+-----------
jdoe | | {}
postgres | Superuser | {}
: Create role
: Create DB
从上面的内容中我无法真正判断我的目标是否已经实现,但是有没有办法测试用户是否jdoe
可以与数据库通信mydb
?我正在通过 Django 的设置进行测试:
DATABASE_ENGINE = 'postgresql_psycopg2'
DATABASE_NAME = 'mydb'
DATABASE_USER = 'jdoe'
DATABASE_PASSWORD = 'password'
DATABASE_HOST = ''
DATABASE_PORT = ''
但在之后我收到以下错误python manage.py syncdb
:
psycopg2.OperationalError: FATAL: Ident authentication failed for user "jdoe"
我在 Win XP 上使用最新的 PostgreSQL 安装程序完成了上述所有操作,并且所有操作都与 Django 完美配合。我不确定我在 Ubuntu 下缺少了什么。
答案1
您可能已在 pg_hba.conf 中进行了设置,以便本地套接字连接必须使用 ident 授权,而到 localhost 的 tcp 连接是受信任的。请阅读 pg_hba.conf 中有关您版本的文档,例如 8.4 是这里,您可以根据自己的情况进行正确的配置。
答案2
这很奇怪,设置DATABASE_HOST
以localhost
修复该问题:
# settings.py
DATABASE_HOST = 'localhost'