PDOException ao criar a tabela: Tabela base ou exibição não encontrada [fechada]

8

Eu tenho o Drupal rodando no MariaDB 5.5.33. Quando executo o update.php (após a atualização para o Drupal 7.28 do Drupal 6), recebo um erro:

Falha: PDOException: SQLSTATE [42S02]: Tabela base ou exibição não encontrada: 1146 A tabela 'webdb.location_country' não existe: CREATE TABLE {location_country} ( codeCHAR (2) NOT NULL COMMENT) Chave principal: código ISO do país com duas letras ', nameVARCHAR (255) NÃO NULL PADRÃO' 'COMENTÁRIO' Nome Completo do País ', PRIMARY KEY ( code)) MOTOR = InnoDB PADRÃO PADRÃO CONJUNTO utf8 COMENTÁRIO' Dados do país gerenciados por location.module. '; Matriz () indb_create_table () (linha 2720 de /home/web/public_html/includes/database/database.inc).

Quando tento executar o comando

CREATE TABLE {location_country} ( codeCHAR (2) NOT NULL COMMENT 'Chave primária: código ISO do país com duas letras', nameVARCHAR (255) NOT NULL DEFAULT '' COMMENT 'Nome completo do país', PRIMARY KEY ( code)) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT 'Dados do país gerenciados por location.module.';

no phpMyAdmin, recebo um erro

# 1064 - Você tem um erro na sua sintaxe SQL; verifique o manual que corresponde à versão do servidor MariaDB para a sintaxe correta a ser usada perto de '{location_country} ( codeCHAR (2) NOT NULL COMMENT' Chave Primária: Chave Primária: Duas letras IS 'na linha 1

Mas não consegui descobrir onde está o problema.

Tilia
fonte

Respostas:

6

Eu tinha o mesmo problema e, no meu caso, o problema era o mecanismo de tabelas do banco de dados: por padrão, é o InnoDB e (por algumas razões ainda não preciso entender) o Drupal relata esse erro.

Você deve alterar o mecanismo do banco de dados para MyISAM. Primeiro, você deve ter certeza de que as tabelas que serão criadas pelo Drupal têm o MyISAM como mecanismo: In /includes/database/mysql/schema.inc, procure createTableSql($name, $table)e altere o InnoDB para MyISAM; então, salve-o.
Como você possui algumas tabelas em seu banco de dados, elas também devem ser alteradas MyISAM; basta exportar o banco de dados como arquivo .sql, abri-lo em um editor de texto e substituí-lo Engine=InnoDBpor Engine=MyISAM. Agora, no servidor, phpmyadminexclua todas as tabelas do banco de dados e importe o novo .sqlarquivo lá. Dessa forma, todas as suas tabelas e as tabelas que serão criadas pelo Drupal são MyISAM.

M ama D
fonte
De fato, o problema estava no motor. Eu criei a tabela como MyISAM. Eu então exportei, mudei do InnoDB e tentei importar de volta. Não deu certo. Então mudei para o MyISAM, conforme descrito no link. Parece que está funcionando. Muito obrigado.
Tilia
3

Como outras respostas (incluindo as que não estão relacionadas ao mecanismo InnoDB) a perguntas sobre essa PDOException estão marcadas como duplicadas e redirecionam para essa, acho que esse é o lugar canônico para obter respostas sobre esse problema.

Eu encontrei isso várias vezes ao desinstalar um módulo e a tabela procurada não existe no site (porque foi excluída por acidente, porque há um erro de digitação na definição do esquema em .install, ou por algum outro motivo).

A maneira mais simples de corrigir isso é executar o script de atualização do banco de dados ( update.php) manualmente.

Depois que seu site voltar à vida, você deve tentar descobrir a causa raiz do problema e corrigi-lo.

Radical livre
fonte
2

Você precisará remover os chavetas ao redor do nome da tabela ao usar como SQL bruto.

por exemplo:

CREATE TABLE location_country ( `code` CHAR(2) NOT NULL COMMENT 'Primary Key: Two letter ISO Country Code', `name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Full Country Name ', PRIMARY KEY (`code`) ) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT 'Country data managed by location.module.';
David Thomas
fonte
Interessante. Por que o Drupal mostra o comando SQL com o sysntax errado? Enfim, não funcionou. Funcionou no banco de dados de teste, não no desejado. Finalmente, a solução foi mudar para o mecanismo MyISAM, conforme descrito abaixo.
Tilia
Drupal adiciona colchetes para detectar nomes de tabelas e aplicar o prefixo do banco de dados antes de executar a consulta.
Sanzante
1

Essa é a mesma mensagem de erro ao mover o Drupal 7 de um site de desenvolvimento para outro site de desenvolvimento no meu laptop. Após verificar as tabelas no banco de dados Drupal, descobri que o dump completo do sql não estava sendo importado (usando o Adminer e a opção "Do servidor", adminer.sql).

Procure as tabelas de banco de dados Drupal 7 que se aproximam do final do dump SQL em ordem alfabética, como: usuário * , visualizações * , formulário da web * , ambiente de trabalho * , xmlsitemap * para ver se tudo foi importado.

Eu costumava drush sql-cli < database.sqlimportar o dump sql para o banco de dados Drupal depois de soltar todas as tabelas de banco de dados drush sql-drop.

frederickjh
fonte