是的,所以您想将现有安装保留在原处,并在具有更多空间的目录中创建一个新数据库。
首先,免责声明,我以前没有这样做过,但是,我在我的家用电脑上安装了 9.4b2,我确实完成了这些步骤来验证它似乎工作:-)
@Mike Sherrill 'Cat Recall' 对数据库存储有很好的描述 (Where does PostgreSQL store the database?)。我不认为它专门回答了你的问题,但它确实包含了解决问题所需的所有信息。
在您的情况下,您将需要使用表空间。首先,在 postgres 安装中创建一个新的表空间。我将以我的机器为例。我要做的第一件事是确定新数据库将驻留的位置。目录名,必须为空。对我来说,我将使用 shell 命令在我的主目录中创建一个空目录(我必须以 root 用户身份进行):
mkdir /home/gfausak/pg_tablespace
chown postgres /home/gfausak/pg_tablespace
chgrp postgres /home/gfausak/pg_tablespace
chmod 700 /home/gfausak/pg_tablespace
然后我以 postgres 用户身份登录到 psql。喜欢:
psql -Upostgres
你的咒语可能不同。当您到达提示符时,只需通过以下方式验证当前数据库的位置:
postgres=# show data_directory;
data_directory
-----------------------
/var/local/pgsql/data
(1 row)
现在,创建您的新表空间。
postgres=# create tablespace newspace location '/home/gfausak/pg_tablespace';
CREATE TABLESPACE
此命令的文档可以在这里查看:http://www.postgresql.org/docs/9.2/static/manage-ag-tablespaces.html
一旦创建,它就可以用于各种不同的对象。在您的情况下,createdb 可以从命令行或 postgres psql 提示符完成。我将在该表空间中创建一个测试数据库:
postgres=# create database newdb with tablespace = newspace;
CREATE DATABASE
只是为了笑,打开它并创建一个表:
postgres=# \c newdb
You are now connected to database "newdb" as user "postgres".
newdb=# create table testme (t text);
CREATE TABLE
newdb=#
如果我回到我的主目录并查看新创建的目录,我会看到一些 postgres 文件:
ls /home/gfausak/pg_tablespace
PG_9.4_201407151
您在 newdb 数据库中创建的任何内容都将进入新目录,除非您覆盖它的创建。有一个 default_tablespace 变量。只要为空,默认就是把对象放到当前数据库中。另一个设置 temp_tablespace 也是如此。两者的默认值都是空白,表示当前数据库。
您甚至可以通过在创建表时指定表空间来在新表空间中创建旧数据库中的对象。
-g