我正在一台运行 RHEL 6.5 的机器上使用 postgresql 9.2,并希望在非标准位置上设置数据库,因为它正在填满根分区。指南告诉我要使用命令行中的 initlocation 命令,但是当我使用它时会出现“命令未找到”的错误。我已经搜索过它,以防它是一个 shell 脚本,但无处可寻。 如何运行此命令?感谢任何帮助。
我正在一台运行 RHEL 6.5 的机器上使用 postgresql 9.2,并希望在非标准位置上设置数据库,因为它正在填满根分区。指南告诉我要使用命令行中的 initlocation 命令,但是当我使用它时会出现“命令未找到”的错误。我已经搜索过它,以防它是一个 shell 脚本,但无处可寻。 如何运行此命令?感谢任何帮助。
好的,所以您想把现有的安装保留在原地,并在一个具有更多空间的目录中创建一个新的数据库。
首先,免责声明,我之前没有完全做过这个,但是,我在家里的电脑上有一个9.4b2的安装,我确实走过了这些步骤,以验证它似乎可以正常工作 :-)
@Mike Sherrill 'Cat Recall'在数据库存储方面写了一篇相当不错的文章(PostgreSQL数据库存储在哪里?)。我不认为它特别回答了您的问题,但它确实包含了解决问题所需的所有信息。
对于您的情况,您需要使用表空间。首先,在postgres安装中创建一个新的表空间。我将使用我的机器作为示例。我会首先确定新数据库将存放在哪里。一个目录名称,它必须为空。对于我来说,我将在我的主目录下创建一个空目录(我必须以root用户身份执行)并使用shell命令:
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
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=#
ls /home/gfausak/pg_tablespace
PG_9.4_201407151
在newdb数据库中创建的所有内容都将进入new目录,除非你覆盖了它的创建。有一个default_tablespace变量。只要它是空的,缺省值就是将对象放在当前数据库中。同样适用于另一个设置temp_tablespace。这两者的默认值都是空的,意味着当前数据库。
你甚至可以通过在创建表时指定tablespace,在新表空间中创建旧数据库中的对象。
-g
试试这个。
vi /etc/init.d/postgresql-XX
Change this variable with:
PGDATA=/var/lib/pgsql/$PGMAJORVERSION/data
PGLOG=/var/lib/pgsql/$PGMAJORVERSION/pgstartup.log
on:
PGDATA=/new_pgdata/pgsql/${PGMAJORVERSION}/data
PGLOG=/new_pgdata/pgsql/${PGMAJORVERSION}/pgstartup.log
than:
mkdir -p /new_pgdata/pgsql/XX/data/
chown -R postgres:postgres /pgdata/pgsql
/etc/init.d/postgresql-XX initdb -D /new_pgdata/pgsql/XX/data/
Where XX is equal to 9.2