Portál AbcLinuxu, 1. listopadu 2025 00:10
HostnameLookups jste měli nakonec pravdu nakonec vy. Původní příčina byla zapnutém firewallu ve Fedoře 15, u něhož se mi nepodařilo jeho zakázání obvyklým příkazem chkconfig, díky novém systemd. Za druhé se chci ale zamyslet na výše uvedeným příkazem v MySQL.
Na první pohled se totiž jedná o velice užitečný příkaz, který zřetězí pomocí zadaného oddělovače záznamy zesumarizované pomocí GROUP BY. Hodit se může např. v případě, že GROUPujeme např. podle uživatelského jména a chceme zjistit jestli v DB není jméno duplikované, takže si pomocí GROUP CONCAT(user_id) AS uid vypíšeme např.:
user1 | 14,21,35 filbar | 22,675 . . . atd.Jenomže to má jeden dooooost podstatný háček, velikost vráceného řetězce je ve výchozím stavu omezena na POUHÝCH 1024 znaků (přenastavit se dá v konfigu). Nechápu k čemu vůbec toto omezení existuje :-O. To má sloužit jako nějaká optimalizace, nebo proč? V každém případě nechápu proč vývojaři MySQL takto užitečnou funkci tak zbytečně pokazili. BTW. Než jsem to dneska odpoledne odhalil, tak jsem ztratil dobré 2 hodiny času.
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
Hodit se může např. v případě, že GROUPujeme např. podle uživatelského jména a chceme zjistit jestli v DB není jméno duplikované
To můžete zjistit snáz třeba pomocí
select NAME,count(ID) as CNT from TT group by NAME having COUNT(ID)>1
nebo (lépe) rovnou ten sloupec deklarovat jako unique.
Jenomže to má jeden dooooost podstatný háček, velikost vráceného řetězce je ve výchozím stavu omezena na POUHÝCH 1024 znaků (přenastavit se dá v konfigu). Nechápu k čemu vůbec toto omezení existuje :-O. To má sloužit jako nějaká optimalizace, nebo proč?
Zřejmě to bude souviset s implementací té agregační funkce a její návratové hodnoty. Na druhou stranu, pokud vám taková délka nestačí, je více než pravděpodobné, že to, o co se snažíte, bude vhodnější dělat úplně jinak. Tahle agregační funkce slouží k usnadnění práce při generování jednoduchých výpisů, ne k tomu, abyste pomocí ní lámal něco, co pravděpodobně půjde daleko lépe vyřešit nějakým joinem.
SET SESSION group_concat_max_len = xx;
            odit se může např. v případě, že GROUPujeme např. podle uživatelského jména a chceme zjistit jestli v DB není jméno duplikované, takže si pomocí GROUP CONCAT(user_id) AS uid vypíšeme např.:No nevím, nějaký index, nebo něco podobného by asi bylo mnohem rozumnější, než to řešit na aplikační úrovni...
You can set a maximum allowed length with the group_concat_max_len system variable. (The default value is 1024.)Osobne bych duplicity taky radsi hledal spis pomoci
having.
             http://interval.cz/clanky/databaze-a-jazyk-sql/
http://interval.cz/clanky/databaze-a-jazyk-sql/
            Co se tyce MySQL, muj osobni pocit je ze blysti se tam toho hodne, ale zlata je tam asi jak v Ankh-Morporskem tolaru :)
Za posledni 1/2 rok sem stravil neuveritelne mnozstvi casu prochazenim manualu MySQL ve snaze vyresit ruzne veci. Vetsina featur MySQL se nese v tomto duchu: "MySQL ve verzi X ma novou skvelou featuru Y. .... nasleduje popis featury .... prosim prectete si omezeni tedle featury tady ..." a link na trikrat delsi popis omezeni featury.
Priklad co sem resil: mam tabulku a protoze bude mit moc radku (v radech milionu) chci udelat partitioning. Tabulka "t", primarni klic "id" auto increment, cizi klic "y_id", foreign key constraint nad y_id, par dalsich sloupcu.
Ja: create table... partition by list(y_id)
MySQL: partition tabulka nemuze mit foreign key constraint
 Ja: ok, cert vem integritu, znovu bez foreign key
 MySQL: kazdy sloupec z partition key musi byt soucast primary key.
 Ja: WTF ? co je todle za .... ? no nic tak udelam slozeny primary key (y_id, id)
 MySQL: Nemuzete mit auto_increment nad jednim sloupcem slozeneho primary key
 Ja: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
... Kdyz nechcete prijit o nervy, vyhnete se MySQL obloukem.
 21.8.2011 11:40
Josef Kufner             | skóre: 70
        21.8.2011 11:40
Josef Kufner             | skóre: 70
            
            
         
             21.8.2011 18:39
okbob             | skóre: 30
             | blog: systemakuv_blog
             | Benešov
        21.8.2011 18:39
okbob             | skóre: 30
             | blog: systemakuv_blog
             | Benešov
        Kdybys v druhém kroku vyhodil místo foreign key onu partition část, tak bys měl po problému.Podstata cviceni byla zavest partitioning. Zkouseli ste nekdy vymazat 5M radku z tabulky co jich ma 25M ? Kdyz je mate v partitionech, dropnuti jedne partition je prakticky okamzite.
A nebo jsi to prostě jen dělal blběNemyslim. AFAIK vsechno na co sem narazil jsou dokumentovane omezeni, neboli gotcha
SELECTem, když ho napíšu špatně.
             
            ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.