Postgresql:“数据库不存在”

时间:2013-08-12 22:49:32

标签: python django postgresql

按照Mac的postgresql安装说明,我最近创建了一个db并启动了服务器。一切看起来都很好。

/opt/local/lib/postgresql93/bin/postgres -D /opt/local/var/db/postgresql93/defaultdb
LOG:  database system was shut down at 2013-08-12 15:36:09 PDT
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started

但是,当我尝试从Python3 Django访问数据库时,出现以下错误:

OperationalError: FATAL:  database "/opt/local/var/db/postgresql93/defaultdb" does not exist

如果我进入该目录defaultdb,我发现它存在并且里面有很多文件。

除了出现在Python回溯中的上述错误消息之外,它还会出现在postgres日志中:

FATAL:  database "defaultdb" does not exist
FATAL:  database "/opt/local/var/db/postgresql93/defaultdb" does not exist

我也尝试使用名称“defaultdb”替换完整路径,但获得相同的消息。

编辑:事实上,运行以下内容也不起作用:

/opt/local/bin/psql93 defaultdb
psql93: FATAL:  database "defaultdb" does not exist

2 个答案:

答案 0 :(得分:7)

initdb创建一个群集,它是一个全局数据目录(-D之后的路径)。此数据目录是数据库集合的容器,以及跨数据库共享的信息(如用户表或数据库日志文件)。 每个PostgreSQL安装只有一个集群,但在该集群中只有你想要的数据库。

createdb在集群内创建数据库,但它不直接操作文件系统,而是在连接到服务器后发出CREATE DATABASE SQL语句。数据库不是由路径引用的,而是由名称引用的,与指定磁盘上的路径的全局数据目录相反。

名为template0template1postgres的特殊数据库会自动使用新群集创建,但您不希望将应用程序数据存储到其中。

似乎您的误解是相信创建群集同时创建数据库或不知道两者之间的区别。通常,群集会在安装阶段自动设置,而创建数据库则由用户自行设置。

答案 1 :(得分:-1)

我通过Macports安装了postgresql93-server后给出了以下说明:

To create a database instance, after install do
 sudo mkdir -p /opt/local/var/db/postgresql93/defaultdb
 sudo chown postgres:postgres /opt/local/var/db/postgresql93/defaultdb
 sudo su postgres -c '/opt/local/lib/postgresql93/bin/initdb -D
/opt/local/var/db/postgresql93/defaultdb'

上述内容对我不起作用,我没有看到defaultdb显示在/opt/local/bin/psql93 --list

但是,createdb defaultdb有效,我立即看到defaultdb已创建。