2014-09-24 2 views
0

Сервер: сервер Ubuntu 14 lts + PostgreSQL 9.2 Я хочу создать базу данных кластера с помощью drbd, но я не могу установить PGDATA без инициализации кластера. Мне просто нужно сказать, что pgsql использует данные с диска drbd. Как я могу это сделать?PostgreSQL set PGDATA variable

Пример 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 я не могу изменить PGDATA в /etc/init.d/postgresql, мне нужно найти другой файл и установить PGDATA, но, сюрприз, он ничего не делает.

Пример 2: PGDATA - указывает каталог, в котором должен храниться кластер базы данных; можно переопределить с помощью опции -D.

Итак, давайте начнем: --pgdata = directory Да, это работает! но теперь у нас есть 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 
+1

" * Я не могу установить PGDATA без инициализации кластера * ", что не имеет смысла. 'PGDATA' - это переменная ** environment **. Для этого не требуется ничего. Просто определите его в своем '.profile' или через команду' set'. –

+0

http://www.postgresql.org/docs/9.2/static/app-initdb.html <= в psql 9.2 вы можете установить pgdata только с помощью initdb, после чего pgsql будет управлять postgresql-xc. если вы хотите, чтобы в pgdata был установлен текстовый редактор, вы ничего не получите ... – 2014-09-24 10:16:29

+0

Опять же: PGDATA - это переменная *** ***. Если вы не имеете в виду 'PGDATA', а фактический * каталог данных *. Это две разные вещи (переменная 'PGDATA' обычно _points_ в каталог данных, который должен использоваться Postgres). Также: если вы используете Postgres-XC, вы должны были упомянуть об этом с самого начала. Postgres-XC и PostgreSQL - это две разные вещи. –

ответ

0

Поместите ниже в свой файл ~/.bashrc.

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

Замените 'PostgresVersionNumber' на установленный номер версии Postgres.
Замените 'FolderNameForPostgresDatabases' на имя папки, в которой вы хотите, чтобы ваши базы данных postgres находились.Убедитесь, что папка создана

С терминала, вы должны перейти к ~/FolderNameForPostgresDatabases, затем запустить:

initdb 

ли, что, прежде чем пытаться запустить:

pg_ctl start 
2

С Ubuntu, чтобы использовать определенный каталог данных для экземпляра PostgreSQL, вам просто нужно сделать:

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

Вам не нужно или хотите возиться с $PGDATA где угодно. См. pg_createcluster manpage.

При использовании drdb для репликации каталога данных в кластере, иметь в виду, что термин cluster в PostgreSQL языке имеет другое значение: это всегда кластер баз данных, что означает, что все базы данных, обслуживаемых определенной PostgreSQL экземпляра с его уникальным каталогом данных. Это отличается от drdb cluster, который представляет собой группу машин.

Каталог данных кластера PostgreSQL не может быть общим вообще в том смысле, что в него может записываться только один конкретный экземпляр PostgreSQL, запущенный на одной машине, иначе произойдет повреждение.

Если drdb сконфигурирован для соответствия этому требованию, его можно использовать, иначе нет. Вы также можете задать вопрос, почему использовать drdb в первую очередь, когда PostgreSQL имеет built-in replication options с версии 8.3, которые более специализированы и лучше подходят для базы данных, чем чистая репликация диска.