Nezostáva mi nič iné len si zakričať 3x hurá vývojárom PostgreSQL.
A jedna otázka. OID som v PostgreSQL používal na zistenie ID posledne vloženého riadku tabulky. (nejak takto)
$db_oid = $conn ->Insert_ID();
$sql = "SELECT priloha_id FROM prilohy WHERE oid=".$db_oid;
Síce to môžem používať aj naďalej ale budem musieť pamätať vždy na ...WITH OID; Jestvuje nejaký lepší spôsob, ktorý mi 100% vráti správne ID?
Vlákno názorů k článku
Co nového v PostgreSQL 8.0?
PostgreSQL 8.0
Re: PostgreSQL 8.0
Nepřecházel jste z MySQL? Váš způsob zjištění id je sice docela zajímavý, ale normálně se na to používají sekvence (pri insertu nextval, pak zjistit currval).
Re: PostgreSQL 8.0
A kdyz si mezitim ze stejne sekvence vyzvedne cislo nekdo jiny, tak vrati currval co?
Re: PostgreSQL 8.0
vrati to, co posledni vami volana nextval(). tedy presne to co potrebujete.
Re: PostgreSQL 8.0
To viem ale kdesi bola na tuto temu dlha debata a neutvrdila ma v tom ze pouzivat currval() mi vzdy zabezpeci to spravne id - tusim ze ani transakcia nezabezpeci ze medzitym co volam currval() mi niekto vlozi dalsi riadok...
Re: PostgreSQL 8.0
Nic lepšího nenajdete. Sekvence fungují naprosto perfektně
Re: PostgreSQL 8.0
Ještě zbývá konzervativní metoda nejdřív zavolat nextval a uložit si výsledek do proměnné. V insertu pak explicitně použít na místě ID tuto proměnnou a použít ji i pro jakoukoliv další potřebnou operaci.
Jinak zde je příslušná sekce z manuálu k funkci currval:
Return the value most recently obtained by nextval for this sequence in the current session. (An error is reported if nextval has never been called for this sequence in this session.) Notice that because this is returning a session-local value, it gives a predictable answer even if other sessions are executing nextval meanwhile.
Nicméně právě proto, že se snažím PostgreSQL propagovat mezi stávajícími uživateli MySQL, si myslím, že by bylo hezké mít funkci, která by volání currval zabalila tak, aby se podobalo volání vracejícímu v MySQL naposledy insertované ID. Asi to není problém napsat v plpgsql s využitím informačního schématu.
Re: PostgreSQL 8.0
No, kdyz si prectes navod k sekvencim, tak je tam napsany, ze kazdy proces pouziva vlastni "prostor" sekvence, takze je zaruceno, ze v ramci jedne session dostanes "spravne" currval... Ale pristup MySQL se mi libi vic (s tim serial-id - nebo jak se to jmenuje - jako typ sloupce)
Re: PostgreSQL 8.0
V postgre existuje typ SERIAL a BIGSERIAL, což jsou jakési pseudotypy, které při založení tabulky založí sekvenci a do default hodnoty nastaví nextval...
http://www.postgresql.org/docs/7.4/interactive/datatype.html#DATATYPE-SERIAL
Re: PostgreSQL 8.0
a sakra ted si nejsem jistej jestli curval neni transaction safe, tzn ze vrati posledni nexval v transakci tj volani curval bez predchoziho nextval nevraci nic (nebo chybu)....
mam ted zrovna pgqdmin otevrenej ale mam taky prilis velkej kopr to zkusit... kazdopadne v dokumentaci to bude
Re: PostgreSQL 8.0
do konfiguraku jde napsat ze defaultne se maji vytvaret s oid

