abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 11:55 | Komunita

Vývojový tým OpenSSL ve spolupráci s iniciativou Core Infrastructure konsorcia Linux Foundation spustil proces přelicencování této kryptografické knihovny ze současné licence na licenci Apache Licence v 2.0 (ASLv2). Nová licence usnadní začleňování OpenSSL do dalších svobodných a open source projektů. Všichni dosavadní vývojáři OpenSSL (Authors) obdrží v následujících dnech email s prosbou o souhlas se změnou licence.

Ladislav Hagara | Komentářů: 6
včera 01:11 | Komunita

Před třemi týdny Mozilla.cz představila projekt Photon, jehož cílem je návrh a implementace nového vzhledu Firefoxu. Včera zveřejnila první náhled vzhledu Photon. Práce na projektu Photon jsou rozděleny do pěti týmů, které celkem čítají 19 lidí. Zaměřují se na zlepšení prvního spuštění Firefoxu a zaujetí nových uživatelů, celkovou úpravu vzhledu, zlepšení animací, zrychlení odezvy uživatelského rozhraní a také upravení nabídek. Vývoj lze sledovat v Bugzille.

Ladislav Hagara | Komentářů: 22
23.3. 20:00 | Komunita

OneDrive pro firmy je již ve webových prohlížečích na Linuxu stejně rychlý jako na Windows. Microsoft opravil chybu z listopadu loňského roku. OneDrive pro firmy běžel na Linuxu mnohem pomaleji než na Windows. V popisu chyby bylo uvedeno, že stačilo v prohlížeči na Linuxu nastavit v user-agentu Windows a vše se zrychlilo. Odpovědí Microsoftu bylo (Internet Archive: Wayback Machine), že Linux není podporován. Po bouřlivých diskusích na redditu i Hacker News byla chyba nalezena a opravena.

Ladislav Hagara | Komentářů: 4
23.3. 19:00 | Zajímavý projekt

Byla vyhlášena soutěž Hackaday Prize 2017. Soutěž je určena vývojářům open source hardwaru. Pro výherce je připraveno celkově 250 tisíc dolarů. Každý ze 120 finalistů získá tisíc dolarů. Nejlepší pak navíc 50, 30, 20, 15, 10 a 5 tisíc dolarů. Jedná se již o čtvrtý ročník soutěže. V roce 2014 zvítězil projekt globální sítě open source pozemních satelitních stanic SatNOGS. V roce 2015 zvítězil open source systém pro řízení elektrických invalidních vozíků pohybem očí Eyedriveomatic. V roce 2016 zvítězil modulární robot Dtto.

Ladislav Hagara | Komentářů: 0
23.3. 15:00 | Bezpečnostní upozornění

Byla vydána Samba ve verzích 4.6.1, 4.5.7 a 4.4.12. Řešen je bezpečnostní problém CVE-2017-2619. Pomocí symbolických odkazů a souběhu (symlink race) lze "teoreticky" získat přístup k souborům, které nejsou sdíleny. Linuxové distribuce jsou postupně aktualizovány (Debian).

Ladislav Hagara | Komentářů: 0
23.3. 07:43 | Nová verze

Na Steamu se objevil port hry Arma: Cold War Assault (Operation Flashpoint) pro Mac a Linux. … více »

creon | Komentářů: 29
23.3. 05:55 | Nová verze

Po 18 měsících od vydání verze 8.0 byla vydána verze 9.0 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab. Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 0
23.3. 03:33 | Komunita

Platnost posledního patentu souvisejícího s Dolby Digital (AC-3) vypršela. Po MP3 se tak do Fedory oficiálně dostane také kodek AC-3.

Ladislav Hagara | Komentářů: 5
23.3. 00:44 | Komunita

