postgres a id serial

Sekcia: Programovanie 20.01.2009 | 11:28
trolo   Návštevník
Zdravicko

robim si stored funkciu ktora ma vratit ID riadka ktory do nej funkcia vlozi.
neviem ci som to spravne vysvetlil takze pokusim sa podrobnejsie

toto je nejaka funkcia

CREATE FUNCTION "vlozriadok" (varchar) RETURNS bigint AS 'begin
declare
slovo alias for $1;

insert into tabulka (text) VALUES('slovo')

return ??? <----- no a tu potrebujem nieco aby to vratilo ID toho riadka(tabulka pozostava zo stlpcov(ID-bigserial,TEXT-varchar)

end;' LANGUAGE "plpgsql"


vie mi niekto poradit?
dakujem moc
    • Re: postgres a id serial 20.01.2009 | 12:05
      Avatar klingac   Používateľ
      moc sa do postgres nevyznam ale zbezne zagooglenie dalo toto:
      http://en.wikipedia.org/wiki/Insert_(SQL)
      doporucujem obzvlast sekciu "Retrieving the key"
    • Re: postgres a id serial 20.01.2009 | 13:12
      Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
      i INTEGER;
      insert into tabulka (text) VALUES('slovo') RETURNING currval('mytable_pkey') into i;

      mytable_pkey je primarny kluc
      • Re: postgres a id serial 20.01.2009 | 15:19
        trolo   Návštevník
        dik za nakopnutie ale postgres si moc nerozumie s RETURNIG, respektive ho nepozna,
        tak ma napadlo co ta urobit
        select MAX(id) from tabulka into i;
        return i;

        ale neviem co sa stane ked sa id dosatne na koniec svojho rozsahu, ci sa nezacne cislovat od zaciatku teda od 0, to by mi pak uz MAX(id) moc nepomohlo, i ked neplanujem ze by sa rozsah IDcka vycerpal ale clovek nikdy nevie :(
        • Re: postgres a id serial 20.01.2009 | 15:29
          Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
          urcite to nerob cez MAX, ak medzitym (ak je to viacuzivatelsky system) niekto vlozil inu vetu tak ti to vrati blbe cislo, skusil si

          return currval('tabulka.id');
          • Re: postgres a id serial 20.01.2009 | 16:16
            trolo   Návštevník
            no tak som skusil ako pises na posledy a vyzera to uz lepsie, len nechapem preco mi potom vypise tuto hlasku
            ERROR: could not open relation with OID 6
            CONTEXT: SQL statement "SELECT currval(id) from tabulka"
            PL/pgSQL function "vlozriadok" line 12 at return

            a funkcia vyzera takto:
            declare
             Ptext alias for $1;
            
            
            begin
            INSERT INTO tabulka (text)
            VALUES(Ptext);
            return currval(id) from tabulka;
            end;
            
            • Re: postgres a id serial 20.01.2009 | 16:35
              Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
              je v tabulke "tabulka" stlpec "id" resp. to (id) nemalo by byt v uvodzovkach? Aky je v tej tabulke primarny index?
              • Re: postgres a id serial 20.01.2009 | 17:16
                trolo   Návštevník
                ano stlpec id existuje
                id skusam davat do uvodzoviek avsak bez rozdielu
                index nebol ziadny, tak som vytvoril index na stlpec id

                hmm nechapem co sa mu nepaci
                :((
                • Re: postgres a id serial 21.01.2009 | 10:26
                  trolo   Návštevník
                  tak podarilo sa :)))
                  rano mudrejsia vecera :D

                  return currval('sms_id_seq'::regclass);

                  vdaka za pomoc a nakopnutia ;)