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 / user-276789

Fabian's questions

Martin Hope
Fabian
Asked: 2024-07-23 18:10:37 +0800 CST

O índice trigrama é lento para termos comuns

  • 5

Eu tenho um banco de dados PostgreSQL com várias colunas de string em uma tabela com um índice trigrama usando pg_trgm. Eles são questionados assim

SELECT [...] FROM mytable WHERE mycolumn ILIKE '%searchterm%';

Para consultas com termos de pesquisa muito específicos, isso funciona muito bem. Existem algumas centenas de milhares de linhas nessa tabela, e algumas dessas colunas podem conter uma grande quantidade de texto (embora a maioria delas sejam strings razoavelmente curtas).

O problema é que isso não funciona bem quando os termos de pesquisa são comuns e aparecem em muitas linhas. Para consultas de pesquisa com termos de pesquisa específicos, essa consulta é concluída em milissegundos; para termos que correspondem a aproximadamente 80% de todas as linhas, leva dezenas de segundos. Os índices trigramas são usados ​​em quase todas as consultas, mesmo as lentas.

Eu sei que isso provavelmente é inerente ao modo como esse índice funciona e não pode ser facilmente corrigido, mas estou procurando principalmente maneiras de lidar melhor com esses casos do que apenas esperar o tempo limite da consulta. De qualquer forma, pesquisar esses termos não é muito útil, pois não filtrará linhas suficientes. Mas não posso impedir que os usuários insiram esses termos, então gostaria de falhar com um pouco mais de elegância do que com um tempo limite de consulta, se possível.

Primeiro, há alguma maneira de aumentar o desempenho desse tipo de consulta? Existem tipos melhores de índices para esta ou outras maneiras de ajustar o desempenho do índice? Estou usando intencionalmente índices de trigramas aqui e não a pesquisa de texto completo do Postgres, pois a lematização seria contraproducente aqui. Os termos de pesquisa geralmente não são palavras em inglês e, em meus primeiros experimentos, a derivação foi prejudicial para certas consultas, pois, por exemplo, cortou partes de abreviações ou termos específicos do domínio.

Existe uma maneira de detectar casos como este em que o termo de pesquisa é excessivamente inespecífico? Se não for possível fazer essas consultas com rapidez suficiente, a próxima melhor coisa seria não executá-las e atingir o tempo limite, mas mostrar ao usuário um feedback útil muito mais cedo de que seus termos de pesquisa são problemáticos.

postgresql
  • 1 respostas
  • 28 Views
Martin Hope
Fabian
Asked: 2023-07-18 18:11:14 +0800 CST

Corrige soma de verificação inválida no banco de dados que faz com que o pg_dump falhe

  • 5

Eu tenho um banco de dados Postgres 9.6 que está corrompido. O hardware em que ele estava rodando ficou ruim e há pelo menos uma página corrompida no banco de dados. Ao executar o pg_dump, recebo o seguinte erro:

pg_dump: WARNING:  page verification failed, calculated checksum 24925 but expected 25309
pg_dump: Dumping the contents of table "my_table" failed: PQgetResult() failed.
pg_dump: Error message from server: ERROR:  invalid page in block 250471 of relation base/16384/754450

Essa tabela específica é fácil de corrigir, mesmo que haja dados ausentes, portanto, o que eu gostaria de fazer é zerar totalmente essa página e continuar com o banco de dados. Mas não consegui encontrar uma maneira de fazer isso, como digo ao Postgres para ignorar o erro, excluir os dados dessa página e continuar? O próprio pg_dump não parece ter uma opção como esta.

Também gostaria de saber se há mais erros de checksum, mas a ferramenta que encontrei para isso só está presente desde o Postgres 11 e não na minha versão mais antiga.

Como corrijo as páginas ruins removendo todos os dados nelas, para que o banco de dados possa continuar a ser executado e o pg_dump possa ser executado novamente?

postgresql
  • 1 respostas
  • 23 Views

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