Как я могу использовать CURRVAL / RETURNING PostgreSql из другого php-файла?
Я бегу INSERT
запрос из одного файла php, но затем мне нужно получить последний вставленный идентификатор из внешнего файла php, чтобы выполнить другой запрос на основе этого идентификатора. Как я могу осуществить это, используя CURRVAL
или же RETURNING
? Из внешнего файла php, если я сделаю что-то вроде
$result = pg_query($db,"SELECT CURRVAL('app.example_id_seq'), ... ");
Я не получаю результатов.
2 ответа
Вы можете запросить последовательность, как если бы это была таблица:
SELECT last_value
FROM app.example_id_seq
WHERE is_called;
Это не даст никакого результата, если последовательность никогда не использовалась (тогда is_called
является FALSE
).
Но это неправильное значение для определения идентификатора вновь вставленной строки таблицы. Это будет работать, только если никто не использовал последовательность после вставки строки. Кроме того, вы не можете выяснить, была ли вставка неудачной или нет.
Не уверен, для чего эти точки дерева в вашем примере. Тем не мение:
select currval('app.example_id_seq'::regclass);
Должно сработать. Иногда это может потерпеть неудачу с:
ERROR: 55000: currval of sequence "example_id_seq" is not yet defined in this session
Так что ничего не называется nextval
до currval
, Но если вы позвонили insert into
который работал, тот currval
должен работать так же.
Начать использовать RETURNING
Пожалуйста, посетите документы - есть примеры. В основном вы перечисляете имена столбцов, которые должны быть в результате вставки или обновления.