Como posso copiar meu public
esquema 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
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?
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.
Se você está preso ao php, use os tiques de volta
ou o comando exec(). Para a mudança, você pode usar o sed da mesma maneira.
Aqui estão mais 6 caracteres
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.
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).
Dê um nome ao arquivo de backup e também escolha um formato. (Eu costumo usar Tar.)
Clique em Backup.
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 )
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.
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.
Renomeie o novo esquema public para um nome diferente (por exemplo , newschema ).
Renomeie a mudança de nome temporário do esquema da etapa 4 de volta para o nome original.
Você poderia usar
Em seguida, solte todos os esquemas que você não precisa:
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 DATABASE
instruçã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.
expandindo user1113185 answer , aqui está um fluxo de trabalho completo usando psql/pg_dump.
O seguinte exporta todos os objetos
old_schema
e os importa para um novonew_schema
esquema, comouser
, nodbname
banco de dados: