Приветствую, коллеги!
жизнь вынудила перейти на слоника ...
имеем
1. INSERT что-то, куда-то , атоматом проставляется автоинкрементное заначение ИД
2 INSERT что-то еще, полученное в прошлом инсерте автоинкрементное ИД куда-то еще.
грубо говоря, ф-ия PHP pg_trans, которая получает массив запросов, после чего исполняет их все в рамках транзакции.
таким образом на момент создания запроса 2 первый еще не выполнен и соответственно, ИД не известен.
проверять второй запрос на наличие некоего ИД и заменять его на свежеполученный после первого ... как-то некрасиво.
Вопрос:
есть ли какая-нибудь "внутренняя переменная", которая хранит в себе последний выданный ИД и которую я могу использовать во втором запросе.
Пожалуйста, подскажите, уважаемые, как должен выглядеть второй запрос?
собственно
собственно говоря, поле
"ID" SERIAL
не что иное, как
т.е. значения автоинкрементного поля берутся не "откуда-то" а из сиквенса (то бишь последовательности), оттуда и вы можете его взять, используя функции http://postgresql.ru.net/manual/functions-sequence.html
или можно так
INSERT что-то, куда-то
INSERT что-то, куда-то RETURNING "ID"
Напишите, пожалуйста, на примере, как это реализовать на php. И полученный id сохранить в переменную
А я вот против таких решений
> из сиквенса (то бишь последовательности), оттуда и вы можете его взять
Беря что-либо из сиквенса, вы привязываете решение исключительно к PostgreSQL, но зачем?
Что мешает вначале транзакции взять MAX(ID), увеличить его на 1 и спокойно использовать это значение?
Уровень изолированности
Уровень изолированности транзакций
https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C...
Собственно, msr
Собственно, msr всё уже сказал. Добавлю только, что в PostgreSQL полноценно работают ТРАНЗАКЦИИ. Что очень и очень облегчает жизнь!
Благадарствую, уважаемые.
Это самое решение и нашел - курвал из последовательности автоинкремента
Мучас грасиас!