我正在尝试建立与这样的数据库的连接:
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
有什么想法吗?
答案 0 :(得分: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")
答案 1 :(得分:0)
我在这里有同样的问题。
我安装了两个版本的postgres。如您所见here
,一个在端口5432中,另一个在端口5433中当我尝试连接时:
conn = pg2.connect(dbname='my_db_name', user='my_user', host='localhost', port=5433, password='my_pass')
它可以工作,并且可以与Postgres 9.5版中的所有数据库建立连接。当我切换到端口5432时,我连接到了postgres版本11中的数据库。
答案 2 :(得分:0)
您可以尝试连接到“ 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