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 / 111227
Accepted
Chris Muench
Chris Muench
Asked: 2015-08-17 14:19:43 +0800 CST2015-08-17 14:19:43 +0800 CST 2015-08-17 14:19:43 +0800 CST

Execute o código APENAS se tivermos a capacidade de fazer pesquisa de texto completo no banco de dados (mysql >= 5.6.4)

  • 772

Encontrei esta resposta sobre como ter lógica condicional para execução de instruções mysql ( https://stackoverflow.com/a/7537348/627473 ). Parece funcionar muito bem.

Mas preciso encontrar uma maneira de executar o código para uma condição muito específica. O código só pode ser executado se o banco de dados oferecer suporte à indexação FULL TEXT para innodb. Isso acontece no mysql 5.6.4 ou superior. MAS eu também preciso que isso funcione para maria db outras bifurcações do mysql.

Tenho certeza de que poderia encontrar um caminho para a versão do mysql; mas eu realmente não gosto de confiar em uma versão e prefiro confiar na detecção de recursos.

Existe uma maneira de fazer isso?

EDIT: Aqui está o código. Eu só tenho mais erros que não tenho certeza se podem ser corrigidos.

No phpMyAdmin o erro "#2014 - Commands out of sync; you can't run this command now"é exibido. Isso NÃO acontece na CLI. Existe uma maneira de contornar isso?

delimiter //

create procedure update_phppos() 

begin
set @supports_ft := (SELECT COUNT(*) FROM information_schema.GLOBAL_VARIABLES WHERE Variable_name = 'innodb_ft_cache_size');

if  @supports_ft > 0 then 

    REPLACE INTO `phppos_app_config` (`key`, `value`) VALUES ('version', '15.0');

    else
        SELECT 'An error has occured. You MUST have mysql 5.6.4 or higher to update php point of sale' as 'ERROR';
    end if;
end;

//

delimiter ;

-- Execute the procedure
call update_phppos();

-- Drop the procedure
drop procedure update_phppos;
mysql
  • 2 2 respostas
  • 166 Views

2 respostas

  • Voted
  1. Best Answer
    Rick James
    2015-08-17T16:42:57+08:002015-08-17T16:42:57+08:00

    Plano A: observe como você pode comentar as coisas se a versão for mais antiga do que algo: (estou executando 5.6.12.)

    mysql> SELECT /*!50604 '5.6.4 is running', */ 'new or old';
    +------------------+------------+
    | 5.6.4 is running | new or old |
    +------------------+------------+
    | 5.6.4 is running | new or old |
    +------------------+------------+
    
    mysql> SELECT /*!50700 '5.7 is running', */ 'new or old';
    +------------+
    | new or old |
    +------------+
    | new or old |
    +------------+
    

    Você pode ver muitos exemplos na saída de mysqldump.

    Plano B: você também pode analisar @@versiondentro de um procedimento armazenado (ou código do cliente).

    Plano C: Ou, talvez este

    mysql> SELECT COUNT(*) FROM information_schema.GLOBAL_VARIABLES
            WHERE Variable_name = 'Junk';
    +----------+
    | COUNT(*) |
    +----------+
    |        0 |
    +----------+
    
    mysql> SELECT COUNT(*) FROM information_schema.GLOBAL_VARIABLES
          WHERE Variable_name = 'innodb_ft_cache_size';
    +----------+
    | COUNT(*) |
    +----------+
    |        1 |
    +----------+
    
    • 2
  2. Chris Muench
    2015-08-30T10:42:28+08:002015-08-30T10:42:28+08:00

    EDIT: O único problema com isso é que ele só funciona com o usuário ROOT no mysql 5.7. Alguém sabe de outra forma?

    Funciona no mysql 5.5,5.6,5.7

    begin
    set @supports_ft = 0;
    set @information_schema_exists := (SELECT COUNT(SCHEMA_NAME) FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = 'information_schema');
    
    if @information_schema_exists > 0 then
        set @information_schema_exists_global_vars_exists := (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'information_schema' AND TABLE_NAME = 'GLOBAL_VARIABLES');
            if @information_schema_exists_global_vars_exists > 0 then
                set @supports_ft := (SELECT COUNT(*) FROM information_schema.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'innodb_ft_cache_size');
            end if;
    end if;
    
    if @supports_ft = 0 then
        set @performance_schema_exists := (SELECT COUNT(SCHEMA_NAME) FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = 'performance_schema');
        if @performance_schema_exists > 0 then
            set @performance_schema_exists_global_vars_exists := (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'performance_schema' AND TABLE_NAME = 'GLOBAL_VARIABLES');
                if @performance_schema_exists_global_vars_exists > 0 then
                    set @supports_ft := (SELECT COUNT(*) FROM performance_schema.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'innodb_ft_cache_size');
                end if;
        end if;
    end if;
    
    • 0

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

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