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 / 124093
Accepted
Zilk
Zilk
Asked: 2015-12-19 09:18:01 +0800 CST2015-12-19 09:18:01 +0800 CST 2015-12-19 09:18:01 +0800 CST

Restaurar banco de dados PostgreSQL (ou nomes de banco de dados) para uma nova versão, a partir de arquivos?

  • 772

Cenário resumido:

  • um laptop de desenvolvimento quebrou
  • HDD antigo ainda é legível
  • novo laptop tem PostgreSQL 9.4 em vez de 9.1
  • ambos os laptops usam um sabor do Ubuntu Linux

Pergunta 1: Meu entendimento está correto de que, para restaurar os dados antigos, eu precisaria de um servidor com a mesma versão principal+secundária daquele que gravou o diretório de dados antigo? Como nenhum pacote 9.1 está disponível para minha distribuição, eu teria que compilar um servidor v9.1.x a partir do código-fonte, copiar os dados antigos, iniciar o servidor e executar um pg_dump normal, que poderia então ser restaurado para o novo cluster?

Pergunta 2: Havia cerca de 10 a 15 bancos de dados no laptop antigo, mas como era uma máquina de desenvolvimento, em teoria todos os dados deveriam ser substituíveis, exceto alguns experimentos locais. Estou pensando em apenas descartar os dados antigos, mas não consigo me lembrar com 100% de certeza quais eram esses bancos de dados. Existe uma maneira de extrair algumas informações básicas (como nomes de banco de dados, talvez até tamanhos ou registros de data e hora) do diretório de dados antigo sem executar um servidor 9.1?

postgresql linux
  • 2 2 respostas
  • 159 Views

2 respostas

  • Voted
  1. Best Answer
    Josh Kupershmidt
    2015-12-19T13:05:23+08:002015-12-19T13:05:23+08:00

    Parece que você já descobriu a pergunta 1 para si mesmo (resposta curta: sim, use a versão 9.1.x mais recente e certifique-se de que as opções de tempo de compilação sejam as mesmas entre a versão na máquina antiga e na nova para garantir que o data, e as máquinas devem idealmente ser o mais semelhantes possível para serem compatíveis com o binário, por exemplo, x86-64, versões glibc semelhantes, etc.).

    Mas sobre a questão 2:

    Existe uma maneira de extrair algumas informações básicas (como nomes de banco de dados, talvez até tamanhos ou registros de data e hora)

    Você pode procurar no subdiretório "base" do diretório de dados e deverá ver algo assim:

    /datadir/base $ du -sh *
    6.5M    1
    6.1M    12292
    6.5M    12297
     39M    3237152
    6.3M    371336
     10M    4049006
     41M    4481732
    6.7M    4691247
     10M    4927721
    7.2M    4927722
    7.4M    58068
      0B    pgsql_tmp
    

    Cada um desses diretórios com um número inteiro como nome do diretório representa um banco de dados dentro do meu cluster PostgreSQL. Os números inteiros (OIDs) no nome do diretório correspondem ao oidque você veria em uma consulta como:

     SELECT oid, datname FROM pg_database;
    

    se você tivesse o servidor em execução. Não conheço uma maneira trivial de determinar o nome do banco de dados desses OIDs sem ter o servidor em execução, mas pelo menos você sabe quantos bancos de dados existem e quão grandes eles devem ser. E você também deve ser capaz de descobrir o tempo de criação verificando stat. No meu caso, "1" era para "template1", "12292" era "template0" e o restante eram vários outros bancos de dados.

    • 2
  2. Zilk
    2016-01-15T03:06:26+08:002016-01-15T03:06:26+08:00

    Acabei de encontrar uma maneira de descobrir quais bancos de dados o PG_DATAdiretório antigo continha. É um pouco hackista e tarde demais para mim, mas pode ser útil para outra pessoa no futuro.

    Informações sobre nomes de banco de dados (etc) não são armazenadas em PG_DATA/base, mas sim em PG_DATA/global. Os arquivos nesse diretório são (no meu caso, pelo menos) pequenos o suficiente para serem inspecionados com editores hexadecimais ou ferramentas de linha de comando como grepe strings:

    $ cd /usr/local/pgsql-9.1/data/global
    $ grep template1 *
    Binary file 59402186 matches
    Binary file 59402192 matches
    $ ls -la 59402186 59402192
    -rw------- 1 postgres postgres 8.0K Nov 25 09:50 59402186
    -rw------- 1 postgres postgres  16K Nov 25 09:50 59402192
    

    O nome de um dos bancos de dados internos padrão, "template1", ocorre como string de texto simples em apenas dois arquivos pequenos. Procurar outras strings nesses arquivos revela os outros nomes de banco de dados:

    $ strings 59402186 | sort | uniq
    blank0
    blank1
    de_AT.iso88591
    de_AT.utf8
    deepend
    en_US.utf8
    footest
    channelwerk
    lnfbase
    lnfbase10
    mok_db_bio
    postgres
    tin_phoenix
    sunn
    sunn_bkp20151031
    template0
    template1
    upside
    

    Removendo os bancos de dados PG padrão e os nomes dos conjuntos de caracteres, isso deixa a lista de nomes de bancos de dados que eu estava procurando originalmente:

    deepend
    footest
    channelwerk
    lnfbase
    lnfbase10
    mok_db_bio
    tin_phoenix
    sunn
    sunn_bkp20151031
    upside
    
    • 0

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • 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
    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

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