我在RHEL 6.5计算机上使用postgresql 9.2,并且希望在非标准位置设置数据库,因为它正在填充根分区。说明告诉我从命令行使用initlocation命令但是我得到错误'命令未找到'使用它。我已经搜索过它,以防它是一个shell脚本,但无法在任何地方找到它。 我该如何运行此命令?谢谢你的帮助。
答案 0 :(得分:2)
是的,因此您希望将现有安装保留在原来的位置,并在具有更多空间的目录中创建新数据库。
首先,免责声明,我之前没有完成这个,但是,我在家里的电脑上安装了9.4b2,我确实完成了这些步骤以验证它似乎有效: - )< / p>
@Mike Sherrill&#39; Cat Recall&#39;对数据库存储(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
答案 1 :(得分:0)
试试这个。
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