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. Preciso copiar o esquema NÃO do banco de dados
postgresql
sigra
fonte
fonte
public
?Respostas:
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.
fonte
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
. Mais fácil como superusuário (postgres
) compeer
autorização sem pwpg_haba.conf
. Restaurar depois de ter renomeado o esquema original:psql my_db -f '/path/to/file.pgsql'
. Se você possui um dump SQL simples, não precisapg_restore
.Se você está preso ao php, use os tiques traseiros
ou o comando exec (). Para a mudança, você pode usar o sed da mesma maneira.
Aqui estão mais 6 caracteres
fonte
public
).Usando o pgAdmin, você pode fazer o seguinte. É bem manual, mas pode ser tudo o 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 o seu banco de dados for grande, mas deve funcionar bem em um banco de dados de desenvolvimento que você possui no 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 que isso e escolher apenas fazer backup da estrutura em vez de ambas).
Atribua 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, clique em criar novo esquema e dê ao esquema o nome de público . Esse será o esquema no qual você está copiando do seu backup.
Clique com o botão direito do mouse no novo público de esquema da etapa 5. e clique em restaurar. Restaure a partir do arquivo de backup na etapa 3.
Renomeie o novo esquema público para um nome diferente (por exemplo, newschema ).
Esquema Rename temprename mudança do passo 4 de volta para o nome original.
fonte
Você poderia usar
Solte todos os esquemas que você não precisa:
A única desvantagem é que todas as conexões com o old_db devem ser determinadas antes que você possa criar a cópia (portanto, o processo que executa o
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.
fonte
expandindo a resposta user1113185 , aqui está um fluxo de trabalho completo usando o psql / pg_dump.
A seguir, exporta todos os objetos
old_schema
e os importa para um novonew_schema
esquema, comouser
nodbname
banco de dados:fonte