Копирование каталога Postgres через Samba?

У меня есть Samba и Postgres, установленные на двух машинах.

Я могу успешно копировать файлы с одной машины на другую, когда пользователь и группа файлов являются моим пользователем входа и группой для обеих машин. (Тот же знак и пароль на обеих машинах.)

Мой целевой каталог / mnt / pg-ralph12 / был успешно установлен.

mount: //192.168.29.205/pg-ralph12 mounted on /mnt/pg-ralph12

Пользователь и группа для моего каталога Postgres на моем исходном компьютере:

getfacl: Removing leading '/' from absolute path names # file: var/lib/postgresql # owner: postgres # group: postgres user::rwx group::r-x other::r-x

Для моего целевого каталога это

getfacl: Removing leading '/' from absolute path names # file: mnt/pg-ralph12/not-main # owner: real-owner # group: sudo user::rwx group::r-x group:postgres:rwx mask::rwx other::r-x default:user::rwx default:group::r-x default:group:postgres:rwx default:mask::rwx default:other::r-x

Когда я пытаюсь запустить rsync

sudo rsync -a /var/lib/postgresql /mnt/pg-ralph12/not-main

Я получаю

[sudo] password for real-estate-data-mining: rsync: chown "/mnt/pg-ralph12/not-main/postgresql" failed: Permission denied (13) rsync: chown "/mnt/pg-ralph12/not-main/postgresql/9.6" failed: Permission denied (13) rsync: chown "/mnt/pg-ralph12/not-main/postgresql/9.6/main" failed: Permission denied (13) rsync: chown "/mnt/pg-ralph12/not-main/postgresql/9.6/main/base" failed: Permission denied (13) etc

Я искал высоко и низко в сети, пытаясь найти ответ без успеха.

0
задан 1 March 2018 в 00:33

2 ответа

Решением, которое я придумал, является следующий сценарий bash:

#!/bin/bash # Copy/replace myDatabase from Ralph07 to Ralph12 dropdb -e -h 192.168.29.205 --no-password --if-exists -U postgres myDatabase # createdb -e -h 192.168.29.205 --no-password -U postgres myDatabase # The database will automagically be created pg_dump -C -h localhost --no-password -U postgres myDatabase | psql -h 192.168.29.205 --no-password -U postgres

192.168.29.205 является (статическим) IP-адресом целевого компьютера. Ваш ip, вероятно, будет другим.

Чтобы получить параметр -no-password, вам придется редактировать ~ / .pgpass. Mine (отредактировано!) Выглядит следующим образом:

localhost:5432:*:postgres:MyPassword 192.168.29.205:5432:*:postgres:MyPassword

См., Например, https://www.postgresql.org/docs/9.6/static/libpq-pgpass.html для объяснения .pgpass

Возможно, вам также потребуется отредактировать файл /etc/postgresql/9.6/main/postgresql.conf (если вы используете 9.6 Postgres). См. [D4] https://www.postgresql.org/docs/9.6/static/libpq-pgpass.html

Это решение кажется надежным. У меня не было проблем с этим в течение короткого времени, которое я использовал (менее одного дня). Если я столкнулся с проблемами, я сообщу об этом здесь.

Другие решения, которые я видел в Интернете, чтобы отбросить базу данных (т.е. перейти в psql), не помогли мне.

Что для меня работало _not_

Для справки, для меня не было отказано в базе данных.

UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'myDatabase'; SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'myDatabase' AND pid <> pg_backend_pid(); DROP DATABASE "myDatabase";

Я получаю сообщение об ошибке «ОШИБКА: не удается удалить текущую открытую база данных "

Дальнейший вопрос:

В чем разница между dropdb и кодом сразу выше?

0
ответ дан 17 July 2018 в 19:47

Решением, которое я придумал, является следующий сценарий bash:

#!/bin/bash # Copy/replace myDatabase from Ralph07 to Ralph12 dropdb -e -h 192.168.29.205 --no-password --if-exists -U postgres myDatabase # createdb -e -h 192.168.29.205 --no-password -U postgres myDatabase # The database will automagically be created pg_dump -C -h localhost --no-password -U postgres myDatabase | psql -h 192.168.29.205 --no-password -U postgres

192.168.29.205 является (статическим) IP-адресом целевого компьютера. Ваш ip, вероятно, будет другим.

Чтобы получить параметр -no-password, вам придется редактировать ~ / .pgpass. Mine (отредактировано!) Выглядит следующим образом:

localhost:5432:*:postgres:MyPassword 192.168.29.205:5432:*:postgres:MyPassword

См., Например, https://www.postgresql.org/docs/9.6/static/libpq-pgpass.html для объяснения .pgpass

Возможно, вам также потребуется отредактировать файл /etc/postgresql/9.6/main/postgresql.conf (если вы используете 9.6 Postgres). См. [D4] https://www.postgresql.org/docs/9.6/static/libpq-pgpass.html

Это решение кажется надежным. У меня не было проблем с этим в течение короткого времени, которое я использовал (менее одного дня). Если я столкнулся с проблемами, я сообщу об этом здесь.

Другие решения, которые я видел в Интернете, чтобы отбросить базу данных (т.е. перейти в psql), не помогли мне.

Что для меня работало _not_

Для справки следующее: НЕ работает для меня, чтобы удалить базу данных.

UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'myDatabase'; SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'myDatabase' AND pid <> pg_backend_pid(); DROP DATABASE "myDatabase";

Я получаю сообщение об ошибке «ОШИБКА: невозможно удалить текущую открытую база данных "

Дальнейший вопрос:

В чем разница между dropdb и кодом сразу выше?

0
ответ дан 23 July 2018 в 20:32

Другие вопросы по тегам:

Похожие вопросы: