Источник:
http://tmbu.info
На работе пришлось перейти с привычного MySQL на PostgreSQL, с которым я
раньше почти не работал. Сразу возникло сравнительно много вопросов. Среди них -
срочный: как получить id только что вставленной строчки (т.е. понадобился аналог
mysql_insert_id()). Понятно, что последующий select по
некоторым признакам - плохая идея. Поэтому был найден хороший путь.
Для генерации id у меня, понятное дело, используется sequence
(т.е. тип поля id - serial или bigserial). И
оказалось, что новое значение id можно получить таким запросом:
-
SELECT
currval('название_sequence');
Такой запрос выдаст последнее значение, выбранное из
последовательности название_sequence функцией nextval()
в текущем соединении с базой. В разных, пусть даже одновременно работающих,
скриптах эта функция будет возвращать разные значения. Если же в текущем
соединении функция nextval('название_sequence') не выполнялась, то
currval('название_sequence') вернет ошибку.
В версии 8.1 была добавлена функция lastval(), которая
вернет последнее значение, выбранное функцией nextval() в текущем
соединении.
Кроме того, есть ситуации, когда неизвестно название sequence
(или его лень писать или смотреть, например ;)). Тогда можно написать так
(работать это будет начиная с PostgreSQL 8.0):
-
SELECT
currval(pg_get_serial_sequence('таблица',
'id_поле'));
Дата проведения: 28 октября 2008 г.; Место проведения: Амбер Плаза, Москва,
Россия. Конференция для веб-разработчиков и разработчиков мобильных приложений в
Москве. Узнайте, как наилучшим образом использовать инструменты разработки и API
от Google, чтобы создавать социальные, мобильные и картографические приложения,
как использовать AJAX/JavaScript инструменты и библиотеки от Google и многое
другое из первых уст.
Совсем недавно наткнулся в интернете на забавный "хит-парад" наиболее
раздражающих вещей для программиста. Поскольку он был на английском — решил
перевести текст и несколько адаптировать к нашим реалиям…