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 11:11 | Nová verze

    UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala beta verzi Ubuntu Touch 24.04-2.0. Nová verze již počítá s výřezy pro fotoaparát (notch) a zaoblenými rohy displeje. Webový prohlížeče Morph přešel z Chromia 87 na Chromium 134. Do shellu Lomiri byl přidán editor snímků obrazovky.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Komunita

    V Praze probíhá Flock 2026, tj. konference pro přispěvatele a příznivce Fedory. Přednášky lze sledovat také na YouTube.

    Ladislav Hagara | Komentářů: 0
    dnes 04:00 | Nová verze

    Node-RED (Wikipedie, GitHub), webová aplikace postavená na Node.js pro vizuální programování a propojování hardwarových zařízení, API a online služeb, byl vydán ve verzi 5.0. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    dnes 02:00 | Nová verze

    Byla vydána nová verze 3.27.0 FreeRDP, tj. svobodné implementace protokolu RDP (Remote Desktop Protocol). Opraveno bylo 5 zranitelností.

    Ladislav Hagara | Komentářů: 0
    včera 23:11 | Komunita

    Řídící výbor GCC schválil záměr do GCC začlenit backend WebAssembly.

    Ladislav Hagara | Komentářů: 2
    14.6. 21:00 | Nová verze

    Po 9 týdnech vývoje od vydání Linuxu 7.0 oznámil Linus Torvalds vydání Linuxu 7.1. Přehled novinek a vylepšení na LWN.net: první a druhá polovina začleňovacího okna a časem také na Linux Kernel Newbies.

    Ladislav Hagara | Komentářů: 0
    14.6. 13:33 | Zajímavý software

    Cheat Engine (Wikipedie) je s verzí 7.7 k dispozici už také pro Linux. Jedná se o proprietární skener/debugger paměti používaný především k cheatování v počítačových hrách.

    Ladislav Hagara | Komentářů: 0
    13.6. 15:22 | IT novinky

    Vláda USA nařídila společnosti Anthropic pozastavit přístup k modelům Fable 5 a Mythos 5 pro všechny cizince, včetně zaměstnanců Anthropicu.

    Ladislav Hagara | Komentářů: 8
    13.6. 02:22 | Nová verze

    Společnost Murena představila (YouTube) novou verzi 4.0 mobilního operačního systému /e/OS (Wikipedie) založeného na Androidu a LineageOS bez aplikací a služeb od Googlu.

    Ladislav Hagara | Komentářů: 0
    12.6. 16:33 | Bezpečnostní upozornění

    V Arch User Repository (AUR) bylo kompromitováno přes 400 opomíjených balíčků (jejich seznam). Útočník do nich začlenil škodlivý npm balíček atomic-lockfile, který krade citlivá data uživatelů. Publikována byla předběžná analýza spouštěného malwaru deps.

    Ladislav Hagara | Komentářů: 17
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (8%)
     (2%)
     (16%)
     (31%)
     (3%)
     (6%)
     (3%)
     (15%)
     (26%)
    Celkem 1914 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: Postgre a mazání duplicit pomocí common table expressions

    2.11.2010 08:06 jeleniste | skóre: 13 | blog: Prokustovo lože
    Postgre a mazání duplicit pomocí common table expressions
    Přečteno: 400×
    Mám následující problém: Na MSSQL s úspěchem používám: ; with cte as ( select *, row_number() over(order by id, partition by id, a, b, c) pid from table )

    delete from cte where pid!=0;

    --finta obslehnuta z netu, zdroj si nepamatuju

    Je to idealni na odstaraneni dupli zaznamu (napriklad opakovane spusteny insert) Na postgre mi to nefunguje, nechce me dovolit mazat z cte

    Pominme, ze mam mit v tabulce Pk, kterej mi nedovoli vlozit 2X tyz zaznam a ze nejdou veci takhle prenaset mezi ruznejma SQL serverama.

    Jde to nejak obejít, dá se v pg nejak mazat z cte??

    Dík Je.
    Nejsem blbý, jen se hloupě ptám

    Řešení dotazu:


    Odpovědi

    2.11.2010 08:20 jos
    Rozbalit Rozbalit vše Re: Postgre a mazání duplicit pomocí common table expressions
    ještě to tam přijoinovat?
    with cte as (
      select id, row_number() over(order by id, partition by id, a, b, c) pid
      from table
    )
    delete t
    from table as t
    inner join cte on cte.id = t.id
    where pid <> 0;
    
    btw to cte je tam zbytečný
    delete t
    from table as t
    inner join (
      select id, row_number() over(order by id, partition by id, a, b, c) pid
      from table
    ) as x on x.id = t.id
    where x.pid <> 1
    
    2.11.2010 09:21 jeleniste | skóre: 13 | blog: Prokustovo lože
    Rozbalit Rozbalit vše Re: Postgre a mazání duplicit pomocí common table expressions
    Bezva, dík za snahu.

    Chm, jestli to chápu, tak si moc nepomůžu, u dupli záznamů je id furt to samý, tj, když to připojim, tak ty záznamy smáznu oba. Tudy cesta nevede.

    Je.
    Nejsem blbý, jen se hloupě ptám
    2.11.2010 09:37 jos
    Rozbalit Rozbalit vše Re: Postgre a mazání duplicit pomocí common table expressions
    jo aha, sorry, to mi nedošlo
    2.11.2010 09:43 jeleniste | skóre: 13 | blog: Prokustovo lože
    Rozbalit Rozbalit vše Re: Postgre a mazání duplicit pomocí common table expressions
    V poho, nepustil sem to do vostrejch dat :)
    Nejsem blbý, jen se hloupě ptám
    2.11.2010 10:30 jos
    Rozbalit Rozbalit vše Re: Postgre a mazání duplicit pomocí common table expressions
    V poho, nepustil sem to do vostrejch dat :)
    bez rollbacku ani ránu )

    druhej pokus:
    delete t
    from table as t
    inner join (
      select id, row_number() over(order by id, partition by id, a, b, c) pid
      from table
    ) as x on x.id = t.id
    inner join (
      select id, row_number() over(order by id, partition by id, a, b, c) pid
      from table
    ) as y on y.id = x.id and y.pid < x.pid
    where y.pid <> 0
    
    za předpokladu, že databáze ví který (fyzický) záznamy to vlastně joinuje (na MSSQL se mi to experimentálně potvrdit nepodařilo, ale asi dělam něco blbě)

    takže řešením (bez OIDů a CTIDů) by bylo přidat soupec, oupdatovat pomocí ROW_NUMBER a pak nemazat nejnižší hodnotu
    2.11.2010 10:49 jeleniste | skóre: 13 | blog: Prokustovo lože
    Rozbalit Rozbalit vše Re: Postgre a mazání duplicit pomocí common table expressions
    takže řešením (bez OIDů a CTIDů) by bylo přidat soupec, oupdatovat pomocí ROW_NUMBER a pak nemazat nejnižší hodnotu

    Mě použití OIDů a CTIDů nevadí. Celej prblm se točí kolem unikátního označení záznamu, který v MSSQL neni. Na tom řešení s cte je elegantní, právě to, že se žádnej sloupec nemusí přidávat, tim, že se maže z CTE. Já bych opustil prblm s duplicitama, způsobů, jak ho pořešit, je evidentně celá přehršel. Spíš mě zajímá rozdíl v možnostech CTE v POSTGRESQL a MSSQL, konkrétně proč to v tom POSTGRE nejde, jde někde povolit v POSTGRE mazání z CTE?? Tenhle konkrétní příklad je v zásadě blbej, protože v podstatě jde o sofistikované řešení prblmu, kterej se na Postgre nevyskytuje, protože má unikátně identifikovatelný řádky sám o sobě.

    Nicméně mazání z CTE mi přijde jako poměrně elegantní fičura, která má i jiný využití, než mazání duplicit.

    Je.
    Nejsem blbý, jen se hloupě ptám
    2.11.2010 09:11 jeleniste | skóre: 13 | blog: Prokustovo lože
    Rozbalit Rozbalit vše Re: Postgre a mazání duplicit pomocí common table expressions
    našel jsem řešení tady http://www.postgres.cz/index.php/PostgreSQL_SQL_Tricks#Removing_of_duplicate_rows

    nicméně by mě stejně zajímalo, jak je to s tim CTE.
    Nejsem blbý, jen se hloupě ptám
    okbob avatar 2.11.2010 21:38 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: Postgre a mazání duplicit pomocí common table expressions
    DML operace z CTE budou podporovany v 9.1.

    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.