2

按照 Mac 的 postgresql 安装说明,我最近创建了一个数据库并启动了服务器。一切看起来都运行良好。

/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 traceback 中出现的上述错误消息外,它还出现在 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
4

2 回答 2

7

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

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

名为 的特殊数据库template0template1通常postgres是使用新集群自动创建的,但您不想将应用程序数据存储到其中。

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

于 2013-08-13T00:49:54.243 回答
-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。

于 2013-08-13T00:18:05.740 回答