Hirdetés

Új hozzászólás Aktív témák

  • bambano

    titán

    LOGOUT blog

    válasz Petya25 #4509 üzenetére

    a probléma pár órás tojtorozása után nekem úgy tűnik, hogy a legegyszerűbb megoldás a következő:
    csinálsz egy táblát, olyan szerkezettel, ami neked tetszik, plusz hozzáadsz egy oszlopot, pl. sor néve, text típussal:
    tmp=> \d merestmp
                                     Table "public.merestmp"
     Column |       Type       | Collation | Nullable |               Default                
    --------+------------------+-----------+----------+--------------------------------------
     id     | bigint           |           | not null | nextval('merestmp_id_seq'::regclass)
     subid  | bigint           |           |          | 
     azon   | text             |           |          | 
     meres1 | double precision |           |          | 
     meres2 | double precision |           |          | 
     meres3 | double precision |           |          | 
     meres4 | double precision |           |          | 
     sor    | text             |           |          | 

    utána belemásolod az input fájljaidat úgy, hogy a szövegből minden sort egyben tegyen bele a sor mezőbe:

    \copy merestmp(sor) from '/tmp/mteszt.txt';

    Majd adatbáziskezelős függvényekkel szétszeded a sorokat.
    update merestmp set subid=id,azon=trim(both from sor) where array_length(regexp_split_to_array(sor,' +'),1)=1;

    ezek után a subid-t beállítod az előtte levő sorra:
    update merestmp m1 set subid=(select max(subid) from merestmp m2 where m2.id<m1.id) where array_length(regexp_split_to_array(sor,' +'),1)=5;
    ennél a megoldásnál nyilván van szebb is, windowing funkciókkal...
    utána már csak regexp-ekkel ki kell szedni a mezőket a sorból és betenni a helyükre.

Új hozzászólás Aktív témák