LogicException Table ‘xyz’ does not have a primary key

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
H0w4rd
Člen | 96
+
0
-

Čas od času se mi na produkci stává, že se objeví tahle chyba.

Padá to na příkazu
$this->database->table('xyz')->get(1);

Opravdu nic z tohodle nepomáhá: https://forum.nette.org/…-primary-key

Já vím, že je to takové podezřelé, že si řeknete, že jsem určitě udělal něco špatně, ale jsem si na 100% jistý, že se připojuju na správnou databázi a že ta tabulka na 100% má nastavený PK na sloupečku ID INT primary key not null auto_increment.

Jediné, co pomůže, přelejt data z databáze pryč a nalejt je tam zpátky. Pak smažu nette cache a pak to zase několik hodin funguje.

To mi řekněte, co tam může být za problém.

OS: Debian 8
Databáze MariaDB 10.1
Tabulka je v InnoDB.

I v době, kdy to hází tu chybu, je tabulka normálně čitelná v sql klientovi, lze do ní insertit, měnit záznamy, mazat, vše bez problémů.

Jenom Nette má problém.

surani
Člen | 6
+
0
-

Ahoj mám stejný problém.

Nette Database 2.3.8
Konfigurace serveru PHP 5.5.9, MariaDB 10.1.11

Nejsem si jistý, zda je to verzí MariaDB, ale na druhém serveru kde je MariaDB 10.0.23 problém není.
Konfigurace obou serverů jsou obdobné (PHP je stejné)

H0w4rd
Člen | 96
+
+1
-

Nestihl/zapomněl jsem napsat.

V NTDB není bug (alespoň ne v tomhle směru). Pátral jsem v kódu Nette, kdy to hází tuhle exception a jak to zjišťuje PK v tabulce – koneckonců daný příkaz je vidět i v laděnce při prvním načtení stránky po smazání cache.

Takže až bude zase někdo pátrat po téhle chybě, nechť si dá příkaz:

SHOW FULL COLUMNS FROM xyz;

A tam uvidí ve sloupci Key, jestli tam opravdu je PK nebo ne – musí v některém řádku být PRI.

V našem případě se z nějakého záhadného důvodu občas ztratí v tabulce primární klíč i většina indexů. Nevíme proč. Asi bug MariaDB 10.1, vůbec bych se tomu nedivil.
SQL klient mi pořád ukazuje, že tam ty klíče jsou, ale on to asi bere z INFORMATION_SCHEMA, takže je to matoucí.

surani
Člen | 6
+
0
-

H0w4rd napsal(a):

SHOW FULL COLUMNS FROM xyz;

A tam uvidí ve sloupci Key, jestli tam opravdu je PK nebo ne – musí v některém řádku být PRI.

Ano, žádný řádek nemá ve sloupci Key hodnotu PRI

Prozatím jsem vyměnil db za verzi 10.0.23 a je to ok

Děkuji

H0w4rd
Člen | 96
+
0
-

Ja spis premyslim o navratu na MySQL 5.6 nebo mozna 5.7.

Ale zase par dalsich lidi na gitteru psalo, ze s MariaDB 10.1 nema zadne problemy, nevim. Mozna nepouzivaji NTDB.

n.u.r.v.
Člen | 485
+
0
-

Mě se tohle občas taky stává na localu ve windows – používám mysql 5.6…

ve 3 z 10 případů pomůže jen smazání cache, jinak musím smazat db a znovu do ní nalejt data a pak smazat cache…

H0w4rd
Člen | 96
+
0
-

Ale tak taky… ve chvíli, kdy to pořád bude házet, zkus
SHOW FULL COLUMNS FROM xyz;