AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 10474
Accepted
sigra
sigra
Asked: 2012-01-11 05:03:13 +0800 CST2012-01-11 05:03:13 +0800 CST 2012-01-11 05:03:13 +0800 CST

PostgreSQL: Como criar uma cópia completa do esquema de banco de dados no mesmo banco de dados?

  • 772

Como posso copiar meu publicesquema no mesmo banco de dados com estrutura de tabela completa, dados, funções, fk, pk e etc.
Minha versão do Postgres é 8.4
PS eu preciso copiar esquema NÃO banco de dados

postgresql
  • 5 5 respostas
  • 95966 Views

5 respostas

  • Voted
  1. Best Answer
    user1113185
    2012-01-11T05:20:40+08:002012-01-11T05:20:40+08:00

    Não há uma maneira simples de fazer isso no próprio pg_dump/pg_restore. Você pode tentar o seguinte se conseguir remover o banco de dados temporariamente.

    1. Faça um dump do seu esquema público usando pg_dump
    2. execute "ALTER SCHEMA public RENAME TO public_copy"
    3. Restaure seu despejo de seu esquema público da etapa 1 usando pg_restore
    • 27
  2. Scott Marlowe
    2012-01-11T18:59:12+08:002012-01-11T18:59:12+08:00
    pg_dump -n schema_name > dump.sql
    vi dump.sql # edit the schema name
    psql: psql -f dump.sql
    

    Se você está preso ao php, use os tiques de volta

    `/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`
    

    ou o comando exec(). Para a mudança, você pode usar o sed da mesma maneira.

    Aqui estão mais 6 caracteres

    • 10
  3. Kuberchaun
    2012-01-11T06:55:07+08:002012-01-11T06:55:07+08:00

    Usando pgAdmin você pode fazer o seguinte. É bem manual, mas pode ser tudo que você precisa. Uma abordagem baseada em script seria muito mais desejável. Não tenho certeza de como isso funcionará se você não tiver acesso de administrador e se seu banco de dados for grande, mas deve funcionar bem em um banco de dados de desenvolvimento que você acabou de ter em seu computador local.

    1. Clique com o botão direito do mouse no nome do esquema que deseja copiar e clique em Backup. (Você pode ir mais fundo do que isso e optar por apenas fazer backup da estrutura em vez de ambos).

    2. Dê um nome ao arquivo de backup e também escolha um formato. (Eu costumo usar Tar.)

    3. Clique em Backup.

    4. Clique com o botão direito do mouse no esquema do qual você fez backup e clique em propriedades e renomeie-o para outra coisa temporariamente. (por exemplo , temprename )

    5. Clique na raiz dos esquemas e clique com o botão direito do mouse no navegador de objetos e clique em criar novo esquema e dê ao esquema o nome public . Este será o esquema para o qual você está copiando do seu backup.

    6. Clique com o botão direito do mouse no novo esquema público da etapa 5. e clique em restaurar. Restaure a partir do arquivo de backup na etapa 3.

    7. Renomeie o novo esquema public para um nome diferente (por exemplo , newschema ).

    8. Renomeie a mudança de nome temporário do esquema da etapa 4 de volta para o nome original.

    • 7
  4. a_horse_with_no_name
    2012-01-11T05:47:53+08:002012-01-11T05:47:53+08:00

    Você poderia usar

    CREATE DATABASE new_db TEMPLATE = old_db;
    

    Em seguida, solte todos os esquemas que você não precisa:

    DROP SCHEMA public CASCADE;
    DROP SCHEMA other CASCADE;
    

    A única desvantagem é que todas as conexões com old_db devem ser determinadas antes que você possa criar a cópia (portanto, o processo que executa a CREATE DATABASEinstrução deve se conectar, por exemplo, ao template1)

    Se isso não for uma opção, pg_dump/pg_restore é a única maneira de fazer isso.

    • 6
  5. dwelle
    2017-11-14T06:13:31+08:002017-11-14T06:13:31+08:00

    expandindo user1113185 answer , aqui está um fluxo de trabalho completo usando psql/pg_dump.

    O seguinte exporta todos os objetos old_schemae os importa para um novo new_schemaesquema, como user, no dbnamebanco de dados:

    psql -U user -d dbname -c 'ALTER SCHEMA old_schema RENAME TO new_schema'
    pg_dump -U user -n new_schema -f new_schema.sql dbname
    psql -U user -d dbname -c 'ALTER SCHEMA new_schema RENAME TO old_schema'
    psql -U user -d dbname -c 'CREATE SCHEMA new_schema'
    psql -U user -q -d dbname -f new_schema.sql
    rm new_schema.sql
    
    • 5

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve