我正在尝试在 Beaglebone Black 上设置一个小型 Postgresql 数据库。该应用程序运行缓慢,因此我将数据库存储在 64GB microSD 卡上。我格式化了驱动器,并正确安装了它。
我以 postgres 身份登录
sudo su postgres
创建数据库集群
./initdb /data # the mountpoint is /data
一切似乎都正常。我可以
./postgres -D /data and the cluster seems to start correctly.
我希望数据库在 init.d 中启动,因此我编辑了 /etc/postgresql/9.1/postgresql.conf 中的三行,并将这三条条目指向 /data。当我启动机器时,数据库失败,日志文件中显示以下内容
autovacuum launcher started
database system is ready
incomplete startup packet
received smart shutdown request
autovacuum launcher shutting down
database system is shutdown
我显然遗漏了一些东西,如果能指出在哪里可以找到我遗漏的东西,我将不胜感激。
答案1
如果您使用专门用于与这些脚本协同工作的工具创建了 postgres 实例,那么启动脚本将会选取您的 postgres 实例,即:
- pg_createcluster创建一个实例(或者用 Postgres 术语来说叫集群)。
- pg_ctlcluster来控制一个实例。
例如,您不需要运行initdb
,并假设您已经安装了该postgresql-9.1
软件包,而是应该执行以下操作:
sudo pg_createcluster --datadir=/data 9.1 mycluster
/etc/postgresql/9.1
然后将为该实例在for和其他配置文件下创建一个特定的目录postgresql.conf
,其中包括start.conf
以下内容:
# Automatic startup configuration
# auto: automatically start/stop the cluster in the init script
# manual: do not start/stop in init scripts, but allow manual startup with
# pg_ctlcluster
# disabled: do not allow manual startup with pg_ctlcluster (this can be easily
# circumvented and is only meant to be a small protection for
# accidents).
auto
然后,您可以编辑此文件以使集群在启动时自动启动或不启动。
另一方面,如果您具备 postgres 专业知识,则可以绕过 Ubuntu 处理 PostgreSQL 的软件包方式,并直接发出问题initdb
,postgres -D ...
如问题中所述,但您应该一路执行并使用您自己的启动脚本和配置文件。
仅将打包的内容用于部分管理工作往往行不通,例如编辑/etc/postgresql/9.1/postgresql.conf
不会有太大效果,因为您的自定义调用将在您的目录下initdb
创建,而直接调用将获取该文件,而不是目录下的文件postgresql.conf
/data
postgres -D /data
/etc/...