O Postgres permite o uso de qualquer banco de dados existente no servidor como modelo ao criar um novo banco de dados. Não tenho certeza se o pgAdmin oferece a opção na caixa de diálogo criar banco de dados, mas você poderá executar o seguinte em uma janela de consulta, se isso não acontecer:
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
Ainda assim, você pode obter:
ERROR: source database "originaldb" is being accessed by other users
Para desconectar todos os outros usuários do banco de dados, você pode usar esta consulta:
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
Servers
-> (meu servidor) ->Databases
, clicar com o botão direito do mouse em Bancos de dados e selecionar "Novo banco de dados". Uma das opções é o modelo, e o SQL usado para criar o banco de dados é equivalente. É por isso muito mais rápido do que um dump / restore no mesmo servidor.Uma versão em linha de comando da resposta de Bell :
Isso deve ser executado sob os privilégios do mestre do banco de dados, geralmente o postgres.
fonte
createdb: database creation failed: ERROR: source database "conf" is being accessed by other users
se tentar fazê-lo em um banco de dados de produção e, como esperado, não deseja desativá-lo para criar uma cópia.Para clonar um banco de dados existente com o postgres, você pode fazer isso
TI matará toda a conexão com o banco de dados de origem, evitando o erro
fonte
procpid
compid
para que isso funcioneNo ambiente de produção, onde o banco de dados original está sob tráfego, estou simplesmente usando:
fonte
pg_dump -s
? postgresql.org/docs/current/static/app-pgdump.html$ createdb newdb
Não conhece o pgAdmin, mas
pgdump
fornece um despejo do banco de dados no SQL. Você só precisa criar um banco de dados com o mesmo nome e fazerrestaurar todas as tabelas e seus dados e todos os privilégios de acesso.
fonte
pg_dump -U postgres sourcedb | psql -U postgres newdb
, embora a eficiência desta técnica pode ser questionável (desde que você provavelmente acabar troca de contexto entre leituras e gravações)ssh dbserver pg_dump DBNAME | psql NEWDB
... oupg_dump DBNAME | ssh otherserver pgsql NEWDB
... É claro que as permissões e a autenticação precisam ser tratadas da maneira que você quiser.Primeiro,
sudo
como usuário do banco de dados:Vá para a linha de comando do PostgreSQL:
Crie o novo banco de dados, dê os direitos e saia:
Copie a estrutura e os dados do banco de dados antigo para o novo:
fonte
\l+
. Por que a diferença de tamanho?Eu montei essa abordagem junto com os exemplos acima. Estou trabalhando em um servidor "sob carga" e recebi o erro quando tentei a abordagem do @zbyszek. Eu também estava atrás de uma solução "somente linha de comando".
createdb: database creation failed: ERROR: source database "exampledb" is being accessed by other users
.Aqui está o que funcionou para mim (os comandos anexados
nohup
para mover a saída para um arquivo e proteger contra uma desconexão do servidor ):nohup pg_dump exampledb > example-01.sql
createdb -O postgres exampledbclone_01
nohup psql exampledbclone_01 < example-01.sql
fonte
No pgAdmin, você pode fazer um backup do seu banco de dados original e criar um novo banco de dados e restaurar a partir do backup que acabou de criar:
fonte
Qual é a maneira correta de copiar um banco de dados inteiro (sua estrutura e dados) para um novo no pgAdmin?
Responda:
Julgado e testado.
fonte
Na documentação , não é recomendável usar
createdb
ouCREATE DATABASE
com modelos:pg_dump
oupg_dumpall
é uma boa maneira de copiar o banco de dados E TODOS OS DADOS. Se você estiver usando uma GUI como pgAdmin, esses comandos serão chamados nos bastidores quando você executar um comando de backup. A cópia para um novo banco de dados é feita em duas fases: Backup e Restauraçãopg_dumpall
salva todos os bancos de dados no cluster PostgreSQL. A desvantagem dessa abordagem é que você acaba com um arquivo de texto potencialmente muito grande, cheio de SQL, necessário para criar o banco de dados e preencher os dados. A vantagem dessa abordagem é que você obtém todas as funções (permissões) do cluster gratuitamente. Para despejar todos os bancos de dados, faça isso da conta do superusuárioe restaurar
pg_dump
possui algumas opções de compactação que oferecem arquivos muito menores. Eu tenho um banco de dados de produção, faço backup duas vezes por dia com um trabalho cron usandoonde
compress
é o nível de compactação (0 a 9) ecreate
dizpg_dump
para adicionar comandos para criar o banco de dados. Restaure (ou vá para o novo cluster) usandoonde newdb é o nome do banco de dados que você deseja usar.
Outras coisas em que pensar
O PostgreSQL usa ROLES para gerenciar permissões. Estes não são copiados por
pg_dump
. Além disso, não lidamos com as configurações no postgresql.conf e no pg_hba.conf (se você estiver movendo o banco de dados para outro servidor). Você terá que descobrir as configurações de conf por conta própria. Mas há um truque que acabei de descobrir para fazer backup de papéis. As funções são gerenciadas no nível do cluster e você pode solicitar opg_dumpall
backup apenas das funções com a--roles-only
opção de linha de comando.fonte
PostgreSQL 9.1.2:
fonte
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
pois exige que o banco de dados original fique ocioso (sem conexões com acesso de gravação) e que novas conexões com o banco de dados original sejam impedidas enquanto a cópia estiver em andamento. Se você está feliz com isso, isso funciona.Para aqueles que ainda estão interessados, criei um script bash que faz (mais ou menos) o que o autor queria. Eu tive que fazer uma cópia diária do banco de dados de negócios em um sistema de produção, esse script parece fazer o truque. Lembre-se de alterar os valores do nome do banco de dados / usuário / pw.
fonte
Para criar despejo de banco de dados
Para redefinir o despejo de banco de dados
fonte
Aqui está todo o processo de criação de uma cópia em um banco de dados usando apenas a GUI do pgadmin4 (via backup e restauração)
O Postgres vem com o Pgadmin4. Se você usa o macOS, pode pressionar
CMD
+SPACE
e digitarpgadmin4
para executá-lo. Isso abrirá uma guia do navegador no chrome.Etapas para copiar
1. Crie o backup
Faça isso clicando com o botão direito do mouse no banco de dados -> "backup"
2. Dê um nome ao arquivo.
Like
test12345
. Clique em backup. Isso cria um despejo de arquivo binário, não está em um.sql
formato3. Veja onde ele baixou
Deve haver um pop-up na parte inferior direita da tela. Clique na página "mais detalhes" para ver para onde o seu backup foi baixado
4. Encontre o local do arquivo baixado
Nesse caso, é
/users/vincenttang
5. Restaure o backup do pgadmin
Supondo que você executou as etapas 1 a 4 corretamente, você terá um arquivo binário de restauração. Pode chegar um momento em que seu colega de trabalho deseje usar o arquivo de restauração na máquina local. Essa pessoa foi para o pgadmin e restaurou
Faça isso clicando com o botão direito do mouse no banco de dados -> "restore"
6. Selecione o localizador de arquivos
Certifique-se de selecionar o local do arquivo manualmente, NÃO arraste e solte um arquivo nos campos do remetente no pgadmin. Porque você terá permissões de erro. Em vez disso, encontre o arquivo que você acabou de criar:
7. Encontre o arquivo
Pode ser necessário alterar o filtro na parte inferior direita para "Todos os arquivos". Localize o arquivo depois, a partir da etapa 4. Agora pressione o botão "Selecionar" abaixo para confirmar
8. Restaure o arquivo
Você verá esta página novamente, com o local do arquivo selecionado. Vá em frente e restaure
9. Sucesso
Se tudo estiver bom, o canto inferior direito deve exibir um indicador mostrando uma restauração bem-sucedida. Você pode navegar até suas tabelas para ver se os dados foram restaurados em cada tabela.
10. Se não foi bem sucedido:
Se a etapa 9 falhar, tente excluir o esquema público antigo no banco de dados. Vá para "Ferramenta de consulta"
Execute este bloco de código:
Agora tente as etapas 5 a 9 novamente, deve funcionar
EDIT - Algumas notas adicionais. Atualize o PGADMIN4 se você estiver recebendo um erro durante o upload com algo parecido com "versão não suportada do cabeçalho do arquivador 1.14" durante a restauração
fonte
Se o banco de dados tiver conexões abertas, esse script poderá ajudar. Eu uso isso para criar um banco de dados de teste a partir de um backup do banco de dados de produção ao vivo todas as noites. Isso pressupõe que você tenha um arquivo de backup .SQL do banco de dados de produção (eu faço isso no webmin).
fonte
Usando o pgAdmin, desconecte o banco de dados que você deseja usar como modelo. Em seguida, você o seleciona como modelo para criar o novo banco de dados, evitando o erro já em uso.
fonte
Se você deseja copiar o esquema inteiro, pode fazer um pg_dump com o seguinte comando:
pg_dump -h database.host.com -d database_name -n schema_name -U database_user --password
E quando você deseja importar esse despejo, pode usar:
psql "host=database.host.com user=database_user password=database_password dbname=database_name options=--search_path=schema_name" -f sql_dump_to_import.sql
Mais informações sobre cadeias de conexão: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
Ou então, basta combiná-lo em um forro:
fonte
Desconecte o banco de dados "modelo" que você deseja usar como modelo.
Execute 2 consultas como abaixo
(A instrução SQL acima encerrará todas as sessões ativas com o TemplateDB e agora você poderá selecioná-la como o modelo para criar o novo banco de dados TargetDB, evitando assim o erro já em uso.
fonte
Tente o seguinte:
gl XD
fonte