Adminer 3.7.0
Školení, která pořádám
Asi největší novinkou v Admineru 3.7.0 je možnost v SQL příkazu importovat více souborů najednou. Využívá se k tomu <input multiple>
. Další změny jsou drobnější:
- U provedených dotazů se nově zobrazuje čas zpracování. Umístil jsem ho do SQL komentáře příkazu, takže se přenese třeba i do historie. Nicméně je možné, že mi na tomto místě časem začne vadit a přesunu ho někam jinam.
- Počínaje předchozí verzí se Adminer pokusí obnovit původní pohled, trigger a uloženou proceduru, pokud vytvoření nové selže. Pokud se ovšem nepodaří ani obnova, tak objekt zmizí. Nová verze se proto nejprve pokouší pohled a uloženou proceduru vytvořit pod novým názvem. Když to selže, tak by nejspíš selhalo i vytvoření pod správným názvem (práva jdou sice nastavit i na jednotlivé objekty, ale moc často se to nevyužívá). Když to projde, tak se smaže dočasný a původní objekt a nový se vytvoří pod správným názvem. U triggerů tenhle postup není možný, protože MySQL dovoluje mít jen jeden trigger pro danou událost. Pokud je to možné, tak se použije
ALTER VIEW
, ale ALTER PROCEDURE
je bohužel k ničemu.
- Vizuální maličkostí (vyžadující JavaScript) je zvýrazňování výchozího formulářového tlačítka. Tato funkce odpovídá na otázku: „Co se stane, když zmáčknu Enter?“ V Admineru je na stránce často několik formulářů a nemusí být úplně jasné, které tlačítko je pro daný formulářový prvek výchozí. Např. u možností exportu pod tabulkou bych čekal, že výchozí bude tlačítko pro export. Ale protože tyto formulářové prvky jsou součástí velkého formuláře skoro přes celou stránku, pomocí kterého si můžu vybrat záznamy k exportu, tak to tak není a výchozí je tlačítko pro uložení dat. Časem této funkce možná využiji k tomu, že výchozí tlačítko bude určeno nikoliv podle pravidel prohlížeče, ale podle kontextu.
- Do přihlašovacího formuláře jsem přidal placeholder pro název serveru. Tento atribut se často používá špatně a uvádí se v něm popis políčka. Správně v něm má být ukázková hodnota.
- Výsledky výpisu dat už nejde exportovat do SQL, pokud se ve výběru sloupců použily funkce.
- V rozšířeních lze nyní pro překlady používat funkci
lang()
. Při kompilaci se totiž všechny identifikátory překladu (což je obvykle anglická verze) z důvody úspory místa nahradí číslem. Rozšíření se ale nekompilují, takže z nich chodí původní textový identifikátor. Nová verze to řeší tak, že když zkompilované překladové funkci přijde text, tak pohledem do anglického překladu zjistí jeho číslo a pro překlad použije to.
- Z importu a exportu jsem odstranil podporu komprese Bzip2. Zjistil jsem, že jakékoliv exporty větší než 1 MB byly oříznuté. Vzhledem k tomu, že to nikoho příliš netrápilo, tak tato možnost asi nebyla moc využívaná.
- Při exportu více tabulek do CSV se vytvoří archiv TAR. V minulosti se to dělalo tak, že se každý soubor CSV nejprve umístil do paměti a z ní se potom vypsal do archivu, což žralo hodně paměti. Nová verze proto CSV soubory ukládá do dočasného souboru na disku. V PHP 5.2 by k tomu šlo využít php://temp, Adminer ale podporuje i starší verze, takže je to potřeba udělat ručně.
- Pokud jeden pohled závisí na druhém, tak je musíme vyexportovat ve správném pořadí. To je dost pracné určit, takže nová verze místo toho nejprve vytvoří tabulku pro každý pohled a před vytvořením skutečného pohledu ji zase smaže.
- Předchozí verze při vymazání vyhledávacího políčka vymazala i sloupec, ve kterém se hledá. Bohužel to nefungovalo správně, protože jsem pojmenoval dvě různé funkce stejně – taková hloupá chyba.
- Při úpravě záznamu se používá klauzule
LIMIT 1
. Ta je jako pojistka pro případ editace záznamů v tabulce bez primárního klíče. Bohužel to způsobuje varování při statement-based replikaci, že tato klauzule způsobuje nejednoznačné výsledky. Varování ničemu nevadí, ale „zasírá logy“. Nová verze proto kontroluje, jestli se záznam edituje podle primárního klíče a klauzuli LIMIT 1
přidá jen pokud ne.
- Nová verze také opravuje velmi ošklivou chybu, která je v Admineru nejspíš už od jeho vzniku. Ta se projevuje tehdy, pokud vyfiltruji záznamy, vyberu jen některé sloupce (bez primárního klíče), označím nějaké řádky a dám je upravit. Předchozí verze upravily všechny záznamy, jejichž hodnoty odpovídaly zobrazeným údajům. Žádoucí chování je, aby se upravily jen ty záznamy, které odpovídají výsledkům vyhledávání a zobrazeným údajům. Přepsal jsem si takhle nějaká data a doufám, že to nepostihlo moc dalších uživatelů – jde přeci jen o poměrně pokročilou funkci a většina uživatelů pro takovéto změny Adminer asi nepoužívá.
- Nová verze také aplikaci dále vylepšuje v mobilních prohlížečích. Změna spočívá v přesunu navigace až pod hlavní obsah. Zvažoval jsem dokonce, že bych navigaci udělal na desktopu schovávací, protože se mi špatně pracuje s výpisem širokých tabulek. Ale vzhledem k tomu, že seznam tabulek používám skoro stejně často jako hlavní obsah, tak jsem tuto změnu neudělal.
- Počet řádků v tabulkách na stránce exportu se nově načítá asynchronně, stejně jako na stránce se seznamem tabulek.
- V MySQL je z nějakého důvodu příkaz
SHOW TABLE STATUS
u velkých databází hrozně pomalý. Adminer ho potřebuje pro zjištění komentářů a typů tabulek. Nová verze si proto tyto informace vytahuje z information_schema
, což je rychlejší. Projeví se to na stránce pro vytvoření tabulky a v Adminer Editoru.
- Datový typ
bit
se nově zobrazuje jako číslo v dvojkové soustavě. Hodnoty tohoto typu se vrací odlišně v MySQLnd a libmysql a jde o jedinou mně známou nekompatibilitu mezi těmito nízkoúrovňovými knihovnami. Adminer chování sjednocuje.
- Pro export binárních dat se nyní používají konverzní funkce.
- S datovým typem
point
se v některých případech pracovalo jako s číslem, protože obsahuje podřetězec int
, ha ha.
- Při výpisu nezobrazitelných dat se používá dotaz ve tvaru
SELECT *, HEX(binary) AS binary
. To vedlo k dvojitému uvedení těchto dat v exportu. Nová verze to ošetřuje. Možná si říkáte, proč se prostě nevyjmenuje seznam všech sloupců. I když by se přeneslo míň dat, tak by dotaz byl podstatně míň přehledný, proto se používá verze s hvězdičkou.
- Předchozí verze rozbila
EXPLAIN
v MySQL < 5.1, nová verze to opravuje.
- Export SQLite nově obsahuje i pohledy.
- PostgreSQL vrací pravdivostní hodnoty jako znaky
t
a f
. Jeden uživatel mi ale nahlásil, že mu je PostgreSQL vrací jako 1
a 0
, což způsobovalo problémy při detekci NOT NULL sloupců a primarních klíčů. Nepodařilo se mi zjistit, čím je to způsobené, jestli nějakým nastavením PostgreSQL nebo nestandardním ovladačem, každopádně jsem Adminer upravil tak, aby přijímal oba formáty.
Diskuse
srigi:
Jakube, vdaka ze tento update. Mam dve poznamky:
- keby si na obrazovke "Select" umoznil pri vybere jednotlivych stlpcov ich /rearrangement/, tak sa ti komunita zlozi na pol princeznej, vid.:
http://i42.tinypic.com/261df6a.png
- od tejto verzie su vsetky odosielacie tlacitka vykreslene nepeknym, zastaralym sposobom, az kym formular nestrati focus, vid.:
http://i41.tinypic.com/amedf8.png (Mac OS, Google Chrome, Firefox).
srigi:
Ten moj druhy bod asi suvisi s tvojim tretim bodom - vseobecne sa nedoporucuje stylovat formularove prvky ako checkbox, button, radiobox, lebo sa to "rozoserie" (sorry za vyraz).
Mozno by bolo vhodnejsie "vychozie" tlacitko zvyraznit pomocou box-shadow.
Experimentoval jsem se změnou fontu a to bylo ošklivé, tak jsem nakonec změnil barvu pozadí. Ale máš pravdu, že to je ošklivé taky. Použít box-shadow mě nenapadlo, díky za tip. Změnil jsem to v Gitu.
Igor Aufricht:
Potvrdzujem druhy bod s vykreslovanim tlacitok (win7 + chrome).
To přeuspořádání sloupců výběru by se mi často taky hodilo. Stejně tak přesouvání řádků ve změně tabulky, to sice jde, ale pěkně blbě. Nějaká podpora drag/drop je ve schématu, tak to zkusím použít i tady.
Bez nějaké knihovny (např. jQuery UI) je to dost složité a přidávat závislost se mi nechce, takže to dělat nebudu. Nicméně by to mělo jít udělat jako plugin (včetně té závislosti).
Lukáš:
Ahoj, chci se jen zeptat, je normální chování že když soubor adminer-3.7.0.php přejmenuji na adminer.php tak pak je z admineru rozsypaný čaj? Používám ho jak na localhostu tak na webech a právě jsem zjistil že to je tím jménem...
Díky
Pinky:
Jménem to zajisté není ;)
Ne, to není normální. Na jménu nezáleží. Zkus být přesnější v popisu rozsypaného čaje, pošli třeba screenshot.
Lukáš:
Jakoby by se špatně načetlo kódování, ale teď budu za troubu... soubor jsem přejmenoval a už to samozřejmě nedělá :/ Díky za reakci, problém se vyřešil. :)
Roman:
Zdravím, nechtěl bys zavést v příštích verzích funkčnost zakliknutí checkboxu i v případě kliknutí do buňky tabulky s daným checkboxem, nebo třeba i na buňku s labelem ? Dost často vybírám např. v oprávněních více práv najednou a dost mi vadí, že se musím vždy trefit přesně na checkbox a nemůžu trochu minout, nebo kliknout třeba rovnou na label buňku. Díky.
Určitě! Většina tabulek dovoluje zaškrtnout řádek kliknutím kdekoliv v řádku, ale třeba export nebo právě práva to nedovolují (protože na řádku může být checkboxů víc). Změnil jsem to v Gitu, díky za tip.
Pinky:
Taky jsem si řikal co je to za krávovinu...
A nemůže se to převádět na klientu? Driver dostane 't' nebo 'f' u sloupce, o kterém ví, že je to boolean, tak z toho udělá true nebo false.
Budu zvědavý. Co Tě vede k podpoře PHP 4.3.3 a starých verzí PHP 5 dnes? Mnohé z nich už nemají bezpečností updaty. Zaříznutí starších verzí by mohlo více nebo méně usnadnit vývoj (např. zmíněný php://temp).
Ne, že by mi to nějak vadilo, jen jsem zvědavý.
Zatím nebyl velký důvod starší verze zaříznout, oser s jejich podporou není tak velký. Zraje mi v hlavě pár plánů na Adminer 4, pak bych starší verze asi přestal podporovat. Ale nejsem si jist, jestli to vůbec udělám – se současným kódem se mi pracuje v zásadě dobře, takže nemám moc velkou motivaci trávit spoustu času předěláváním všeho, když výsledkem by bylo hlavně to, že přestanou fungovat starší verze.
Michal:
Ad 13. Desktopová navigace. Dalo by se udělat jako rozšíření ? Já (asi nejen já) naopak často pracuji s pravou částí :)
Myslím, že by to mělo jít, možná dokonce jen uživatelským stylem.
repli2dev:
Občas potřebuju upravit nějaké view v PostgreSQL a bylo by fakt užitečné, kdyby je Adminer uměl naformátovat, protože jinak se mi zobrazí v jednom dlouhém řádku.
randomguest:
zdravím a díky za dobrý kus softwaru. Jakube, trochu mu působí potíže dump, který generuje všechny řádky tabulek do jednoho insertu, což mi potom nepřijme lokální SQL server.
Námět do budoucna: umožnit export jeden řádek tabulky - > jeden INSERT.
Jakub Vrána :
Adminer data kouskuje po 1 MB, což je výchozí velikost paketu přijímaná MySQL. Co znamená „nepřijme“, máš nějakou chybovou hlášku?
LT:
Škoda tej podpory bzip2 - dosť som ju využíval na export velkých tabuliek - niekedy aj viac ako 10MB a s problémom orezania na 1MB som sa zatial nestretol.
Je pravda že ak som sa pokúsil ten súbor znova naimportovať tak sa naimportovali len niektoré tabulky. Ja ho ale vždy rozbalujem 7zipom na .sql súbor ten sa naimportoval vždy v poriadku.
Jakub Vrána :
Tak aspoň něco, že to dokázalo rozbalit. Já jsem to zkoušel pluginem do Total Commanderu a ten to taky nerozbalil. Možná bych to vrátil ve formě pluginu.
juzna:
Já export do bzip2 používám běžně a vždycky mi fungoval a funguje správně. Teď nemůžu aktualizovat na nový adminer, protože bych musel stahovat 10x větší exporty ze serveru :(
Na ostrý server mám přístup pouze přes adminer a každý týden si udělám dump a importuju na localhost, abych mohl testovat na reálných datech. Importuji většinou přes CLI.
Dnes jsem exportoval do bzip2, výsledek 13MB. Nekomprimované to má 163MB. To přece nebudu tahat přes síť. Nechceš bzip2 vrátit zpět? Díky
Standa:
Také bych se přimlouval za bzip2... teď se tu zrovna patlám s gzipem:-(
Vojtěch Dobeš:
Díky za vývoj tohoto pro mě neprostradatelného a skvělého software :). Bohužel píšu jen proto, abych se podělil o negativní feedback hned k tomu prvnímu bodu. Jsem zvyklý provádět různé úpravy ve struktuře DB, a pak si jednotlivé dotazy vykopírovávám z historie, a ten čas v komentáři mi tam pěkně vadí. Přemístění kamkoliv jinam bych uvítal.
Jakub Vrána :
Nějaký nápad, jak by to mělo vypadat? Nejlépe formou screenshotu.
Michal:
Si tak říkám, že když je vždy po vydání verze tolik (neberte to špatně prosím) připomínek tak by se možná hodilo vydat nejprve nějaký preview, aby pak ty úpravy nebyly jen v devu a nečekali na další verzi.
Jakub Vrána :
Nejsem si jist, kolik lidí by ten preview používalo a jaký by to tedy mělo smysl. Každá vydaná verze je stabilní a funkční, takže vydat 3.7.0 a 3.7.1 není velký rozdíl oproti vydání 3.7.0RC1 a 3.7.0. Nesnažím se číslo verze udržet co nejnižší, takže ani s tím není problém.
Michal:
Ano, v tom případě tomu rozumím.
Milsa:
Chcel by som požiadať, či by aj pouužívateľ nemohol byť predvyplnený ako root. Teda aspoň v prípade, že je spustený lokálne. Ušetrilo by mi to ustavičné vyplňovanie root. Adminera totiž na 80 % používam lokálne na svojom počítači a myslím, že takých nás je viac.
Michal:
To stránkování co se posouvá se scrollem je super !
Jakub:
Jakube,
napadla mě teď, při vytváření nové tabulky, věc, co by usnadnila práci.
Bylo by možné při zvolení řetězcového typu vyplnit porovnávání stejně, jako je vyplněno u celé tabulky?
Díky za zvážení, Jakub
Michal:
Mám pocit že přesně takto to již funguje. Sice se hodnota inputu nepřebírá - je tam stále "(porovnání)", ale nastavuje se z tabulky. Při následném editu tabulky je to vidět.
Jakub:
Pravda, při editu je to již vyplněno "správně". Dobré vědět, ušetří to práci, díky. :-)
Michal:
Zdravím.
Zajímalo by mě proč při změně struktury tabulky není tato tabulka v menu aktivní resp. nemá třídu "active". Díky.
Jakub Vrána :
Třídu "active" mají odkazy, na kterých se momentálně nacházím. Odkaz v levém menu vede na zobrazení struktury tabulky, nikoliv na její změnu.
David Grudl:
Tohle mi taky dost vadí. Chápu logiku „ze spoda“, ale z uživatelského pohledu provádím správu určité tabulky a v některých případech zvýraznění najednou zmizí.
Ještě jedna trošku matoucí věc: když chci pozměnit index nebo klíče, automaticky mířím na odkaz Pozměnit tabulku, ale toto se nachází v Zobrazit strukturu. Přitom chci měnit, nikoliv zobrazovat. Proč je nedat i do Pozměnit tabulku?
Jakub Vrána :
„Správně“ by asi bylo nechat to tak, jak je to teď. Ale užitečnější bude, když se tabulka zvýrazní i při její změně, takže jsem to tak udělal.
Co se druhé věci týče: Technicky jsou tabulka a index dvě různé věci. Z pohledu efektivity práce by bylo lepší stránku pro změnu tabulky a indexů spojit, ale je to velká výzva – jednak stránku udržet rozumně přehlednou a jednak formulář pro změnu indexu měnit spolu s tím, jak přidávám, měním a odebírám sloupce. Takže to nechám tak, jak to je.
Michal:
Super. To je dle mých představ. Díky !
David Grudl:
U toho odkazu Pozměnit tabulku je problém i s tím, že zmizí „menu“, tedy odkazy Vypsat data, Zobrazit strukturu, Pozměnit atd.
Chápu technickou rovinu, tedy že Pozměnit tabulku a Pozměnit indexy jsou obojí rovnocenné podstránky Zobrazit strukturu, leč z uživatelského pohledu se to jeví tak, že Pozměnit tabulku je rovnocenné se Zobrazit strukturu (je to prostě sousední položka v „menu“) a z toho plyne zmatení.
Myslím, že menu by mělo být zachováno pro všechny stránky, které jsou v něm uvedeny (tj. i Nová položka). A bylo by fajn dát odkaz na změnu indexů/klíčů do stránky Pozměnit tabulku. Není ani tak podstatné, že tabulka a index jsou dvě různé věci, důležité je, že jde o jediný odkaz v menu, který obsahuje sloveso „měnit“ a člověk přes něj instinktivně jde.
(Ačkoliv Adminer používám hodně často, v tomhle jsem ještě nepřestal chybovat.)
Michal Randa:
To mě také přijde zbytečně nekonzistentní na Admineru. Proč by nabídka pro tabulku (se zvýrazněným odkazem) nemohla být i při úpravě tabulky či úpravě záznamu nebo záznamů?
Vojta:
Od té doby co jsem si upgradoval na tuto verzi mi nefunguje úprava záznamu pouhým dvojklikem na buňku, to je záměr?
Jakub Vrána :
Ano, nově se používá Ctrl+klik, protože doubleclick mi chyběl pro označení slova.
Vojta:
Aha, supr díky za info :)
trestná smradlavice:
Ahoj Jakube,
Vím, že Adminer má UI pro editaci partitions, triggerů, klíčů a cizích klíčů. Má UI také pro podmínkových omezení (CONSTRAINT ... CHECK)?
trestná smradlavice:
A plánuješ to? Je to konec konců další featura tabulky, stejně jako výše zmíněné...
Jakub Vrána :
Sám to nepoužívám, MySQL to ani nepodporuje, takže tomu nedávám velkou prioritu.
Michal:
Když v Admineru v selectu dat dám vyhledat podle nějakého sloupce, zvolím sloupec, zvolím IS NULL a na dalším vstupním poli odešlu enterem (ne tlačítkem Select), není toto vyhledávání (filtr) akceptováno.
Jakub Vrána :
Nedaří se mi to reprodukovat. V jakém prohlížeči?
Michal:
Chrome Verze 29.0.1547.62m
Dělá to jen v Chromu. Ve Firefoxu je to OK.
Michal:
Zdravím. Povedlo se ti už problém reprodukovat? U mě chyba stále přetrvává.
Jakub Vrána :
Ano, už jsem to opravil. Díky za nahlášení.
Michal:
Potvrzuji, funguje.
Martin:
Ahoj. Svoji databázi administruji z mobilu a potřebuji mít přístup k položkám navigace. Teď je na dotykovém mobilu obtížně dosažitelná, protože je až dole pod ostatními položkami. Lze nějak jednoduše "zapnout" zobrazování vlevo, nebo se budu muset vrátit ke staré verzi? Lze také nějak zapnout, aby ťuknutí na položku výpisu ji vybralo (a bylo možné řetězec kopírovat), místo aby se tím zaškrtle checkbox vlevo? Klidně ať se zaškrtne, ale ať zůstane řetězec označený. A další, tentokrát námět - podpora sqlite je vylepšená, ale chybí administrace triggerů na pohledu. Ty jsou v sqlite dost důležité (INSTEAD OF INSERT) a řeší tam absenci určitého typu uložených procedur.
Jakub Vrána :
Třeba Chrome na Androidu umí vyžádat desktopovou verzi. Nejspíš to bude umět i na iOS. Nevím, jak ostatní prohlížeče. Mě to takhle vyhovuje.
Výběr řetězce na mobilu provádím podržením prstu na daném slově. Funguje to i v Admineru.
Na triggery u pohledů se podívám.
Jakub Vrána :
Triggery na pohledech jsem doplnil, bylo to velmi jednoduché.
Martin:
Ještě drobnost: Je-li na mobilu (HTC7Pro, Internet Explorer 9) výpis delší, než stránka, objeví se zápatí na konci stránky a roluje se s výpisem nahoru při posunu výpisu. Funkčně to moc nevadí. V podstatě mi chybí hlavně tlačítko "zobrazit klasicky", tedy vynucení desktop verze.
Michal:
Čtu v Admineru SQLite databázi. Zobrazení struktury tabulky 'sqlite_sequence':
Sloupec Typ
name NULL
seq NULL
Pokud dám pozměnit tabulku, zobrazuje typy jako numeric. Proč? Chyba? Vlastnost SQLite?
Jakub Vrána :
Jde o systémovou tabulku SQLite, nedoporučoval bych na ni sahat.
Diskuse je zrušena z důvodu spamu.