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?
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.
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)
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