Vejo outras perguntas que foram respondidas negativamente (ou seja, os índices não são transferidos com o padrão pg_restore
). No entanto, parece que aconteceu no meu despejo/restauração recente e não tenho certeza se realmente foi transferido ou não.
Migrei meu banco de dados do PostgreSQL 9.3 para 9.4.5 e usei dump/restore para fazer isso.
Abaixo estão os comandos utilizados:
sudo -u postgres pg_dump -h localhost -p 5432 -d nominatim -F d -f dump/postgres/backup -j 20
sudo -u postgres pg_restore --create --dbname=nominatim --exit-on-error -h localhost -p 5432 -F d -j 7 dump/postgres/backup
O despejo e a restauração foram bem-sucedidos (sem erros).
Eu desativei o autovacuum enquanto fazia a restauração e então executei analyze
(sem parâmetros) de dentro do psql e enquanto conectado ao banco de dados que foi restaurado.
A primeira coisa que notei é que na versão 9.3, o diretório de dados ocupava cerca de 860 GB, enquanto na versão 9.4 ocupa cerca de 680 GB. 9.4 é muito mais eficiente?
A segunda coisa que notei é que vejo os índices no banco de dados:
nominatim=# \d country_name
Table "public.country_name"
Column | Type | Modifiers
-------------------------------+---------------------------------
country_code | character varying(2) |
name | hstore |
country_default_language_code | character varying(2) |
partition | integer |
Indexes:
"idx_country_name_country_code" btree (country_code)
nominatim=# \d idx_country_name_country_code
Index "public.idx_country_name_country_code"
Column | Type | Definition
--------------+----------------------+--------------
country_code | character varying(2) | country_code
btree, for table "public.country_name"
nominatim=# select * from pg_indexes where tablename = 'country_name';
schemaname | tablename | indexname | tablespace | indexdef
------------+--------------+-------------------------------+------------+---------------------------------------------------------------------------------------
public | country_name | idx_country_name_country_code | | CREATE INDEX idx_country_name_country_code ON country_name USING btree (country_code)
(1 row)
Ainda preciso reindexar ou meus índices, de alguma forma ou de outra, mudaram ou o que estou vendo é simplesmente a definição do índice? Quaisquer outras dicas sobre como gerenciar melhor o despejo/restauração, verificando meus índices, etc. seriam definitivamente apreciadas.
Isso parece ser um mal-entendido. O próprio índice (contendo todos os dados) não está no dump. Apenas os comandos para recriá-lo. Assim, os índices são "transferidos", mas, na verdade, eles são recriados em perfeitas condições, sem nenhum inchaço ou tuplas mortas
Não. Após a restauração você tem todos os índices em perfeitas condições. Não
REINDEX
é necessário.ANALYZE
faria sentido, porém, conforme aconselhado no manual no capítulo "Restaurando o Basculamento":E finalmente:
Não, geralmente não. Bem, o tamanho dos índices GIN foi reduzido substancialmente. Mas o que você vê é provavelmente o efeito de remover o inchaço de todas as tabelas e índices (incluindo tabelas do sistema).