Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Vlákno názorů k článku
Co nového v PostgreSQL 8.0?

Havran
Havran (neregistrovaný)
19. 1. 2005 8:17

PostgreSQL 8.0

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?

Michal Novotný
Michal Novotný (neregistrovaný)
19. 1. 2005 8:39

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

kamen
kamen (neregistrovaný)
19. 1. 2005 8:56

Re: PostgreSQL 8.0

A kdyz si mezitim ze stejne sekvence vyzvedne cislo nekdo jiny, tak vrati currval co?

bul
bul (neregistrovaný)
19. 1. 2005 9:00

Re: PostgreSQL 8.0

vrati to, co posledni vami volana nextval(). tedy presne to co potrebujete.

Havran
Havran (neregistrovaný)
19. 1. 2005 11:33

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

Pavel Stěhule
Pavel Stěhule (neregistrovaný)
19. 1. 2005 12:04

Re: PostgreSQL 8.0

Nic lepšího nenajdete. Sekvence fungují naprosto perfektně

Dalibor Šrámek
Dalibor Šrámek (neregistrovaný)
19. 1. 2005 13:25

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.

Abraxis
Abraxis (neregistrovaný)
19. 1. 2005 13:28

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)

Kepi
Kepi (neregistrovaný)
25. 1. 2005 10:39

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

chytrej
chytrej (neregistrovaný)
19. 1. 2005 16:55

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

Lampa
Lampa (neregistrovaný)
19. 1. 2005 9:23

Re: PostgreSQL 8.0

do konfiguraku jde napsat ze defaultne se maji vytvaret s oid

Zasílat nově přidané příspěvky e-mailem