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í
×
    dnes 12:22 | Nová verze

    Javascriptová knihovna jQuery (Wikipedie) oslavila 20. narozeniny, John Resig ji představil v lednu 2006 na newyorském BarCampu. Při této příležitosti byla vydána nová major verze 4.0.0.

    Ladislav Hagara | Komentářů: 0
    dnes 01:33 | Zajímavý projekt

    Singularity je rootkit ve formě jaderného modulu (Linux Kernel Module), s otevřeným zdrojovým kódem dostupným pod licencí MIT. Tento rootkit je určený pro moderní linuxová jádra 6.x a poskytuje své 'komplexní skryté funkce' prostřednictvím hookingu systémových volání pomocí ftrace. Pro nadšence je k dispozici podrobnější popis rootkitu na blogu autora, případně v článku na LWN.net. Projekt je zamýšlen jako pomůcka pro bezpečnostní experty a výzkumníky, takže instalujte pouze na vlastní nebezpečí a raději pouze do vlastních strojů 😉.

    NUKE GAZA! 🎆 | Komentářů: 0
    včera 21:22 | Zajímavý projekt

    Iconify je seznam a galerie kolekcí vektorových open-source ikon, ke stažení je přes 275000 ikon z více jak dvou set sad. Tento rovněž open-source projekt dává vývojářům k dispozici i API pro snadnou integraci svobodných ikon do jejich projektů.

    NUKE GAZA! 🎆 | Komentářů: 1
    včera 03:33 | IT novinky

    Dle plánu certifikační autorita Let's Encrypt nově vydává také certifikáty s šestidenní platností (160 hodin) s možností vystavit je na IP adresu.

    Ladislav Hagara | Komentářů: 8
    17.1. 14:44 | Nová verze

    V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 14.0 (Mastodon). Forgejo je fork Gitei.

    Ladislav Hagara | Komentářů: 4
    17.1. 13:11 | Zajímavý projekt

    Just the Browser je projekt, 'který vám pomůže v internetovém prohlížeči deaktivovat funkce umělé inteligence, telemetrii, sponzorovaný obsah, integraci produktů a další nepříjemnosti' (repozitář na GitHubu). Využívá k tomu skrytá nastavení ve webových prohlížečích, určená původně pro firmy a organizace ('enterprise policies'). Pod linuxem je skriptem pro automatickou úpravu nastavení prozatím podporován pouze prohlížeč Firefox.

    NUKE GAZA! 🎆 | Komentářů: 3
    16.1. 16:44 | Nová verze

    Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.18. Díky 174 přispěvatelům.

    Ladislav Hagara | Komentářů: 2
    16.1. 15:11 | IT novinky

    Miliardy korun na digitalizaci služeb státu nestačily. Stát do ní v letech 2020 až 2024 vložil víc než 50 miliard korun, ale původní cíl se nepodařilo splnit. Od loňského února měly být služby státu plně digitalizované a občané měli mít právo komunikovat se státem digitálně. Do tohoto data se povedlo plně digitalizovat 18 procent agendových služeb státu. Dnes to uvedl Nejvyšší kontrolní úřad (NKÚ) v souhrnné zprávě o stavu digitalizace v Česku. Zpráva vychází z výsledků víc než 50 kontrol, které NKÚ v posledních pěti letech v tomto oboru uskutečnil.

    Ladislav Hagara | Komentářů: 26
    16.1. 13:55 | IT novinky

    Nadace Wikimedia, která je provozovatelem internetové encyklopedie Wikipedia, oznámila u příležitosti 25. výročí vzniku encyklopedie nové licenční dohody s firmami vyvíjejícími umělou inteligenci (AI). Mezi partnery encyklopedie tak nově patří Microsoft, Amazon a Meta Platforms, ale také start-up Perplexity a francouzská společnost Mistral AI. Wikimedia má podobnou dohodu od roku 2022 také se společností Google ze skupiny

    … více »
    Ladislav Hagara | Komentářů: 0
    16.1. 02:22 | Nová verze

    D7VK byl vydán ve verzi 1.2. Jedná se o fork DXVK implementující překlad volání Direct3D 5, 6 a 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (5%)
     (0%)
     (9%)
     (19%)
     (3%)
     (5%)
     (2%)
     (11%)
     (39%)
    Celkem 514 hlasů
     Komentářů: 14, poslední včera 10:22
    Rozcestník

    Dotaz: Postgresql - obmedzenie počtu referencií

    AraxoN avatar 10.8.2007 17:11 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Postgresql - obmedzenie počtu referencií
    Přečteno: 579×

    Zdravím.

    Mám Postgres 8.0.13, v ňom databázu s takýmito tabuľkami:

    CREATE TABLE uzivatel (
      id SERIAL NOT NULL,
      meno VARCHAR NOT NULL,
      PRIMARY KEY (id)
    );
    INSERT INTO uzivatel (meno) VALUES ('Jozko');
    -- dostane id = 1
    INSERT INTO uzivatel (meno) VALUES ('Ferko');
    -- dostane id = 2
    INSERT INTO uzivatel (meno) VALUES ('Samko');
    -- dostane id = 3
    
    CREATE TABLE uloha (
      id SERIAL NOT NULL,
      zadavatel INT REFERENCES uzivatel (id) ON UPDATE CASCADE ON DELETE SET NULL,
      riesitel INT REFERENCES uzivatel (id) ON UPDATE CASCADE ON DELETE SET NULL,
      kontrolor INT REFERENCES uzivatel (id) ON UPDATE CASCADE ON DELETE SET NULL,
    -- plus nejake dalsie nepodstatne stlpce
      PRIMARY KEY (id)
    );
    INSERT INTO uloha (zadavatel, riesitel, kontrolor) VALUES (1,NULL,NULL);
    INSERT INTO uloha (zadavatel, riesitel, kontrolor) VALUES (2,2,NULL);
    INSERT INTO uloha (zadavatel, riesitel, kontrolor) VALUES (3,3,3);

    T.j. sú tam užívatelia a úlohy k nim. Eviduje sa kto úlohu zadal, kto ju rieši (resp. riešil) a kto ju skontroloval. Je to ošetrené referenciami tam, aby zmazanie užívateľa nastavilo v príslušnom stĺpci NULL. Problém nastáva, ak vo všetkých 3 stĺpcoch je tá istá hodnota (ten istý užívateľ). Pri pokuse o vymazanie takého užívateľa sa to zasekne, namiesto toho aby nastavilo všade NULL:

    araxon=# DELETE FROM uzivatel WHERE id=1; -- toto je v pohode
    DELETE 1
    araxon=# DELETE FROM uzivatel WHERE id=2; -- toto je este tiez v pohode
    DELETE 1
    araxon=# DELETE FROM uzivatel WHERE id=3; -- a toto uz je problem
    ERROR:  insert or update on table "uloha" violates foreign key constraint "uloha_kontrolor_fkey"
    DETAIL:  Key (kontrolor)=(3) is not present in table "uzivatel".
    CONTEXT:  SQL statement "UPDATE ONLY "public"."uloha" SET "riesitel" = NULL WHERE "riesitel" = $1"

    T.j. ak sú referencie na užívateľa len v jednom či dvoch stĺpcoch, tak to ide, ale v troch a viac sa to už sekne. Vyzerá to, že pri mazaní toho tretieho užívateľa to opraví prvé dve referencie (zadavatel, riesitel) a potom sa pokúsi užívateľa vymazať nehľadiac na tretiu referenciu (kontrolor). Bude to najskôr nejaký limit, ktorý je v Postgresi zakomponovaný natvrdo. Ak sa na ten istý záznam odkazujú len ľubovoľné 2 stĺpce, tak to ide bez problémov, ak ich je viac, tak to už zlyhá. Nenašiel som k tomuto nič v dokumentácii, ani na fórach, tak sa pýtam: nestretol sa s tým niekto? Viem, že je možné zmeniť štruktúru aplikácie, ale toto je len príklad - v skutočnosti to máme zložitejšie, týka sa to viacerých tabuliek a je to nasadené kade-tade. Tento problém nie je vôbec častý, akurát trochu nahlodáva moju vieru v to, že všetko vždy bude fungovať tak ako má.

    Otázka teda znie: dá sa tento limit nastaviť v konfigurácii, alebo pri kompilácii postgresu? Rád by som to vyriešil bez toho aby trebalo meniť aplikáciu - o referenčnú integritu sa má starať databáza, a nie že to bude kontrolovať ešte aj aplikácia.


    Řešení dotazu:


    Odpovědi

    10.8.2007 17:24 johniez | skóre: 17 | blog: xyz | Praha
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    je to divny, na prvni pohled by to melo slapat..

    nejhur tam dej misto tech tri references triger na tabulku uzivatel ve kterym provedes update tabulky uloha..
    AraxoN avatar 11.8.2007 12:22 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    Triggery som ešte nerobil... Naštudujem a skúsim. Zatiaľ dík.
    AraxoN avatar 11.8.2007 12:56 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    Nie je to dobré: trigger by sa musel spustiť ešte pred zmazaním užívateľa. Samotné zmazanie sa ale môže nevykonať kvôli niečomu inému (napríklad ON DELETE RESTRICT v nejakej úplne inej tabuľke, ktorá sa na užívateľa odkazuje), takže by sa mohlo stať, že v jeho úlohách už nastavím NULL, ale nakoniec ho vôbec nevymažem...
    11.8.2007 14:53 johniez | skóre: 17 | blog: xyz | Praha
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    after delete trigger...

    a kdyz bych chtel mit jistotu udelam na mazani proceduru, ktera to muze kontrolovat..
    AraxoN avatar 11.8.2007 16:10 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    keď sa to má spustiť až po vymazaní, tak sa to nespustí vôbec, lebo k vymazaniu ani nedôjde... či nie?
    11.8.2007 09:08 Pavel Stehule
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    tohle by fungovat melo, zkusim se poptat v konferenci. Jinak muzete zkusit deferred pravidla. Pri ni se referencni integrita kontroluje az v okamziku commitu.
    11.8.2007 11:26 Pavel Stehule
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    Je zajimavy, ze tohle projde
    CREATE TABLE users (
      id SERIAL NOT NULL,
      name VARCHAR NOT NULL,
      PRIMARY KEY (id)
    );
    
    INSERT INTO users VALUES (1, 'Jozko');
    INSERT INTO users VALUES (2, 'Ferko');
    INSERT INTO users VALUES (3, 'Samko');
    
    CREATE TABLE tasks (
      id SERIAL NOT NULL,
      owner INT REFERENCES  users (id) ON UPDATE CASCADE ON DELETE SET NULL,
      worker INT REFERENCES users (id) ON UPDATE CASCADE ON DELETE SET NULL,
      checked_by INT REFERENCES users (id) ON UPDATE CASCADE ON DELETE SET NULL,
      PRIMARY KEY (id)
    );
    INSERT INTO tasks VALUES (1,NULL,NULL);
    INSERT INTO tasks VALUES (2,2,NULL);
    INSERT INTO tasks VALUES (3,3,3);
    
    DELETE FROM users WHERE id = 1; -- works simple
    DELETE FROM users WHERE id = 2; -- works ok
    DELETE FROM users WHERE id = 3; -- doesn't work, why
    
    11.8.2007 17:04 Pavel Stehule
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    Tohle jsem spatne prepsal, sorry. Kdybych to prepsal korektne, tak to nebude fungovat taky.
    11.8.2007 17:17 Pavel Stehule
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    Sice netusim, proc to projde u dvou sloupcu a uz to neprojde u tri, nicmene pomouhou tzv, odlozene podminky (jak uz jsem psal) deferred constraints. Nasledujici test projde:
    CREATE TABLE users (
     id integer NOT NULL,
     name VARCHAR NOT NULL,
     PRIMARY KEY (id)
    );
    
    INSERT INTO users VALUES (1, 'Jozko');
    INSERT INTO users VALUES (2, 'Ferko');
    INSERT INTO users VALUES (3, 'Samko');
    
    CREATE TABLE tasks (
     id integer NOT NULL,
     owner INT REFERENCES  users (id) ON UPDATE CASCADE ON DELETE SET NULL INITIALLY DEFERRED,
     worker INT REFERENCES users (id) ON UPDATE CASCADE ON DELETE SET NULL INITIALLY DEFERRED,
     checked_by INT REFERENCES users (id) ON UPDATE CASCADE ON DELETE SET NULL INITIALLY DEFERRED,
     PRIMARY KEY (id)
    );
    INSERT INTO tasks VALUES (1,1,NULL,NULL);
    INSERT INTO tasks VALUES (2,2,2,NULL);
    INSERT INTO tasks VALUES (3,3,3,3);
    
    DELETE FROM users WHERE id = 1; -- works simple
    DELETE FROM users WHERE id = 2; -- works ok
    DELETE FROM users WHERE id = 3; -- works too
    
    Docela bych rekl, ze se jedna o bug postgresql (vlastnost), resp. nedomyslenost pri vyhodnocovani podminek.

    Pavel
    AraxoN avatar 11.8.2007 17:37 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    Super, ďakujem! S INITIALLY DEFERRED to chodí.
    14.8.2007 22:50 Pavel Stehule
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    tak 100% se jedna o bug. Patch s opravou je k dispozici na http://archives.postgresql.org/pgsql-patches/2007-08/msg00104.php a pokud se nic nestane, tak v dalsich minoritnich verzich tato chyba bude opravena.

    Pavel
    AraxoN avatar 14.8.2007 23:22 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Postgresql - obmedzenie počtu referencií
    Dobrá práca! Moja obľúbená databáza je tak zase o čosi spoľahlivejšia.

    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.