Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как узнать OID вставленной записи в Postgre 8.1 / 10 сообщений из 10, страница 1 из 1
17.01.2007, 10:32
    #34260740
ShadyAngel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать OID вставленной записи в Postgre 8.1
Подскажите, кто как реализует типовую задачу получения оида нововставленой записи? В 8.1 синтаксис insert ... returning oid еще не применим, а при узнавании значения текущей последовательности после вставки, наверно можно напороться на то что перед выполнением select currval кто то еще успеет вставить строку.

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

Получил

Код: plaintext
1.
2.
Query result with  5  rows discarded.
Query returned successfully with no result in  0  ms.

Почему discared?
PS если важно - клиент PHP5
...
Рейтинг: 0 / 0
17.01.2007, 10:46
    #34260799
Serik Akhmetov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать OID вставленной записи в Postgre 8.1
ShadyAngelа при узнавании значения текущей последовательности после вставки, наверно можно напороться на то что перед выполнением select currval кто то еще успеет вставить строку. Узнавай nextval до вставки.
...
Рейтинг: 0 / 0
17.01.2007, 10:54
    #34260835
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать OID вставленной записи в Postgre 8.1
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.

если кто-то другой работает не в вашей сессии, то все будет впорядке.
...
Рейтинг: 0 / 0
17.01.2007, 11:57
    #34261144
ShadyAngel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать OID вставленной записи в Postgre 8.1
Сам нашел :) В PHP5 есть такая функция pg_last_oid

если в нее передать результат выполнения pg_query то она вернет OID
...
Рейтинг: 0 / 0
17.01.2007, 15:09
    #34262015
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать OID вставленной записи в Postgre 8.1
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.


Код: plaintext
1.
2.
3.
4.
-- 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;
...
Рейтинг: 0 / 0
17.01.2007, 15:23
    #34262065
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать OID вставленной записи в Postgre 8.1
Не заметел что речь только про 8.1.
...
Рейтинг: 0 / 0
17.01.2007, 15:50
    #34262149
Jelis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать OID вставленной записи в Postgre 8.1
ShadyAngelПодскажите, кто как реализует типовую задачу получения оида нововставленой записи? В 8.1 синтаксис insert ... returning oid еще не применим, а при узнавании значения текущей последовательности после вставки, наверно можно напороться на то что перед выполнением select currval кто то еще успеет вставить строку.


А зачем вам узнавать OID? Или речь всетаки идет именно об поле с sequence, а не об системном oid'e?
...
Рейтинг: 0 / 0
18.01.2007, 21:05
    #34266472
MaximZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать OID вставленной записи в Postgre 8.1
я бы избежал этих ситуаций.
next_val намного универсальнее и практичнее.
...
Рейтинг: 0 / 0
20.01.2007, 21:34
    #34270128
DeWiL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать OID вставленной записи в Postgre 8.1
MaximZя бы избежал этих ситуаций.
next_val намного универсальнее и практичнее.

это наилучший вариант для любого клиента, работающего с pg.
взял next_val
сделал с ним insert
и у тебя на руках остался id
...
Рейтинг: 0 / 0
22.01.2007, 15:15
    #34272514
Jelis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать OID вставленной записи в Postgre 8.1
DeWiL MaximZя бы избежал этих ситуаций.
next_val намного универсальнее и практичнее.

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

Так а чем же не устраивает currval() после инсерта?
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как узнать OID вставленной записи в Postgre 8.1 / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]