Estou tentando copiar uma tabela inteira de um banco de dados para outro no Postgres. Alguma sugestão?
273
Estou tentando copiar uma tabela inteira de um banco de dados para outro no Postgres. Alguma sugestão?
Respostas:
Extraia a tabela e direcione-a diretamente para o banco de dados de destino:
Nota: Se o outro banco de dados já tiver a tabela configurada, use o
-a
sinalizador para importar apenas dados; caso contrário, poderá ocorrer erros estranhos como "Memória insuficiente":fonte
pg_dump -U remote_user -h remote_server -t table_to_copy source_db | psql target_db
-a
sinalizador apenas para dados . iepg_dump -a -t my_table my_db | psql target_db
. Enquanto estou aqui, se seu banco de dados estiver em um servidor, acho mais fácil simplesmente despejar o banco de dados em um arquivo e, em seguida, scp esse arquivo no banco de dados e enviar o conteúdo do arquivo para o psql. por exemplo,pg_dump -a -t my_table my_db > my_file.sql
e depois de colocar isso no seu servidor ->psql my_other_db < my_file.sql
pg_dump -t '"tableToCopy"' source_db | psql target_db
. Note que aspas simples e duplas cercar o nome da tabelaVocê também pode usar a funcionalidade de backup no pgAdmin II. Basta seguir estes passos:
Funciona bem e pode fazer várias tabelas ao mesmo tempo.
fonte
Objects
seção. No OSX, clique no botão SQL ouSQL Editor
acesse oTools
menu para colar o SQL copiado do arquivo de backup.Usar o dblink seria mais conveniente!
fonte
Usando psql, no host linux que possui conectividade para os dois servidores
fonte
PGPASSWORD=password1 psql -U ...
então você nem precisa de subshells explícitos! Normalmente, você deve fazer algumas coisas para configurar primeiro, para que subconjuntos possam ser necessários de qualquer maneira. Além disso, as senhas não serão exportadas para processos subsequentes. Obrigado!pg_dump -t '<table_name>' --schema-only
Primeira instalação do dblink
Então, você faria algo como:
fonte
INSERT INTO l_tbl (l_col1, l_col2, l_col3) SELECT * FROM dblink('dbname=r_db hostaddr=r_ip password=r_pass user=r_usr', 'select r_col1, r_col2, r_col3 from r_tbl where r_col1 between ''2015-10-29'' AND ''2015-10-30'' ') AS t1(col1 MACADDR, col2 TIMESTAMP, col3 NUMERIC(7,1));
(meio l local, r é remota Fuga aspas simples Fornecer tipos col...)Use pg_dump para despejar dados da tabela e, em seguida, restaure-os com o psql.
fonte
Se você tiver o servidor remoto, poderá seguir o seguinte:
Ele copiará a tabela mencionada do banco de dados de origem na mesma tabela nomeada do banco de dados de destino, se você já tiver um esquema existente.
fonte
Você pode fazer o seguinte:
fonte
Aqui está o que funcionou para mim. Primeiro despejo para um arquivo:
em seguida, carregue o arquivo despejado:
fonte
Para mover uma tabela do banco de dados A para o banco de dados B na sua configuração local, use o seguinte comando:
fonte
export PGPASSWORD=<passw>
antes de executar o comandoTentei algumas das soluções aqui e elas foram realmente úteis. Na minha experiência, a melhor solução é usar a linha de comando psql , mas às vezes não sinto vontade de usar a linha de comando psql. Então, aqui está outra solução para o pgAdminIII
O problema com esse método é que o nome dos campos e seus tipos da tabela que você deseja copiar devem ser gravados.
fonte
pg_dump
nem sempre funciona.Dado que você tem a mesma tabela ddl nos dois dbs, pode cortá-la do stdout e stdin da seguinte maneira:
fonte
O mesmo que as respostas do usuário5542464 e Piyush S. Wanare, mas divididas em duas etapas:
caso contrário, o canal solicita as duas senhas ao mesmo tempo.
fonte
Você precisa usar o DbLink para copiar os dados de uma tabela para outra tabela no banco de dados diferente. Você precisa instalar e configurar a extensão DbLink para executar a consulta entre bancos de dados.
Eu já criei post detalhado sobre este tópico. Por favor, visite este link
fonte
Verifique este script python
fonte
Se os dois DBs (de e para) estiverem protegidos por senha, nesse cenário o terminal não solicitará a senha para os dois, o prompt de senha aparecerá apenas uma vez. Portanto, para corrigir isso, passe a senha junto com os comandos.
fonte
Eu estava usando o DataGrip (por Intellij Idea). e foi muito fácil copiar dados de uma tabela (em um banco de dados diferente para outro).
Primeiro, verifique se você está conectado aos dois DataSources no Data Grip.
Selecione Tabela de origem e pressione F5 ou (Clique com o botão direito do mouse -> Selecionar Copiar tabela para.)
Isso mostrará uma lista de todas as tabelas (você também pode pesquisar usando um nome de tabela na janela pop-up). Basta selecionar seu alvo e pressionar OK.
O DataGrip tratará de tudo o mais para você.
fonte
Se você executar o pgAdmin (Backup:,
pg_dump
Restore :)pg_restore
no Windows, ele tentará gerar o arquivo por padrão parac:\Windows\System32
e é por isso que você receberá o erro de Permissão / Acesso negado, e não porque o usuário postgres não está suficientemente elevado. Execute o pgAdmin como administrador ou apenas escolha um local para a saída que não seja as pastas do sistema do Windows.fonte
Como alternativa, você também pode expor suas tabelas remotas como tabelas locais usando a extensão de invólucro de dados externos. Em seguida, você pode inserir suas tabelas selecionando uma das tabelas no banco de dados remoto. A única desvantagem é que não é muito rápido.
fonte