【问题标题】:Postgresql & psycopg2: database does not existPostgresql & psycopg2:数据库不存在
【发布时间】:2015-06-25 15:54:08
【问题描述】:

我正在尝试建立与这样的数据库的连接:

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

我的pg_hba.conf 文件有一行:

TYPE __ DATABASE___USER__ADDRESS___METHOD
local all lfcj peer

我正在尝试使用对等标识,我的 SO 用户名也是 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

我得到了这些信息:

                            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

有什么想法吗?

【问题讨论】:

  • 不同端口上的两个数据库?

标签: python database postgresql postgresql-9.1 psycopg2


【解决方案1】:

您的连接字符串应如下所示:

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命令的权利,但是语法和你说的一样,还是不行。跨度>
【解决方案2】:

您能否尝试连接到“postgres”数据库:

psql -d postgres

然后执行以下命令:

show data_directory;

在应该返回的 9.3.1.0-alpha1 上

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

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

如果一切正常,似乎 Postgresapp 调用 initdb 成功,但 createdb 失败。您可以手动执行此操作,只需从终端(不在 psql 中)执行 createdb USERNAME

【讨论】:

    【解决方案3】:

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

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

    当我尝试连接时:

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

    它工作并与 postgres 9.5 版中的所有数据库建立了连接。当我切换到端口 5432 时,我连接到 postgres 版本 11 中的数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 2013-10-25
      • 1970-01-01
      • 2018-07-08
      • 2022-01-12
      • 1970-01-01
      • 2020-08-28
      相关资源
      最近更新 更多