Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Как узнать OID вставленной записи в Postgre 8.1  [new]
ShadyAngel
Member

Откуда:
Сообщений: 148
Подскажите, кто как реализует типовую задачу получения оида нововставленой записи? В 8.1 синтаксис insert ... returning oid еще не применим, а при узнавании значения текущей последовательности после вставки, наверно можно напороться на то что перед выполнением select currval кто то еще успеет вставить строку.

Как это правильно сделать? Кстати пытался в pgAdmine засунуть select в транзакцию для примера, так в результате вообще ничего не получаю. Запихал
begin;
select * from us_admins;
commit;

Получил

Query result with 5 rows discarded.
Query returned successfully with no result in 0 ms.

Почему discared?
PS если важно - клиент PHP5
17 янв 07, 10:32    [3652245]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать OID вставленной записи в Postgre 8.1  [new]
Serik Akhmetov
Member

Откуда:
Сообщений: 565
ShadyAngel
а при узнавании значения текущей последовательности после вставки, наверно можно напороться на то что перед выполнением select currval кто то еще успеет вставить строку.
Узнавай nextval до вставки.
17 янв 07, 10:46    [3652353]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать OID вставленной записи в Postgre 8.1  [new]
st_serg
Member

Откуда: Москва
Сообщений: 591
ShadyAngel
наверно можно напороться на то что перед выполнением select currval кто то еще успеет вставить строку.



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 whether or not other sessions have executed nextval since the current session did.

если кто-то другой работает не в вашей сессии, то все будет впорядке.
17 янв 07, 10:54    [3652434]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать OID вставленной записи в Postgre 8.1  [new]
ShadyAngel
Member

Откуда:
Сообщений: 148
Сам нашел :) В PHP5 есть такая функция pg_last_oid

если в нее передать результат выполнения pg_query то она вернет OID
17 янв 07, 11:57    [3653080]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать OID вставленной записи в Postgre 8.1  [new]
Misha Tyurin
Member

Откуда: Тюмень
Сообщений: 2243
PostgreSQL 8.2.1 Documentation INSERT


Outputs

On successful completion, an INSERT command returns a command tag of the form
INSERT oid count
The count is the number of rows inserted. If count is exactly one, and the target table has OIDs, then oid is the OID assigned to the inserted row. Otherwise oid is zero.
If the INSERT command contains a RETURNING clause, the result will be similar to that of a SELECT statement containing the columns and values defined in the RETURNING list, computed over the row(s) inserted by the command.


-- insert a single row into table distributors, returning the sequence number generated by the DEFAULT clause:

INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets')
   RETURNING did;
17 янв 07, 15:09    [3654962]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать OID вставленной записи в Postgre 8.1  [new]
Misha Tyurin
Member

Откуда: Тюмень
Сообщений: 2243
Не заметел что речь только про 8.1.
17 янв 07, 15:23    [3655080]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать OID вставленной записи в Postgre 8.1  [new]
Jelis
Member

Откуда: Riga
Сообщений: 242
ShadyAngel
Подскажите, кто как реализует типовую задачу получения оида нововставленой записи? В 8.1 синтаксис insert ... returning oid еще не применим, а при узнавании значения текущей последовательности после вставки, наверно можно напороться на то что перед выполнением select currval кто то еще успеет вставить строку.


А зачем вам узнавать OID? Или речь всетаки идет именно об поле с sequence, а не об системном oid'e?
17 янв 07, 15:50    [3655265]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать OID вставленной записи в Postgre 8.1  [new]
MaximZ
Member

Откуда:
Сообщений: 187
я бы избежал этих ситуаций.
next_val намного универсальнее и практичнее.
18 янв 07, 21:05    [3663612]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать OID вставленной записи в Postgre 8.1  [new]
DeWiL
Member

Откуда:
Сообщений: 80
MaximZ
я бы избежал этих ситуаций.
next_val намного универсальнее и практичнее.


это наилучший вариант для любого клиента, работающего с pg.
взял next_val
сделал с ним insert
и у тебя на руках остался id
20 янв 07, 21:34    [3670850]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать OID вставленной записи в Postgre 8.1  [new]
Jelis
Member

Откуда: Riga
Сообщений: 242
DeWiL
MaximZ
я бы избежал этих ситуаций.
next_val намного универсальнее и практичнее.


это наилучший вариант для любого клиента, работающего с pg.
взял next_val
сделал с ним insert
и у тебя на руках остался id


Так а чем же не устраивает currval() после инсерта?
22 янв 07, 15:15    [3675602]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить