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 16:33 | Zajímavý projekt

    Open-source trackball Ploopy Adept má novou verzi nazvanou A+. Stále jde o symetrický desktopový trackball s šasi z 3D tiskárny a firmwarem QMK. Novinkami jsou dvojice tlačítek, jimiž půjde také otáčet, a volitelná opěrka ruky. Funkcionalita firmwaru je rozšířena o gesta, vrstvy a možnost konfigurace za běhu. Schémata a kód jsou jako obvykle na GitHubu. A+ půjde předobjednat za 99 CAD (bez dopravy a cla/DPH).

    |🇵🇸 | Komentářů: 3
    včera 14:33 | IT novinky

    Prusa Research představil nové modely svých 3D tiskáren: Prusa XL+, CORE One+ (Gen 2) a CORE One L+.

    Ladislav Hagara | Komentářů: 1
    včera 13:33 | Nová verze

    Crown je multiplatformní open source herní engine. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT a GPLv3+. Byla vydána nová verze 0.64. Vyzkoušet lze online demo.

    Ladislav Hagara | Komentářů: 0
    včera 03:44 | Nová verze

    NVIDIA na konci ledna vydala v beta verzi nativního linuxového klienta své cloudové herní služby GeForce NOW. Včera oznámila ukončení beta verze a oficiální podporu Linuxu.

    Ladislav Hagara | Komentářů: 0
    včera 02:33 | Nová verze

    Byla vydána nová verze 3.5.0 nástroje pro inkrementální kopírování souborů rsync (Wikipedie). Přehled oprav a vylepšení v souboru NEWS. Řešeno je 33 zranitelností.

    Ladislav Hagara | Komentářů: 0
    včera 02:22 | Nová verze

    Organizace Apache Software Foundation (ASF) vydala verzi 31 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.

    Ladislav Hagara | Komentářů: 0
    13.8. 16:44 | IT novinky

    Firma IBM uvedla svůj první mikropočítač Personal Computer před 45 lety, v srpnu 1981. Základní konfigurace modelu 5150 za 1 565 tehdejších dolarů obsahovala desktop s Intel 8088 a 16KB RAM, Color Graphics Adapter a klávesnici. Právě klávesnice Model F/XT vybavené kapacitními spínači, vlivné a s převodníkem dodnes použitelné, připomíná sběratelský web Admiral Shark's Keyboards.

    |🇵🇸 | Komentářů: 0
    13.8. 14:22 | IT novinky

    Slovensko odhalilo ruské součástky ve dvou testovaných zařízeních na zjišťování přestupků v silničním provozu a označilo je za bezpečnostní riziko. S odvoláním na vyjádření slovenského Národního bezpečnostního úřadu (NBÚ) to včera oznámil ministr vnitra Matúš Šutaj Eštok. Zároveň ohlásil ukončení spolupráce svého úřadu s dodavatelem části uvedeného systému, slovenskou společností Soitron. Opozice, která na problematické kamery upozornila už dříve, vyzvala k odvolání ministra vnitra.

    Ladislav Hagara | Komentářů: 13
    13.8. 06:00 | IT novinky

    Dle plánu dnes ve 13:00 proběhne veřejný test eDokladů. Jeho cílem je ověřit připravenost aplikace a související infrastruktury na vysokou souběžnou zátěž před podzimními komunálními volbami.

    Ladislav Hagara | Komentářů: 26
    13.8. 04:11 | Nová verze

    Byla vydána nová verze 3.47 frameworku Flutter (Wikipedie) pro vývoj mobilních, webových i desktopových aplikací a nová verze 3.13 souvisejícího programovacího jazyka Dart (Wikipedie).

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (18%)
     (30%)
     (6%)
     (6%)
     (2%)
     (15%)
     (23%)
    Celkem 2388 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník


    Dotaz: PlPgSql Select into Problém s TimeStamp

    24.6.2023 19:46 ZAH | skóre: 43 | blog: ZAH
    PlPgSql Select into Problém s TimeStamp
    Přečteno: 1681×
    V následující funkce proběhne OK v případě, že ve složeném typu (uvedený dále ) je položka "dateUpdate" null. Po jejím nastavení server vyhodí chybu ERROR" Invalid input syntax for type timestamp.

    Select sloupce proběhne OK i s nastavenou hodnotou. Napadá někoho co by mohlo pomoct.
    CREATE OR REPLACE FUNCTION accounting.fu_getflags_10(
    	indoc ismaster."T_DocumentId")
        RETURNS ismaster."T_DocumentFlags"
        LANGUAGE 'plpgsql'
        COST 100
        VOLATILE PARALLEL UNSAFE
    AS $BODY$
    DECLARE flags ismaster."T_DocumentFlags";
    BEGIN 
     IF EXISTS (SELECT FROM accounting.accdocheader WHERE "docId" = indoc) THEN
      SELECT "docFlags" INTO flags FROM accounting.accdocheader WHERE "docId" = indoc;
      ELSE 
      flags := ismaster.fu_default_document_flags();
      END IF;
      RETURN flags;
    END;
    $BODY$;
    
    
    CREATE TYPE ismaster."T_DocumentFlags" AS
    (
    	"dateNew" ismaster."D_DateNew",
    	"dateUpdate" timestamp without time zone,
    	"dateOwner" timestamp without time zone,
    	"userNew" ismaster."D_IsUserId",
    	"userUpdate" ismaster."D_IsUserId",
    	"userOwner" ismaster."D_IsUserId",
    	"onlyAuthor" boolean,
    	"isAccount" boolean,
    	"isFinality" boolean,
    	"isArch" boolean,
    	"noStorno" boolean,
    	"noDelete" boolean
    );
    
    
    ZAH

    Řešení dotazu:


    Odpovědi

    24.6.2023 22:09 X
    Rozbalit Rozbalit vše Re: PlPgSql Select into Problém s TimeStamp
    Po jejím nastavení server vyhodí chybu ERROR
    A mohl bych to nastaveni(kde a jak) videt?
    25.6.2023 02:06 ZAH | skóre: 43 | blog: ZAH
    Rozbalit Rozbalit vše Re: PlPgSql Select into Problém s TimeStamp
    Položka , která vyvolá chybu
     ("2023-06-24 13:51:48.405636","2023-06-24 18:58:39.991784",,"zah       ","zah       ",,,,,,,)
    
    Před nastavením hodnoty projde OK.
    ("2023-06-24 13:50:42.806875",,,"zah       ",,,,,,,,)
    
    Nastavení se provede v trigru pomoci now() po změně řádku.
        .......
        .....
        NEW."docFlags"."dateUpdate" := now();
        return NEW;
    
    25.6.2023 11:59 X
    Rozbalit Rozbalit vše Re: PlPgSql Select into Problém s TimeStamp
    Mas definovano jako:
    "dateUpdate" timestamp without time zone
    ale, now() vraci timestamp with time zone

    ?
    25.6.2023 14:45 ZAH | skóre: 43 | blog: ZAH
    Rozbalit Rozbalit vše Re: PlPgSql Select into Problém s TimeStamp
    Takže, tím now() to nebude, nahradil jsem ho LOCALTIMESTAMP bez výsledku.

    Zkusil jsem SELECT INTO nahradit SQL funkcí a ejhle ono to funguje

    Nejprve funkce
    CREATE OR REPLACE FUNCTION accounting.fu_getflags_10(
    	indoc ismaster."T_DocumentId")
        RETURNS ismaster."T_DocumentFlags"
        LANGUAGE 'sql'
        COST 100
        VOLATILE PARALLEL UNSAFE
    AS $BODY$
    SELECT "docFlags" FROM accounting.accdocheader 
         WHERE  "docId" =  indoc ;
    $BODY$;
    
    Problémová část kódu po změně (místo INTO přiřazení)
    flags := accounting.fu_getflags_10(NEW."docId");
     -- pro vlozeni radku musi hlavicka povolit update
      IF NOT ismaster.fu_docflags_can_update(flags) THEN 
        RETURN null;	
    	   END IF;
    
    Čím dál více se přikláním k tomu, že v pgplsql dělám/je nějaká chyba při přiřazování komplexních typů. Objevil se další problém s podobným kódem . Zde vyhodí chybu ERROR" Invalid input syntax for type double precission
    DECLARE flags ismaster."T_DocumentFlags";
            debcr ismaster."T_DebitCredit";
    begin
    .....
    .....
     IF  NEW."rowNum" = 1 AND NEW.debitcredit IS null THEN 
      SELECT debitcredit INTO debcr FROM accounting.accdocheader 
          WHERE "docId" = NEW."docId";
    	  NEW.debitcredit := ismaster.fu_change_debitcredit(debcr);
     END IF;
    .....
    .....
    
    Definice typu
    CREATE TYPE ismaster."T_DebitCredit" AS
    (
    	debit ismaster."D_AccountValue",
    	credit ismaster."D_AccountValue"
    );
    
    25.6.2023 23:53 okbobcz | skóre: 8
    Rozbalit Rozbalit vše Re: PlPgSql Select into Problém s TimeStamp
    Můžeš někam hodit nějaký krátký reproducer? Může tam být buga. Update atributu sloupce kompozitního typu je v Postgresu podporovaný relativně krátce. Dřive se bokem musel vytvořit celý kompozit a tím pak přepálit původní kompozitní hodnotu. Mne prace s kompozitem na 16tce funguje bez problemu (a urcite by fungovala i v 15tce pripadne 14tce):
    (2023-06-25 23:51:46) postgres=# \d foot
                     Composite type "public.foot"
    ┌────────┬───────────────────┬───────────┬──────────┬─────────┐
    │ Column │       Type        │ Collation │ Nullable │ Default │
    ╞════════╪═══════════════════╪═══════════╪══════════╪═════════╡
    │ a      │ date              │           │          │         │
    │ b      │ character varying │           │          │         │
    │ c      │ date              │           │          │         │
    └────────┴───────────────────┴───────────┴──────────┴─────────┘
    
    (2023-06-25 23:51:57) postgres=# \d xx
                           Table "public.xx"
    ┌────────┬───────────────────┬───────────┬──────────┬─────────┐
    │ Column │       Type        │ Collation │ Nullable │ Default │
    ╞════════╪═══════════════════╪═══════════╪══════════╪═════════╡
    │ id     │ integer           │           │          │         │
    │ f      │ foot              │           │          │         │
    │ d      │ character varying │           │          │         │
    └────────┴───────────────────┴───────────┴──────────┴─────────┘
    
    (2023-06-25 23:52:01) postgres=# do $$
    declare x xx;
    begin
      x := (1, null, 'ahoj');
      x.f.a := now();
      x.f.b := 'nazdar';
      x.f.c := current_date;
      raise notice '% %', x.f, (x.f).c;
    end;
    $$;
    NOTICE:  (2023-06-25,nazdar,2023-06-25) 2023-06-25
    DO
    
    
    26.6.2023 09:02 ZAH
    Rozbalit Rozbalit vše Re: PlPgSql Select into Problém s TimeStamp
    Včera jsem našel odkaz, který obdobný problém popisuje. Jde skutečně o problém načtení komplexního typu v plpgsql do proměnné. Je rozdíl mezi funkcí plpgsql a sql funkcí.

    Obejití problému je poměrně jednoduché načíst řádek tabulky tabulka%ROWTYPE a pak pracovat s načtenou řádkou. Obejití jsou možné i jiné, např. přes text. Odpoledne připojím ještě nalezený odkaz na popis problému. ZAH
    26.6.2023 15:11 ZAH | skóre: 43 | blog: ZAH
    Rozbalit Rozbalit vše Re: PlPgSql Select into Problém s TimeStamp
    Příloha:
    Přikládám export testu databáze s chybou ve funkci tes, Pro její reprodukování mě postačí SELECT public.test().

    Vyplyvne chybu
    ERROR:  invalid input syntax for type date: "(2023-01-01,Test,2022-11-11)"
    CONTEXT:  PL/pgSQL funkce test() řádek 3 na SQL příkaz
    SQL stav: 22007
    
    Řešení 1× (ZAH (tazatel))
    27.6.2023 16:50 okbobcz | skóre: 8
    Rozbalit Rozbalit vše Re: PlPgSql Select into Problém s TimeStamp
    Tohle je fíčura a ne bug :-). Na tohle už jsem narazil několikrát a ve své implementaci PL/pgPSM jsem to i řešil a vyřešil. V PL/pgSQL to se to ale změnit (opravit) nedá (kvůli zpětné kompatibilitě), a také aby se nezanášelo víc kódu do jedné relativně krátké, ale nyní už docela komplikované rutiny. I když hlavní problém je zpětná kompatibilita (a ono by to stejně nešlo vyřešit na 100%).

    Tam je problém s vícenásobným zanořením. Dobře je to vidět, pokud si výsledek uložíte do proměnné typu record a zobrazíte.
    CREATE OR REPLACE FUNCTION public.test()
     RETURNS boolean
     LANGUAGE plpgsql
    AS $function$
    DECLARE r record;
    BEGIN
      SELECT fx INTO r FROM table1 WHERE id = 5;
      RAISE NOTICE '% %', r, row_to_json(r); 
      RETURN true; 
    END;$function$;
    CREATE FUNCTION
    (2023-06-27 16:11:42) postgres=# SELECT public.test();
    NOTICE:  ("(2023-01-01,Test,2022-11-11)") {"fx":{"a":"2023-01-01","b":"Test","c":"2022-11-11"}}
    ┌──────┐
    │ test │
    ╞══════╡
    │ t    │
    └──────┘
    (1 row)
    
    Jde o to, že výsledkem dotazu je n-tice hodnot, která se uloží do jiné n-tice proměnných nebo kompozitu (což je dnes už něco jiného, ale dříve to byla zase n-tice proměnných) tj (c1,c2,c3) -> (var1,var2,var3), (c1,c2,c3)->(f1,f2,f3). Interně výsledkem každého dotazu je kompozit. Pokud je nějaký sloupec v dotazu kompozit, pak je ten kompozit zanořený, a tudíž vy jej nemůžete přiřadit proměnné kompozitního typu, která nečeká ještě další úroveň. Ve vašem případě se Postgres snaží přiřadit první sloupec výsledku první položce kompozitu - z čehož pak plyne ta zmatečná hláška.

    Co můžete udělat?

    a) Před přiřazením zdrojový kompozit rozbalit. Pak výsledek bude sedět cíli.
    CREATE OR REPLACE FUNCTION public.test()
     RETURNS boolean
     LANGUAGE plpgsql
    AS $function$
    DECLARE ff foot;
    BEGIN
      -- SELECT (fx).a, (fx).b, (fx).c INTO ff FROM table WHERE id = 5 -- je taky ok
      SELECT (fx).* INTO ff FROM table1 WHERE id = 5; 
      RETURN true; 
    END;$function$;
    
    b) Použít přiřazovací příkaz a ANSI zápis
    CREATE OR REPLACE FUNCTION public.test()
     RETURNS boolean
     LANGUAGE plpgsql
    AS $function$
    DECLARE ff foot;
    BEGIN
      ff := (SELECT fx FROM table1 WHERE id = 5); 
      RETURN true; 
    END;$function$;
    
    Jádro pudla je v designu SQL, které s kompozitními typy vůbec nepočítá (alespoň v těch nejstarších variantách), a ve chvíli, kdy se do tabulek ukládají kompozitní hodnoty, tak některé syntaxe jsou v kolizi. Navíc PL/pgSQL je mix dvou absolutně rozdílných jazyků - SQL a ADA (pro PL/pgSQL hodně redukovaná ADA). Není to jeden jazyk. A občas někde ty švy (kolize) jsou vidět.
    27.6.2023 18:42 ZAH | skóre: 43 | blog: ZAH
    Rozbalit Rozbalit vše Re: PlPgSql Select into Problém s TimeStamp
    Dík, nějak jsem se k tomu také postupně dobral, ale tys to shrnul překrásně. Není co dodat.

    ZAH

    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.