Feral Interactive, společnost zabývající se vydáváním počítačových her pro operační systémy macOS a Linux, nabízí své hry na Steamu vývojářům open source 3D grafické knihovny Mesa zdarma. Podmínkou je minimálně 25 commitů za posledních 5 let. Stejnou nabídku dostali vývojáři knihovny Mesa v roce 2015 od Valve. O rok dříve dostali od Valve tuto nabídku vývojáři Debianu a Ubuntu.

Ladislav Hagara | Komentářů: 0
22.3. 23:55 | Nová verze

Opera 44, verze 44.0.2510.857, byla prohlášena za stabilní. Nejnovější verze tohoto webového prohlížeče je postavena na Chromiu 57. Z novinek vývojáři Opery zdůrazňují podporou Touch Baru na nejnovějších MacBoocích Pro (gif). Přehled novinek pro vývojáře na blogu Dev.Opera.

Ladislav Hagara | Komentářů: 1
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (14%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 927 hlasů
 Komentářů: 72, poslední 1.3. 11:16
    Rozcestník

    Dotaz: PostgreSQL update s limitem a vnořeným selectem

    9.1.2014 20:56 problemovy
    PostgreSQL update s limitem a vnořeným selectem
    Přečteno: 892×
    Dobrý den... mám konverzační systém s doručenkama a teď se snažim docílit toho aby dotaz vypsal 10 konverzací + u těch deseti aktualizoval doručenky jako doručené... zkoušim podobný věci jako tohle

    UPDATE vzkazy_data as text SET dorucenka_vzkazy_data = 'f' FROM ( SELECT id_vazby_vzkazy_vazebni, dorucenka_vzkazy_data, cas_zpravy_vzkazy_data, nick_uzivatele, id_uzivatele,text_vzkazy_vazebni FROM vzkazy_data JOIN vzkazy_vazebni ON id_vzkazu_vzkazy_data = id_vazby_vzkazy_vazebni JOIN uzivatele ON id_odesilatel_vzkazy_data = id_uzivatele WHERE (id_odesilatel_vzkazy_data = 1 AND id_adresat_vzkazy_data = 9) OR (id_odesilatel_vzkazy_data = 9 AND id_adresat_vzkazy_data = 1) ORDER BY cas_zpravy_vzkazy_data DESC LIMIT 10 OFFSET 0 FOR UPDATE ) AS nezobrazeno WHERE id_vazby_vzkazy_vazebni = nezobrazeno.id_vazby_vzkazy_vazebni; RETURNING text_vzkazy_vazebni, nezobrazeno.cas_zpravy_vzkazy_data, nezobrazeno.nick_uzivatele, nezobrazeno.id_uzivatele, nezobrazeno.dorucenka_vzkazy_data;

    ale vypisuje to nesmysly... tohle zrovna vypíše 200x první řádek té konverzace a updatuje celou tabulku. mohl by mi někdo s tím píchnout? děkuji

    Odpovědi

    9.1.2014 20:59 problemovy
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    omlouvám se dal jsem to asi do špatných tagů
    
    UPDATE vzkazy_data as text
    SET dorucenka_vzkazy_data = 'f'
    FROM (
         SELECT id_vazby_vzkazy_vazebni, dorucenka_vzkazy_data, cas_zpravy_vzkazy_data, nick_uzivatele, id_uzivatele,text_vzkazy_vazebni
         FROM vzkazy_data
         JOIN vzkazy_vazebni ON id_vzkazu_vzkazy_data = id_vazby_vzkazy_vazebni
         JOIN uzivatele ON id_odesilatel_vzkazy_data = id_uzivatele
         WHERE (id_odesilatel_vzkazy_data = 1 AND id_adresat_vzkazy_data = 9)
              OR (id_odesilatel_vzkazy_data = 9 AND id_adresat_vzkazy_data = 1)
         ORDER BY cas_zpravy_vzkazy_data DESC
         LIMIT 10 OFFSET 0
         FOR UPDATE
         ) AS nezobrazeno
    WHERE id_vazby_vzkazy_vazebni = nezobrazeno.id_vazby_vzkazy_vazebni;
    RETURNING text_vzkazy_vazebni,
              nezobrazeno.cas_zpravy_vzkazy_data,
              nezobrazeno.nick_uzivatele,
              nezobrazeno.id_uzivatele,
              nezobrazeno.dorucenka_vzkazy_data;
    
    
    10.1.2014 00:28 Logik
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    Dejte sem strukturu tabulek, používáš tak obskurní způsob pojmenování sloupců, že se mi to nechce luštit :-)
    10.1.2014 10:51 problemovy
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    Ty názvy těch sloupečků mám takhle proto abych nemusel (původně jsem to tak zamýšlel) dělat aliasy a jako vyznám se v tom. Struktura je tady :
    
    CREATE TABLE uzivatele (
         id_uzivatele BIGSERIAL primary key,
         nick_uzivatele CITEXT UNIQUE not null,
         heslo_uzivatele VARCHAR(255) not null
    );
    
    CREATE TABLE vzkazy_data (
         id_vzkazu_data BIGSERIAL primary key,
         id_odesilatel_vzkazy_data BIGSERIAL not null,
         id_adresat_vzkazy_data BIGSERIAL not null,
         dorucenka_vzkazy_data boolean not null,
         vymazani_vzkazy_data SMALLINT not null,
         cas_zpravy_vzkazy_data TIMESTAMP not null,
         id_vzkazu_vzkazy_data BIGSERIAL not null
    );
    
    CREATE TABLE vzkazy_vazebni (
         id_vazby_vzkazy_vazebni BIGSERIAL primary key,
         text_vzkazy_vazebni VARCHAR(5000) not null
    );
    
    
    
    10.1.2014 12:25 logik
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    Jo, takovydle nazvy se nekdy pouzivaj, spis jsou matouci nazvy tabulek (vazebni evokuje vazbu mezi dvema dalsima tabulkama).

    Problém bych čekal v tom, že nekvalifikujes:

    WHERE ***id_vazby_vzkazy_vazebni*** = nezobrazeno.id_vazby_vzkazy_vazebni

    a on ten sloupec asi vezme taky z tabulky nezobrazeno. Zkus tam dát vazby_data.id_vazby_vazebni. Ale nezkousel jsem, je to hádání na blind :-)
    10.1.2014 15:09 problemovy
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    Přiznám se že nerozumím. kam mám dát vazby_data.id_vazby_vazebni? to vazby_data je jako alias?
    10.1.2014 15:12 logik
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    No takhle: WHERE text.id_vazby_vzkazy_vazebni = nezobrazeno.id_vazby_vzkazy_vazebni (predtim jsem si nevsim, zes oaliasoval i tu updatovanou "instanci" tabulky)
    10.1.2014 15:22 problemovy
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    Jo tak tuhle variantu jsem taky přesně zkoušel... a napíše mi tohle :

    ERROR: column text.text_vzkazy_vazebni does not exist ŘÁDKA 15: RETURNING text.text_vzkazy_vazebni,

    cožje další věc co nechápu.
    10.1.2014 15:24 problemovy
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    ...případně tedy vlastně toto :

    ERROR: column text.id_vazby_vzkazy_vazebni does not exist ŘÁDKA 14: WHERE text.id_vazby_vzkazy_vazebni = nezobrazeno.id_vazby_v...
    11.1.2014 02:05 Logik
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    UFFF, tak jsem se tím probral a už vím, kde je chyba. Nepovím Ti to ale, protože na to určitě přijdeš, až

    -1) Opravíš si SQL typy v tabulkách. SERIAL se používá pro primární klíč, nikoli pro cizí klíč. Tj. pouze na pole, kde se má utomaticky generovat IDčko, nikoli na pole, do kterých se ukládají "odkazy na IDčka".

    0) Doplníš si cizí klíče (FOREIGN KEYS).

    1) Rozumě pojmenuješ tabulky Např. proč se třetí tabulka jmenuje vazební? Ona snad obsahuje vazbu, tj. vztah mezi nějakýma dvěma dalšíma entitama? Jestli je nějaká z těch tabulek vazební, tak ta druhá (vzkazy_data), která váže text vzkazu a uživatele.

    2) Rozumně pojmenuješ sloupce To, že se někdy dávají názvy tabulky do názvu sloupce sice je pravda, ale pouze u ID políček, ne u všeho. A i tak to moc nepodoručuju používat, žádné psaní Ti to neušetří, naopak to vede ke zmatku.

    3) A zkontroluješ, že Tvoje nové pojmenování je opravdu konzistentní a smysluplné tak, aby i jiný člověk už od pohledu na tabulku okamžitě pochopil, co je tam uloženo :-) Proč je v tabulce vzkaky_vazebni nějaké id_vazby, když ta tabulka obsahuje jako jedinná další data text zprávy? Název pole nekoresponduje ani s názvem tabulky, ani s jejím obsahem.

    Až todle všechno uděláš a napíšeš si ten dotaz znovu, tak snadno uvidíš, kde byl problém a proč to píše tu chybovou hlášku v případě, že tam doplníš to text, aby id_vazby_vzkazy_vazebni nebral z tabulky nezobrazeno. Pak opravíš dotaz, vyzkoušíš... a pak Ti zbývá pouze poslední krok:

    4) Zamyslíš se nad strukturou tabulek - Jaký má význam, aby byly odděleny tabulky vzkazy_data a vzkazy_vazební, když je tam evidentně relace 1:1? - a celý to zjednodušíš a přepíšeš

    Doporučuju ale krok čtyři udělat opravdu jako poslední, ať to příště neuděláš zas takhle s odpuštěním strašně :-)

    Jestli Ti cokoli není jasný, tak se klidně ptej, rád Ti s tím pomůžu.

    11.1.2014 10:01 problemovy
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    -1) opraveno ... to nevim jak se tam dostalo a děkuji za povšimnutí... opraveno na :
         ...
         id_odesilatel_vzkazy_data BIGINT not null,
         id_adresat_vzkazy_data BIGINT not null,
         ...
    
    0) ty cizí klíče jsem ani nevěděl že něco takového existuje, ale jak si o tom čtu tak to tam nemusim mít ne? je to jenom pro integritu. doplním to tam, ale napřed chci pochopit tu logiku protože to může mít následky když to tam nasekám nesprávně. Viz bod 4 např.

    1) no já myslel že je vazební. :D a ona to je nakonec ta druhá.

    2 & 3) celý je to zmateční. teprve přicházim na systém. ale co se bodu 2 týče... můžu pak někdy časem chtít joinovat i něco co neni cizí klíč a to se může jmenovat stejně jako něco jinýho co už budu selectovat.

    4) tohle ale má zásadní důvod. když budu chtít odeslat hromadnou zprávu měl bych jí tam třeba 1000x takhle na ní můžu jenom odkázat. proto taky jsem jí pojmenoval vazební tuhle tabulku, což vlastně si uvědomuju, že opravdu má být obráceně. Slibuju že to přejmenuju, ale napřed to chci rozchodit takhle abych to nějak chápal.

    ...ale podle nápovědy jsem pochopil, že problém je někde v tom že je někde něco špatně přehozeno, ale stejně to nemůžu najít. ten vnitřní select je správně a dál už nevim co by mohlo bejt v tom uploadu špatně. prostě se s tím setkávám prvně.

    11.1.2014 22:40 Logik
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    0) Integrita v databázi je dost podstatná věc. Navíc cizí klíče jsou zároveň i dokumentace. Rozhodně doporučuju je používat. Logika je jednoduchá: je daný sloupec odkaz na data z jiné tabulky? Pak je to cizí klíč a má být označen. V podstatě tam, kde používáš (BIG)SERIAL (a nejde o primární klíč), tak tam má být datový typ normální integer, ale má tam být cizí klíč.

    Klidně sem pak tu strukturu s doplněnejma FK dej, kouknu se Ti na ní... (Ale jen s rozumnejma názvama, podruhý už tu papuánštinu neluštim).

    2) To samozřejmě může. Ale v těch případech holt budeš muset napsat table.column místo column_table, takže i ten nejhorší případ neni horší než Tvá notace. A to ještě si člověk zpravidla pro tabulku v dotazu, když ji používá vícekrát, udělá kratší alias, takže to i tak bude kratší. Tak jak to děláš je to ale zaprve nepřehledné, zadruhé náchylné k chybám (tabulka1_id_tabulka2 přímo svádí k prohození tabulek), zatřetí strašně ukecané, čím je to ještě nepřehlednější a tím ještě náchylnější k chybám :-) (A to neřeším případ, kdy vážeš dvě stejné tabulky na sebe, kde pak musíš alias tak jako tak uvést - což je vlastně i případ toho Tvého dotazu).

    4) Jo aha, netušil jsem, že píšeš systém pro spammery, to bych Ti nepomáhal vůbec :-) V tom případě ale má stejně zpráva jednoho odesílatele a čas odeslání a jeden text, jediný, čeho může bejt víc, je snad příjemce a příznak vymazání, ne? Takže i tak by ta struktura měla vypadat jinak.

    ad Chyba) Pojmenuj rozumně ty tabulky a sloupce. Protože je to IMHO jedinná možnost, jak na to přijít. Když to budeš mít pojmenovaný normálně, tak si ten dotaz jednou přečteš a bude Ti to jasný. A až na to příjdeš, můžeš vždycky se vrátit k tý současný a kouknout se, jak to teda původně mělo bejt.

    Přehlednost návrhu a názvů je jedním ze základních programátorských dovedností - to neni tak, že dobrej programátor se vyzná ve zmatku. Dobrej programátor zmatek neudělá a nebo aspoň když udělá, tak opraví. A pokud něco nefunguje a je tam zmatek v názvech, tak je naprosto standardní postup vhodným pojmenováním si nejprve udělat jasno, co je vlastně co - chyba se pak vyloupne sama. Např. když budeš mít program
    
    Pes a ;
    Kočka b ;
    Papoušek c ;
    ...
    b.stekej()
    
    
    Tak můžeš chybu hledat hodinu a nevšimneš si toho. Jedinná šance, jak ji najít je si proměnné dobře pojmenovat, tj. a pes, b kočka atd... A to můžeš udělat buďto jen v hlavě - to ale zvládneš takhle pobrat jen kousek kódu a ten Tvůj dotaz je dost dlouhej i pro zkušenýho programátora, nebo když je to možný i přímo v kódu.

    Zmatek v názvech je IMHO naprosto stejná chyba, jako špatně napsaný dotaz. Sice to sice samo o sobě žádnou "reálnou chybu" neudělá, ale generuje to chyby jak na běžícím pásu. Ono umění programovat je v podstatě umění dávat proměnným správný jména. Algoritmus, pokud věci správně pojmenuješ, se zpravidla vyloupne sám (trochu přehánim, ale ne moc).
    11.1.2014 23:29 problemovy
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    ok přejmenoval jsem to takhle
    
    UPDATE vzkazy_data as zobrazeno
    SET dorucenka = 'f'
    FROM (
         SELECT id_vazby, dorucenka, cas_zpravy, nick, id, text
         FROM vzkazy_data
         JOIN vzkazy_vazebni ON id_vzkazu = id_vazby
         JOIN uzivatele ON id_odesilatel = id
         WHERE (id_odesilatel = 1 AND id_adresat = 9)
              OR (id_odesilatel = 9 AND id_adresat = 1)
         ORDER BY cas_zpravy DESC
         LIMIT 10 OFFSET 0
         FOR UPDATE
         ) AS nezobrazeno
    RETURNING text,
              nezobrazeno.cas_zpravy,
              nezobrazeno.nick,
              nezobrazeno.id,
              nezobrazeno.dorucenka;
    
    a nestalo se nic slíbeného. neni mi to jasný.
    13.1.2014 02:02 Logik
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    No, furt je to divoký, že se nedivim, žes to nenašel. Jednak furt sou divoký názvy tabulek (proc je nepojmenujes napr. vzkazy a text_vzkazu), jednak i nazvy sloupcu: id_vazby ma byt id_vzkazy_vazebni? A odkud je id_vzkazu - to ma byt PK z tabulky vzkazy_data? Vzdyt tam neni poznat co patri kam.

    Standard, kterej hrozně pomáhá čitelnosti, je že PK tabulky má název id, FK do jiný tabulky id_*nazev_tabulky*. Fakt je to ve vysledku daleko citelnejsi, kdyz napises: JOIN vzkazy.id_text_vzkazu = text_vzkazu.id je na prvni pohled videt, jestli to je nebo neni dobre. Z tech divokejch nazvu ne.

    A chybí tam podmínka WHERE, což je klíčový, protože v tý je ta chyba.

    A taky moc nechápu, proč se aliasy jmenují zobrazeno a nezobrazeno. Zkus je pojmenovat tak, aby bylo jasné, co je to za kus dat. Rozhodne vnitrni select vybira data za nejakym ucelem (a rozhodne ne proto, aby je nezobrazil), vnejsimu selectu bych alias klidne vubec nedaval, defakto tim zduraznis, ktera tabulka je ta hlavni, tj. upravovana.

    Jinak bych doporučil, jestli máš patřičnou verzi postgresu, která to umí, dotaz napsat způsobem
    
    WITH updated AS
    (
    UPDATE ... 
    RETURNING id
    )
    SELECT blablabla FROM
     asdasdasd
     JOIN UPDATED ON vzkazy_data.id = updated.id
    
    
    Tedy oddělit část vybírající provádějící úpravu a část dělající select upravených dat, zvýšíš tím čitelnost - ale to jde tuším až od některý verze postgresu (tuší 9.1).

    Zkus to ještě jednou, nevěřím, že když to rozumně pojmenuješ a pak si dotaz ještě jednou projdeš, že to nenajdeš. Když i tak ne, tak Ti to samozřejmě prozradím :-) Ale co jsem se tím zaobíral, tak je to podle mě chyba fakt způsobená tím, že ses zamotal do názvů tabulek a sloupců a vážeš spolu někde něco, co nemáš.
    13.1.2014 12:47 Logik
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    Jeee, psal jsem to rychle v noci a jednu věc jsem zcela zmaten Tvoji "pakonvenci" (neber to prosim zle, jen se to fakt blbě čte) napsal blbě:

    Nejstandardnější konvence názvů je ne id_*nazev_tabulky*, ale *nazev_tabulky*_id tedy join vypadá ON vzkazy.text_vzkazu_id = text_vzkazu.id

    A opravdu IMHO když si to pojmenuješ dobře, tak na to musíš přijít, protože právě ta konvence výš zajišťuje, že jsou obě strany přiřazení, když vážeš tabulky (ať v ON nebo WHERE) defakto shodné a tak je dobře vidět, když se váže něco, co se vázat nemá...

    14.1.2014 22:42 WNJ
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    Doufam, ze to je jenom priklad, a to heslo ma salt.
    1.2.2014 11:23 problemovy
    Rozbalit Rozbalit vše Re: PostgreSQL update s limitem a vnořeným selectem
    Já to přestal řešit. uplně mě to přestalo bavit. stejně sem to nevyřešil.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.