Copiando o diretório Postgres via Samba?

0

Eu tenho o Samba e o Postgres instalados em duas máquinas.

Eu posso copiar arquivos de uma máquina para outra quando o usuário e o grupo dos arquivos são meu usuário e grupo de login para ambas as máquinas. (O mesmo login e senha em ambas as máquinas.)

Meu diretório de destino, / mnt / pg-ralph12 /, foi montado com sucesso.

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


O usuário e grupo do meu diretório do Postgres na minha máquina de origem é:

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


Para o meu diretório de destino é

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

Quando tento executar o rsync

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

Eu obtenho

[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

Pesquisei alto e baixo na Net tentando encontrar uma resposta sem sucesso.

    
por RalphShnelvar 28.02.2018 / 21:33

1 resposta

0

A solução que eu criei é o seguinte script:

#!/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 é o endereço IP (estático) do computador de destino. Seu ip provavelmente será diferente.

Para que a opção --no-password funcione, você terá que editar ~ / .pgpass. O meu (editado!) Parece com o seguinte:

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

Veja, por exemplo, link para obter uma explicação sobre .pgpass

Você provavelmente também precisará editar o /etc/postgresql/9.6/main/postgresql.conf (se estiver usando o 9.6 do Postgres). Consulte o link

Esta solução parece ser robusta. Eu não tive nenhum problema com isso no curto período em que estive usando (menos de um dia). Se eu tiver problemas, reportarei aqui.

Outras soluções que vi online para descartar o banco de dados (ou seja, entrar no psql) não funcionaram para mim.

O que _não_ funcionou para mim

Para referência, o seguinte NÃO funcionou para eu eliminar o banco de dados.

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";

Eu recebo o erro "ERRO: não é possível descartar o banco de dados aberto no momento"

Mais uma pergunta:

Qual é a diferença entre dropdb e o código imediatamente acima?

    
por RalphShnelvar 17.03.2018 / 19:13