PostgreSQL设置PGDATA变量

时间:2014-09-24 09:36:52

标签: postgresql ubuntu-14.04 postgresql-9.3 drbd

服务器:Ubuntu服务器14 lts + PostgreSQL 9.2 我想使用drbd创建集群数据库,但我无法在没有集群初始化的情况下设置PGDATA。我只需要说pgsql使用来自drbd磁盘的数据。我怎么能这样做?

示例1:

mkdir /cluster/var/lib/pgsql -p
chown postgres:postgres /cluster/var/lib/pgsql -R
cp -R /var/lib/pgsql /cluster/var/lib/pgsql

edit /etc/init.d/postgresql :
 PGDATA=/cluster/var/lib/pgsql/data
...
PGLOG=/cluster/var/lib/pgsql/pgstartup.log

/etc/init.d/postgresql start

在postgresql 8.3中它可以工作,但是在9.2中我无法更改/etc/init.d/postgresql中的pgdata,我需要找到另一个文件并设置pgdata,但是,出乎意料的是,它什么都不做。

示例2: PGD​​ATA - 指定要存储数据库集群的目录;可以使用-D选项覆盖。

好的,让我们开始吧: --pgdata =目录 是的,它的作品!但现在我们有postgresql-xc和错误,如“postgresql不知道这个用户 - postgresql”。 drbd从集群开始复制数据,但postgresql也启动它。

UPD 1:

root: initdb --pgdata=/home/username/dir
~initdb not install~bla-bla-bla~use apt-get install postgres-xc

UPD2:

$: /usr/lib/postgresql/9.3/bin/initdb --pgdata=/whateveryouwant

#now you can run postgresql only one way:

$: /usr/lib/postgresql/9.3/bin/postgres -D /see_up

#then:

LOG:  database system was shut down at 2014-09-26 15:56:33 YEKT   
LOG:  database system is ready to accept connections    
LOG:  autovacuum launcher started

#aaaaaaaaaaand...nothing. just empty console, ^C stopping postgres    
#another SSH connect:

$: ps-ela

S  1000  5995  5217  0  80   0 - 62202 poll_s pts/0    00:00:00 postgres    
1 S  1000  5997  5995  0  80   0 - 62202 poll_s ?        00:00:00 postgres    
1 S  1000  5998  5995  0  80   0 - 62202 poll_s ?        00:00:00 postgres    
1 S  1000  5999  5995  0  80   0 - 62202 poll_s ?        00:00:00 postgres    
1 S  1000  6000  5995  0  80   0 - 62415 poll_s ?        00:00:00 postgres    
1 S  1000  6001  5995  0  80   0 - 26121 poll_s ?        00:00:00 postgres

#is it ok? because...

$: /etc/init.d/postgresql status    
9.3/main (port 5432): down

2 个答案:

答案 0 :(得分:2)

使用Ubuntu,要为PostgreSQL实例使用特定的数据目录,您只需要这样做:

# pg_createcluster --datadir=/path/to/the/directory 9.3 nameofcluster

您不需要或想要在任何地方摆弄$PGDATA。请参阅pg_createcluster联机帮助页。

如果使用drdb复制群集中的数据目录,请记住术语cluster 在PostgreSQL中,有一个不同的含义:它总是一个数据库集群,这意味着特定PostgreSQL实例所服务的所有数据库都有其唯一的数据目录。这不同于drdb cluster,它是一组机器。

PostgreSQL集群的数据目录根本无法共享,因为只有一台机器上运行的PostgreSQL的一个特定实例可能会写入,否则会发生腐败。

如果drdb配置为符合此要求,则可以使用它,否则不行。 您可能还会质疑为什么在PostgreSQL自版本8.3以来built-in replication options之后首先使用drdb,这些版本比纯磁盘复制更专业,更适合数据库。

答案 1 :(得分:1)

将以下内容放在〜/ .bashrc文件中。

PATH=$PATH:/usr/lib/postgresql/<PostgresVersionNumber>/bin
export PATH
export PGDATA="$HOME/<FolderNameForPostgresDatabases>"

替换&#39; PostgresVersionNumber&#39;使用已安装的Postgres版本号。
替换&#39; FolderNameForPostgresDatabases&#39;使用您希望postgres数据库驻留的文件夹的名称。确保已创建文件夹

从终端,您必须导航到〜/ FolderNameForPostgresDatabases, 然后运行:

initdb

在尝试运行之前执行此操作:

pg_ctl start