我的设置:
- Ubuntu 9.10
- PostgreSQL 8.4.2
我在 psql shell 中使用以下命令在本地 PostgreSQL 下创建了一个新用户(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 = ''
但我在 a 之后收到以下错误python manage.py syncdb
:
psycopg2.OperationalError: FATAL: Ident authentication failed for user "jdoe"
我在 Win XP 上使用最新的 PostgreSQL 安装程序完成了上述所有操作,并且一切都与 Django 完美配合。我不确定在 Ubuntu 下我缺少什么。
您可能已经在 pg_hba.conf 中设置了它,以便本地套接字连接必须使用 ident 授权,而到 localhost 的 tcp 连接是受信任的。阅读 pg_hba.conf 上的文档以了解您的版本,例如 8.4 is here,您可以根据您的情况正确配置它。
这很奇怪,设置
DATABASE_HOST
来localhost
解决问题: