Postgresql和psycopg2:数据库不存在

5

我正在尝试连接到一个像这样的数据库:

psycopg2.connect(database="movies", user="lfcj", host="127.0.0.1");

我的pg_hba.conf文件有一行:

类型 __ 数据库___用户__地址___方法
local all lfcj peer

我正在尝试使用对等认证,我的操作系统用户名也是lfcj

当我像这样登录postgresql,授予所有权限给lfcj,并运行\list

psql lfcj -h 127.0.0.1 -d movies 
Enter password:  'myPassword'

psql (9.4.1)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

movies=# GRANT ALL PRIVILEGES ON DATABASE  movies TO lfcj WITH GRANT OPTION;
movies=#\list

I get this information:

                            List of databases
Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
--------+----------+----------+-------------+-------------+-----------------------
movies  | lfcj     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/lfcj         +
        |          |          |             |             | lfcj=C*T*c*/lfcj+

因此:数据库movies已经存在,lfcj是所有特权的所有者。但是当我运行以下命令时:psycopg2.connect(movies, lfcj);会抛出一个错误:
File "/usr/lib/python2.7/dist-packages/psycopg2/__init__.py", line 179, in connect
connection_factory=connection_factory, async=async)
psycopg2.OperationalError: FATAL:  database "movies" does not exist

有什么想法吗?

不同端口上的两个数据库? - Craig Ringer
3个回答

1

请尝试连接到名为“postgres”的数据库:

psql -d postgres

然后执行以下命令:
show data_directory;

在 9.3.1.0-alpha1 上,应该返回


/Users/USERNAME/Library/Application Support/Postgres93/var

然后使用简写\l检查服务器上存在哪些数据库。

如果所有操作都顺利,那么Postgresapp成功调用了initdb,但是createdb失败了。你可以手动执行createdb USERNAME来解决这个问题,但不要在psql内部执行,而是在终端中执行。


0

你的连接字符串应该长成这样:

psycopg2.connect("dbname=test user=postgres password=secret")

connect方法将为您提供与数据库的连接,因此您可能需要将其存储在变量中。通常是这样的:

conn = psycopg2.connect("dbname=test user=postgres password=secret")

你也可以像这样使用一组关键字:

conn = psycopg2.connect(database="test", user="postgres", password="secret")

@Silver,我正在使用脚本运行这些命令,所以我没有正确复制connect命令,但语法就像你说的那样,它仍然无法工作。 - regina_fallangi

-1

我在这里遇到了同样的问题。

我安装了两个版本的Postgres。一个在5432端口,另一个在5433端口,你可以在这里看到。

当我尝试连接时:

conn = pg2.connect(dbname='my_db_name', user='my_user', host='localhost', port=5433, password='my_pass')

它可以在PostgreSQL 9.5版本中连接所有数据库,当我切换到端口5432时,我可以连接到PostgreSQL 11版本中的数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接