Multiplatformní emulátor terminálu Ghostty byl vydán ve verzi 1.3 (𝕏, Mastodon). Přehled novinek a vylepšení v poznámkách k vydání.
Byla vydána nová verze 14.4 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.
Databáze DuckDB (Wikipedie) byla vydána ve verzi 1.5.0. S kódovým názvem Variegata (husice rajská). Přináší řadu vylepšení, včetně nového ergonomičtějšího CLI klienta nebo podporu pro typ VARIANT a vestavěný typ GEOMETRY.
V pátek 6. a sobotu 7. března proběhl v pražském sídle Nejvyššího kontrolního úřadu (NKÚ) Hackathon veřejné správy 7.1. Publikovány byly vytvořené aplikace. V kategorii projektů rozvíjených z krajského kola zvítězil tým „Mackokládi“. Čtyři středoškoláci ze Dvora Králové uspěli s aplikací KompaZ. Jde o digitálního průvodce, který pomůže s rychlou a srozumitelnou orientací v životních i krizových situacích „krok za krokem“. Aplikace
… více »QGIS, svobodný desktopový GIS, byl vydán v nové hlavní verzi 4.0. Změny zahrnují několik nových analytických a editačních funkcí, rozšíření podpory 3D, více možností úprav uživatelského rozhraní či mnoho dalších zlepšení použitelnosti. Řada 3.44 má aktualizace plánovány do září.
Dan Blanchard vydal knihovnu pro Python chardet v nové verzi 7.0.0. S novou verzí byla knihovna přelicencována z LGPL na MIT. Souhlasili s tím všichni přispěvatelé? Dan Blanchard souhlasy vůbec neřešil. Zaúkoloval umělou inteligenci (Claude), aby knihovnu zcela přepsala a výslovně jí nařídil, aby nepoužila žádný LGPL kód. Dan Blanchard tvrdí, že se jedná o clean room design. Protistrana argumentuje, že umělá inteligence byla trénována
… více »Andy Nguyen si na svou herní konzoli PlayStation 5 (PS5) pomocí exploitu Byepervisor nainstaloval Linux (Ubuntu). V Linuxu si spustil Steam a PS5 tak proměnil v Steam Machine. Na PS5 může hrát hry, které jsou vydané pouze pro PC a jsou na Steamu [Tom's Hardware].
Správce sbírky fotografií digiKam byl vydán ve verzi 9.0.0. Jedná se o větší vydání provázené aktualizacemi knihoven. Mnoho dílčích změn se vedle oprav chyb týká uživatelského rozhraní, mj. editace metadat.
Byla vydána verze 2026 distribuce programu pro počítačovou sazbu TeX s názvem TeX Live (Wikipedie). Přehled novinek v oficiální dokumentaci.
Jihokorejská Národní daňová služba (NTS) zabavila kryptoměnu Pre-retogeum (PRTG) v hodnotě 5,6 milionu dolarů. Pochlubila se v tiskové zprávě, do které vložila fotografii zabavených USB flash disků s kryptoměnovými peněženkami spolu se souvisejícími ručně napsanými mnemotechnickými obnovovacími frázemi. Krátce na to byla kryptoměna v hodnotě 4,8 milionu dolarů odcizena. O několik hodin ale vrácena, jelikož PRTG je extrémně nelikvidní, s denním objemem obchodování kolem 332 dolarů a zalistováním na jediné burze, MEXC [Bitcoin.com].
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:
Po jejím nastavení server vyhodí chybu ERRORA mohl bych to nastaveni(kde a jak) videt?
("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;
"dateUpdate" timestamp without time zoneale, now() vraci timestamp with time zone ?
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" );
(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
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
. 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.
Tiskni
Sdílej: