在另一个硬盘驱动器上建立 PostgreSQL 数据库而不是我在 OS X 上的系统?

Dat*_*eed 7 postgresql mac-os-x

我在 OS X 10.8.3 上,我已经从 macports 安装了 PostgreSQL,但我意识到我的系统驱动器上没有足够的空间用于我将要填充数据的数据库。

有没有办法在另一个驱动器/分区(不是系统,安装 postgres 的地方)上创建新数据库?

我怎样才能做到这一点?

Cra*_*ger 8

我强烈建议您不要把一个表空间的外置移动硬盘上。如果表空间消失(即:驱动器已拔出),您可能会面临严重的数据库损坏且难以恢复的风险。您可能会发现权限管理也是一个挑战。

您通常应该initdb在驱动器上创建一个新的数据库集群,然后以pg_ctl. 如果您愿意,可以更改 launchd 属性以自动启动数据库(这将需要弄乱文件权限),或者您可以pg_ctl在想要使用它时手动启动它。

将现有数据目录移动到新位置并创建从旧位置到新位置的符号链接或编辑 launchd 配置以告诉 PostgreSQL 启动器查看新位置可能更容易。如果您postgresql.conf在数据目录之外,则可以改为更改data_directory参数postgresql.conf

有关详细信息initdb以及pg_ctl是否需要使用它们,请参阅 PostgreSQL 用户手册。

关于如何设置 PostgreSQL 以在启动时启动新数据库,您需要学习一些关于文件权限和启动属性的知识。我不太使用 OS X,所以我对这部分没有太大帮助;如果您感到困惑并且您已经阅读了一些内容以试图弄清楚,请考虑在 OSX 堆栈交换站点上寻求帮助。只要记住解释你已经尝试过什么以及你已经做过什么。如果您只是从旧位置对其进行符号链接,则无需执行此操作。


Phi*_*lᵀᴹ 6

创建新数据库,然后在外部驱动器上创建表空间:

CREATE TABLESPACE mytablespace LOCATION '/Volumes/externaldisk/pg';
Run Code Online (Sandbox Code Playgroud)

然后修改数据库,使新表空间成为它的默认位置:

ALTER DATABASE MYDB TABLESPACE mytablespace;
Run Code Online (Sandbox Code Playgroud)

另一种方法是将整个 Postgres 数据目录移动到外部驱动器,然后将外部驱动器目录符号链接回原始位置。

如果要在多个驱动器上创建多个表空间,还可以使用创建 DDL 中的 TABLESPACE 参数指定表或索引应驻留在哪个表空间中。